Olá a todos. Estou tentando usar a função "Export Assetpackage" com o UNtools (2.6.2), mas estou enfrentando um erro bastante irritante, e espero que alguém possa me ajudar a corrigi-lo. <\/P>
Devido a eu estar testando algumas outras funções relacionadas ao carregamento de dados em planilhas, criei mais de uma Utility network no mesmo geodatabase local. Isso resultou em nomes de classes terminando com "_1" na segunda Utility network que criei. Isso vale para todos os diferentes nomes nesse modelo de utility network.
Exemplo do problema de nome<\/span><\/span><\/P>Quando tento exportar essa UN para um assetpackage, recebo o seguinte erro:<\/P>"linha 623, em parse_un_class
raise ValueError("'{}' did not satisfy regex".format(name))
ValueError: 'StructureBoundary_1' não satisfez o regex"<\/P> <\/P>Se eu olhar para a linha 623 no arquivo "common.py", o erro se refere a ela como parte da seguinte função:<\/P>@lru_cache()<\/EM>
def parse_un_class(class_name: str, structure_as_none: bool = False) -> Tuple:<\/EM>
"""Analisa class_name para extrair o nome do domínio e o tipo da classe<\/EM><\/P>Args:<\/EM>
class_name (str): O caminho para a classe UN.<\/EM>
structure_as_none (bool): Retorna Structure Network como ``None``; padrão é ``False``.<\/EM><\/P>Retorna:<\/EM>
tuple: (Nome do domínio, tipo da classe)<\/EM><\/P>Exemplos:<\/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>Lança:<\/EM>
ValueError: Se ``class_name`` não for uma classe UN válida.<\/EM>
"""
if class_name is None:<\/EM>
return None, None<\/EM><\/P># TODO: reescrever isso para lidar com nomes de classes duplicados (ex StructureJunction_2)<\/EM>
name = os.path.split(class_name)[-1].rpartition('.')[-1]<\/EM>
# Usando quantificador lazy para que Subnet seja incluído com Line e não no nome do domínio<\/EM>
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',
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>
# Os tipos de classe do domínio Structure são '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
Agora posso ver que o criador colocou um "TODO" para ele/ela/ele mesmo reescrever a função para que ela possa suportar nomes de classes duplicados.
Alguém tem alguma ideia de como eu poderia editar parte da função "parse_un_class(class_name: str, structure_as_none: bool = Fals) -> Tuple:" para que ela aceite meus elementos UN com "_1"?
Tentei editar:
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',
name, re.IGNORECASE)
para ter "_1" no final assim:
res = re.findall('(.+?)(Assembly_1|Device_1|Junction_1|Line|SubnetLine_1|Boundary_1|EdgeObject_1|JunctionObject_1)$',
name, re.IGNORECASE)
Mas ele lança o mesmo erro de antes. Não quero editar demais em lugares onde não tenho conhecimento para editar, mas passei MUITO tempo configurando o modelo para simplesmente descartá-lo e fazer tudo novamente.
Qualquer dica, pensamento ou ideia será muito bem-vinda!
PS. Não posso atualizar para uma versão superior do untools, pois sou obrigado a manter a versão do nosso servidor enterprise onde o UNM eventualmente será implantado.