Bonjour à tous. J'essaie d'utiliser la fonction "Export Assetpackage" avec UNtools (2.6.2) mais je rencontre une erreur assez ennuyeuse, et j'espère que quelqu'un pourra m'aider à la corriger. <\/P>
Comme j'ai testé d'autres fonctions concernant le chargement de données dans des classeurs, j'ai créé plus d'un Utility network dans la même géodatabase locale. Cela a entraîné des noms de classes se terminant par "_1" dans le deuxième Utility network que j'ai créé. Cela concerne tous les différents noms dans ce modèle de utility network.
Exemple de problème de nom<\/span><\/span><\/P>Quand j'essaie d'exporter cet UN vers un assetpackage, j'obtiens l'erreur suivante :<\/P>"ligne 623, dans parse_un_class
raise ValueError("'{}' did not satisfy regex".format(name))
ValueError: 'StructureBoundary_1' did not satisfy regex"<\/P> <\/P>Si je regarde la ligne 623 dans le fichier "common.py", l'erreur semble faire partie de la fonction suivante :<\/P>@lru_cache()<\/EM>
def parse_un_class(class_name: str, structure_as_none: bool = False) -> Tuple:<\/EM>
"""Analyse class_name pour extraire le nom du domaine et le type de classe<\/EM><\/P>Arguments :<\/EM>
class_name (str) : Le chemin vers la classe UN.<\/EM>
structure_as_none (bool) : Retourne Structure Network comme ``None`` ; par défaut ``False``.<\/EM><\/P>Retourne :<\/EM>
tuple : (Nom du domaine, type de classe)<\/EM><\/P>Exemples :<\/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>Lève :<\/EM>
ValueError : Si ``class_name`` n'est pas une classe UN valide.<\/EM>
"""<\/EM>
if class_name is None:<\/EM>
return None, None<\/EM><\/P># TODO : réécrire ceci pour gérer les noms de classes dupliqués (ex StructureJunction_2)<\/EM>
name = os.path.split(class_name)[-1].rpartition('.')[-1]<\/EM>
# Utilisation d'un quantificateur paresseux pour que Subnet soit inclus avec Line et non le nom du domaine<\/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>
# Les types de classes du domaine Structure sont '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
Maintenant je vois que le créateur a mis un "TODO" pour lui-même afin de réécrire la fonction pour qu'elle puisse supporter les noms de classes dupliqués.
Quelqu'un aurait-il des idées sur la façon dont je pourrais modifier une partie de la fonction "parse_un_class(class_name: str, structure_as_none: bool = Fals) -> Tuple:" pour qu'elle accepte mes éléments UN avec "_1" ?
J'ai essayé d'éditer :
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',
name, re.IGNORECASE)
pour avoir "_1" à la fin comme ceci :
res = re.findall('(.+?)(Assembly_1|Device_1|Junction_1|Line|SubnetLine_1|Boundary_1|EdgeObject_1|JunctionObject_1)$',
name, re.IGNORECASE)
Mais cela génère la même erreur qu'avant. Je ne veux pas trop modifier des parties où je n'ai pas à intervenir, mais j'ai passé BEAUCOUP trop de temps à configurer le modèle pour simplement l'abandonner et recommencer.
Tous conseils, réflexions ou idées sont les bienvenus !
PS. Je ne peux pas mettre à jour vers une version supérieure d'untools, car je suis obligé de rester sur la version de notre serveur enterprise où l'UNM finira par être déployé.