55
66
77import logging
8+ import keyword
89
910from . import rdfxml
1011from . import utils
1112
13+
1214logger = logging .getLogger (__name__ )
1315
1416#################################################################################################
1517
18+ def makeSafeAttributeName ( name , propuri ):
19+ # print( f"Make safe name fror {name } so it can be used as a Python object attribute" )
20+ res = ""
21+ for c in name :
22+ if not c .isalpha ():
23+ c = "_"
24+ res += c
25+ if keyword .iskeyword ( res ) or keyword .issoftkeyword ( res ):
26+ # print( f"unsafe {name}" )
27+ res = makeSafeAttributeName ( rdfxml .uri_to_prefixed_tag ( propuri ), propuri )
28+ # print( f"Make safe name fror {name } {res}" )
29+ return res
30+
31+ #################################################################################################
32+
1633class No_Type_System_Mixin ():
1734 def __init__ (self ,* args ,** kwargs ):
1835 self .has_typesystem = False
@@ -179,7 +196,7 @@ def is_known_linktype_uri( self, uri ):
179196
180197 def register_shape ( self , shape_name , shape_uri , * , rdfuri = None , shape_formats = None ):
181198 logger .info ( f"register_shape { shape_name = } { shape_uri = } " )
182- print ( f"register_shape { shape_name = } { shape_uri = } " )
199+ # print( f"register_shape {shape_name=} {shape_uri=}" )
183200 shape_uri = self .normalise_uri ( shape_uri )
184201 if shape_uri in self .shapes :
185202 raise Exception ( f"Shape { shape_uri } already defined!" )
@@ -222,19 +239,24 @@ def is_known_property_uri( self, property_uri, *, raiseifnotfound=True ):
222239# def register_property( self, property_name, property_uri, *, property_value_type=None, shape_uri=None, altname = None, do_not_overwrite=True, property_definition_uri=None, isMultiValued=False, typeCodec=None ):
223240 def register_property ( self , property_name , property_uri , * , shape_uri = None , property_value_type = None , altname = None , do_not_overwrite = True , property_definition_uri = None , isMultiValued = False , typeCodec = None ):
224241 logger .info ( f"register_property { property_name = } { property_uri = } { isMultiValued = } { typeCodec = } " )
225- print ( f"register_property { property_name = } { property_uri = } { isMultiValued = } { typeCodec = } " )
242+ # print( f"register_property {property_name=} {property_uri=} {isMultiValued=} {typeCodec=}" )
226243 if property_uri in self .properties :
227244# print( f"Already defined {self.properties[property_uri]=}" )
228245# burp
229246 pass
230247 property_uri = self .normalise_uri ( property_uri )
248+ safeName = makeSafeAttributeName ( property_name , property_uri )
231249# shape_uri = self.normalise_uri( shape_uri )
250+
232251 if not do_not_overwrite or property_uri not in self .properties :
233252# self.properties[property_uri] = {'name': property_name, 'shape': shape_uri, 'enums': [], 'value_type': property_value_type, 'altname':altname, 'isMultiValued':isMultiValued, 'typeCodec': typeCodec }
234- self .properties [property_uri ] = {'name' : property_name , 'enums' : [], 'value_type' : property_value_type , 'altname' :altname , 'isMultiValued' :isMultiValued , 'typeCodec' : typeCodec }
253+ self .properties [property_uri ] = {'name' : property_name , 'safeName' : safeName , 'enums' : [], 'value_type' : property_value_type , 'altname' :altname , 'isMultiValued' :isMultiValued , 'typeCodec' : typeCodec }
254+
235255 if altname and property_definition_uri and ( not do_not_overwrite or property_definition_uri not in self .properties ):
236256 self .properties [property_definition_uri ] = {'name' : altname , 'enums' : [], 'value_type' : property_value_type , 'altname' :None , 'isMultiValued' :isMultiValued , 'typeCodec' : typeCodec }
237257 self .properties [rdfxml .uri_to_default_prefixed_tag (property_definition_uri )] = {'name' : altname , 'enums' : [], 'value_type' : property_value_type , 'altname' :None , 'isMultiValued' :isMultiValued , 'typeCode' : typeCodec }
258+
259+ # make sure the property is recorded on the shape
238260 if shape_uri is not None and property_uri not in self .shapes [shape_uri ]['properties' ]:
239261 self .shapes [shape_uri ]['properties' ].append (property_uri )
240262
@@ -253,10 +275,13 @@ def register_property_codec( self, property_name, property_uri, codec ):
253275 def register_linktype ( self , linktype_name , linktype_uri , label , * , inverselabel = None , rdfuri = None , isMultiValued = False , typeCodec = None ):
254276 logger .info ( f"register_linktype { linktype_name = } { linktype_uri = } { label = } { inverselabel = } { rdfuri = } { typeCodec = } " )
255277 linktype_uri = self .normalise_uri ( linktype_uri )
278+
279+ safeName = makeSafeAttributeName ( linktype_name , linktype_uri )
280+
256281# shape_uri = self.normalise_uri( shape_uri )
257282 if linktype_uri not in self .linktypes :
258283# self.linktypes[linktype_uri] = {'name': label, 'inverselabel': inverselabel, 'shape': shape_uri, 'rdfuri': rdfuri }
259- self .linktypes [linktype_uri ] = {'name' : linktype_name , 'label' : label , 'inverselabel' : inverselabel , 'rdfuri' : rdfuri , 'typeCodec' : typeCodec }
284+ self .linktypes [linktype_uri ] = {'name' : linktype_name , 'safeName' : safeName , ' label' : label , 'inverselabel' : inverselabel , 'rdfuri' : rdfuri , 'typeCodec' : typeCodec }
260285# if shape_uri is not None:
261286# self.shapes[shape_uri]['linktypes'].append(linktype_uri)
262287
@@ -325,6 +350,7 @@ def is_known_enum_uri( self, enum_uri ):
325350
326351 def register_enum ( self , enum_name , enum_uri , property_uri , * , id = None ):
327352 logger .info ( f"register_enum { enum_name = } { enum_uri = } { property_uri = } { id = } " )
353+ # print( f"register_enum {enum_name=} {enum_uri=} {property_uri=} {id=}" )
328354 # add the enum to the property
329355 enum_uri = self .normalise_uri ( enum_uri )
330356 property_uri = self .normalise_uri ( property_uri )
@@ -349,16 +375,20 @@ def get_enum_name( self, enum_uri ):
349375
350376 def get_enum_id ( self , enum_name , property_uri ):
351377 logger .info ( f"get_enum_id { enum_name = } { property_uri = } " )
378+ # print( f"get_enum_id {enum_name=} {property_uri=}" )
352379 property_uri = self .normalise_uri ( property_uri )
353380 result = None
354381 logger .info ( f"{ self .properties [property_uri ]= } " )
382+ # print( f"{self.properties[property_uri]=}" )
355383 logger .info ( f"{ self .properties [property_uri ]['enums' ]= } " )
384+ # print( f"{self.properties[property_uri]['enums']=}" )
356385 for enum_uri in self .properties [property_uri ]['enums' ]:
357386 if self .enums [enum_uri ]['name' ]== enum_name :
358387 result = self .enums [enum_uri ]['id' ] or enum_uri
359388# result = enum_uri # this makes ccm queries for e.g. rc:cm:type=Defect not work - ccm doens't like getting a URI - # unfortunately I can't remember why I added this line :-(
360389 break
361390 logger .info ( f"get_enum_id { enum_name = } { property_uri = } { result = } " )
391+ # print( f"get_enum_id {enum_name=} {property_uri=} {result=}" )
362392 return result
363393
364394 # generic uri/name
0 commit comments