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]")
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)