Hallo allemaal. Ik probeer de functie "Export Assetpackage" te gebruiken met UNtools (2.6.2), maar ik loop tegen een nogal vervelende fout aan, en ik hoop dat iemand me kan helpen deze te corrigeren. <\/P>
Omdat ik wat andere functies aan het testen was met betrekking tot het laden van datawerkboeken, heb ik meer dan één Utility network gemaakt in dezelfde lokale geodatabase. Dit heeft ertoe geleid dat ik klassennamen heb die eindigen op "_1" in het tweede Utility network dat ik heb gemaakt. Dit geldt voor alle verschillende namen in dat utility network model.
Voorbeeld van naamprobleem<\/span><\/span><\/P>Wanneer ik probeer dit UN te exporteren naar een assetpackage, krijg ik de volgende foutmelding:<\/P>"regel 623, in parse_un_class
raise ValueError("'{}' voldoet niet aan regex".format(name))
ValueError: 'StructureBoundary_1' voldoet niet aan regex"<\/P> <\/P>Als ik regel 623 bekijk in het bestand "common.py", verwijst de fout naar het volgende deel van de functie:<\/P>@lru_cache()<\/EM>
def parse_un_class(class_name: str, structure_as_none: bool = False) -> Tuple:<\/EM>
"""Parseert class_name om de domeinnaam en klasse type te extraheren.<\/EM><\/P>Args:<\/EM>
class_name (str): Het pad naar de UN klasse.<\/EM>
structure_as_none (bool): Geeft Structure Network terug als ``None``; standaard is ``False``.<\/EM><\/P>Returns:<\/EM>
tuple: (Domeinnaam, klasse type)<\/EM><\/P>Voorbeelden:<\/EM>
>>> parse_un_class("Naper.un.ElectricLine")<\/EM>
("Electric", "Line")<\/EM>
>>> parse_un_class("C:\/con.sde\/Naper.un.Electric\/Naper.un.StructureBoundary")<\/EM>
("Structure", "StructureBoundary")<\/EM>
>>> parse_un_class("C:\/con.sde\/Naper.un.Electric\/Naper.un.StructureBoundary", structure_as_none=True)<\/EM>
(None, "StructureBoundary")<\/EM><\/P>Raises:<\/EM>
ValueError: Als ``class_name`` geen geldige UN klasse is.<\/EM>
"""<\/EM>
if class_name is None:<\/EM>
return None, None<\/EM><\/P># TODO: herschrijf dit om dubbele klassennamen te verwerken (bijv. StructureJunction_2)<\/EM>
name = os.path.split(class_name)[-1].rpartition('.')[-1]<\/EM>
# Gebruik een luie quantifier zodat Subnet wordt opgenomen bij Line en niet bij de domeinnaam<\/EM>
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',<\/EM>
name, re.IGNORECASE)<\/EM>
if not res:<\/EM>
raise ValueError("'{}' voldoet niet aan regex".format(name))<\/EM>
else:<\/EM>
domain, class_type = res[0]<\/EM>
# Structure domein klassentypes zijn 'Structure(Junction|Line|Boundary)'<\/EM>
if domain.upper() == 'STRUCTURE':<\/EM>
class_type = "Structure" + class_type<\/EM>
if structure_as_none:<\/EM>
domain = None<\/EM>
return domain, class_type
Nu zie ik dat de maker een "TODO" heeft geplaatst voor hem/haar/hetzelf om de functie te herschrijven zodat deze dubbele klassennamen kan ondersteunen.
Heeft iemand ideeën over hoe ik een deel van de functie "parse_un_class(class_name: str, structure_as_none: bool = Fals) -> Tuple:" zou kunnen aanpassen zodat het mijn "_1" UN-elementen accepteert?
Ik heb geprobeerd te bewerken:
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',
name, re.IGNORECASE)
om "_1" aan het einde toe te voegen zoals volgt:
res = re.findall('(.+?)(Assembly_1|Device_1|Junction_1|Line|SubnetLine_1|Boundary_1|EdgeObject_1|JunctionObject_1)$',
name, re.IGNORECASE)
Maar het geeft dezelfde fout als eerder. Ik wil niet teveel aanpassen op plekken waar ik niets mee te maken heb, maar ik heb VEEL te veel tijd gestoken in het opzetten van het model om het zomaar weg te gooien en opnieuw te doen.
Alle tips, gedachten of ideeën zijn zeer welkom!
PS. Ik kan niet upgraden naar een hogere untools-versie, omdat ik vastzit aan de versie van onze enterprise server waar de UNM uiteindelijk zal worden gebruikt.