예제 #1
0
    def assertNameParts(cls, nameParts):

        for k, v in nameParts.named.iteritems():

            if re.match("^[A-Z][a-z]", v):
                msg = ("Invalid {}: '{}'. Must NOT start with an uppercase !"
                        .format(k, v))
                raise ValueError(msg)

            if len(v) > 24:
                msg = ("Invalid {}: '{}'. Must NOT exceed 24 characters, got {} !"
                        .format(k, v, len(v)))
                raise ValueError(msg)

            assertChars(v, r"[a-zA-Z0-9]")
예제 #2
0
def createFromCsv(sEntityType, sCsvFilePath, project="", **kwargs):

    if sEntityType == "asset":
        sEntityFields = ("Asset Name", "asset name")
        entityCls = DamAsset
    elif sEntityType == "shot":
        sEntityFields = ("Shot Code", "shot code")
        entityCls = DamShot
    else:
        raise ValueError("Invalid entity type: '{}'".format(sEntityType))

    sProject = os.environ["DAVOS_INIT_PROJECT"] if not project else project
    proj = DamProject(sProject)
    print sProject.center(80, "-")

    iMaxCount = kwargs.get("maxCount", -1)

    with open(sCsvFilePath, 'rb') as csvFile:

        dialect = csv.Sniffer().sniff(csvFile.read(4096))
        csvFile.seek(0)

        reader = csv.reader(csvFile, dialect)

        iNameColumn = -1
        iHeaderRow = 0

        for row in reader:

            bFound = False
            for sField in sEntityFields:
                try:
                    iNameColumn = row.index(sField)
                except ValueError:
                    pass
                else:
                    bFound = True
                    break

            if bFound:
                break

            iHeaderRow += 1

        assert iNameColumn != -1, 'Asset names missing from "{}" !'.format(sCsvFilePath)

        csvFile.seek(0)
        for _ in xrange(iHeaderRow + 1):
            reader.next()

        sEntityList = []
        damEntityList = []
        sErrorList = []
        for row in reader:

            sEntityName = row[iNameColumn]
            if sEntityName in sEntityList:
                continue

            sEntityList.append(sEntityName)

            try:
                assertChars(sEntityName, r'[\w]')
            except ValueError as e1:
                sErrorList.append(toStr(e1))
                continue

            try:
                damEntity = entityCls(proj, name=sEntityName)
            except Exception as e2:
                sErrorList.append(toStr(e2))
                continue

            print sEntityName
            damEntityList.append(damEntity)

        if sErrorList:
            raise RuntimeError("\n".join(sErrorList))

    count = 0
    for damEntity in damEntityList:

        if count == iMaxCount:
            break

        if damEntity.createDirsAndFiles(**kwargs):
            count += 1

    sCreated = "will create" if kwargs.get("dryRun") else "created"
    print "{} asset directories {}.".format(count, sCreated)