1 votos

Creación de versiones de ArcMap con Arcpy

¿Por qué no se rompe el script si existe la Versión?

Traceback (última llamada más reciente): Fichero " C:\Users\jnmiller\Desktop\Create User Version.py", línea 30, en arcpy.CreateVersion_management(sdeConnection, parentVersion, versionName, "PROTECTED") Archivo " C:\Program Archivos (x86) \ArcGIS\Desktop10.5\ArcPy\arcpy\management.py ", línea 18244, en CreateVersion raise e EjecutarError: ERROR 001148: No se puede crear una versión con el nombre especificado. Fallo en la ejecución (CreateVersion).

# Name: SDE_CreateVersion
# Description: Creates a new SDE version

# Import system modules
import arcpy, time, smtplib, os

# Set local variables
sdeConnection = "Database Connections\NEO_1.sde"
parentVersion = "sde.DEFAULT"
versionName = os.environ.get( "USERNAME" )

fullPath = os.path.join("Windows Credentials: EGAS", versionName)
existingVersion = os.path.join("Version Currently Exists: ",versionName)
createVersion = os.path.join("Version Created: ",versionName)

print("Searching for User Credentials..")
time.sleep(2)
print(fullPath)
time.sleep(3)
print("Checking SDE for existing Credentials..")

for version in arcpy.da.ListVersions(sdeConnection):
    if version.name.split(".")[0] == versionName:
        time.sleep(3)
        print(existingVersion)
        time.sleep(5)
        break
    else:
        # Execute CreateVersion
        arcpy.CreateVersion_management(sdeConnection, parentVersion, versionName, "PROTECTED")
        time.sleep(3)
        print(createVersion)
        time.sleep(5)

6voto

Braiam Puntos 120

Falla porque el bloque de creación de la versión está dentro del bucle sobre la versión existente. Tal y como está ahora, el código carga la lista de versiones, lee el nombre de la 1ª, y si el propietario es diferente al que está en versionName crea la versión.

Para solucionarlo, debe mover el bloque de creación de versión fuera del bucle. Se crea una variable flag versionFound que se establece en false por defecto, y a true si se encuentra la versión. Más tarde, si versionFound == False puede crear con seguridad la nueva versión

versionFound = False
for version in arcpy.da.ListVersions(sdeConnection):
    if version.name.split(".")[0] == versionName:
        time.sleep(3)
        print(existingVersion)
        time.sleep(5)
        versionFound = True
        break

# Execute CreateVersion
if not versionFound:
        arcpy.CreateVersion_management(sdeConnection, parentVersion, versionName, "PROTECTED")
        time.sleep(3)
        print(createVersion)
        time.sleep(5)

Hacer que los usuarios no esperen nada con todos los sleep no se consideran buenas prácticas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X