Hallo zusammen. Ich versuche, die Funktion "Export Assetpackage" mit UNtools (2.6.2) zu verwenden, stoße aber auf einen ziemlich lästigen Fehler und hoffe, dass mir jemand helfen kann, ihn zu beheben. <\/P>
Da ich einige andere Funktionen bezüglich des Datenladens von Arbeitsmappen getestet habe, habe ich mehr als ein Utility network in derselben lokalen Geodatabase erstellt. Dies hat dazu geführt, dass ich Klassennamen habe, die im zweiten Utility network, das ich erstellt habe, mit "_1" enden. Das gilt für alle verschiedenen Namen in diesem Utility network Modell.
Beispiel für Namensproblem<\/span><\/span><\/P>Wenn ich versuche, dieses UN in ein assetpackage zu exportieren, erhalte ich folgenden Fehler:<\/P>"line 623, in parse_un_class
raise ValueError("'{}' did not satisfy regex".format(name))
ValueError: 'StructureBoundary_1' did not satisfy regex"<\/P> <\/P>Wenn ich mir Zeile 623 in der Datei "common.py" anschaue, auf die sich der Fehler bezieht, ist sie Teil der folgenden Funktion:<\/P>@lru_cache()<\/EM>
def parse_un_class(class_name: str, structure_as_none: bool = False) -> Tuple:<\/EM>
"""Parst class_name, um den Domain-Namen und den Klassentyp zu extrahieren.<\/EM><\/P>Args:<\/EM>
class_name (str): Der Pfad zur UN-Klasse.<\/EM>
structure_as_none (bool): Gibt Structure Network als ``None`` zurück; Standard ist ``False``.<\/EM><\/P>Returns:<\/EM>
tuple: (Domain-Name, Klassentyp)<\/EM><\/P>Examples:<\/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: Wenn ``class_name`` keine gültige UN-Klasse ist.<\/EM>
"""<\/EM>
if class_name is None:<\/EM>
return None, None<\/EM><\/P># TODO: diese Funktion umschreiben, um doppelte Klassennamen zu behandeln (z.B. StructureJunction_2)<\/EM>
name = os.path.split(class_name)[-1].rpartition('.')[-1]<\/EM>
# Verwenden eines lazy quantifiers, damit Subnet mit Line eingeschlossen wird und nicht der Domain-Name<\/EM>
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',<\/EM>
name, re.IGNORECASE)<\/EM>
if not res:<\/EM>
raise ValueError("'{}' did not satisfy regex".format(name))<\/EM>
else:<\/EM>
domain, class_type = res[0]<\/EM>
# Struktur-Domain-Klassentypen sind '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
Jetzt sehe ich, dass der Ersteller ein "TODO" für sich selbst eingefügt hat, um die Funktion so umzuschreiben, dass sie doppelte Klassennamen unterstützen kann.
Hat jemand eine Idee, wie ich den Teil der Funktion "parse_un_class(class_name: str, structure_as_none: bool = Fals) -> Tuple:" bearbeiten könnte, damit sie meine "_1" UN-Elemente akzeptiert?
Ich habe versucht zu bearbeiten:
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',
name, re.IGNORECASE)
um "_1" am Ende hinzuzufügen wie folgt:
res = re.findall('(.+?)(Assembly_1|Device_1|Junction_1|Line|SubnetLine_1|Boundary_1|EdgeObject_1|JunctionObject_1)$',
name, re.IGNORECASE)
Aber es wirft denselben Fehler wie zuvor. Ich möchte nicht zu viel an Stellen ändern, an denen ich nichts zu suchen habe, aber ich habe VIEL Zeit damit verbracht, das Modell einzurichten, um es einfach wegzuwerfen und neu zu machen.
Jegliche Tipps, Gedanken oder Ideen sind sehr willkommen!
PS: Ich kann nicht auf eine höhere untools-Version upgraden, da ich gezwungen bin, bei der Version unseres Enterprise Servers zu bleiben, auf dem das UNM schließlich laufen wird.