Beispiel #1
0
    def eval_template(template, sobject=None, parent=None, snapshot=None):
        ''' generic method to values an sobject template expression'''
        # parse the pattern string
        expression = re.compile(r'{([\w|\.|\#]+\[?\d?\]?)}')
        temp_list = expression.findall(template)

        # if nothing is found, then just return parse through an expression
        if not temp_list:
            #return template
            # put in the ability to add expressions
            env_sobjects = {
                'snapshot': snapshot
            }
            xp = ExpressionParser()
            result = xp.eval(template, sobject, mode='string', env_sobjects=env_sobjects)
          
            test = template
            test = test.replace("{", "")
            test = test.replace("}", "")
            if test != result:
                return result

             

        # if nothing is found, temp_list is empty
        if not temp_list:
            temp_list = []

        # the main sobject
        if sobject:
            project = sobject.get_project()
        else:
            project = Project.get()


        result = template
        for part in temp_list:

            if part.find(".") != -1:
                # explict declarasions
                object, attr = part.split(".")

                index = -1
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))
                    


                if object == "sobject":
                    value = sobject.get_value(attr)

                elif object == "parent":
                    if not parent:
                        parent = sobject.get_parent()
                    if parent:
                        value = parent.get_value(attr)
                    else:
                        value = ''

                elif object in ["login", "user"]:
                    login = Environment.get_security().get_login()
                    value = login.get_value(attr)

                else:
                    raise NamingException("Can't parse part [%s] in template" % part)

                if index != -1:
                    value = re.split("[/._]", value)
                    value = value[index]

            else:
                value = part

            result = result.replace("{%s}" % part, str(value))

        return result
Beispiel #2
0
    def naming_to_dir(my, template, sobject, snapshot, file=None, file_type=None):
        '''
        # shot/SEQ001/shot_001
        '''

        # the main sobject
        project = sobject.get_project()

        # parse the pattern string
        expression = re.compile(r'{([\w|\.|\#]+\[?\d?\]?)}')
        temp_list = expression.findall(template)

        # if nothing is found, then just return parse through an expression
        if not temp_list:
            #return template

            # put in the ability to add expressions
            from pyasm.biz import ExpressionParser
            xp = ExpressionParser()
            env_sobjects = {
                'snapshot': snapshot,
                'file': file
            }
            result = xp.eval(template, sobject, mode='string', env_sobjects=env_sobjects)
            test = template
            test = test.replace("{", "")
            test = test.replace("}", "")
            if test != result:
                return result


        # version padding defaults
        version_padding = Config.get_value("checkin", "version_padding")
        if version_padding:
            version_padding = int(version_padding)
        else:
            version_padding = 3
        version_expr = "%%0.%dd" % version_padding



        # use simplified expressions
        result = template
        for part in temp_list:
             
            index = -1
            if part.find(".") != -1:
                # explict declarasions
                object, attr = part.split(".")
                
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))
                if object == "sobject":
                    if attr == "timestamp":
                        value = my._get_timestamp(sobject)
                    else:
                        value = sobject.get_value(attr)
                elif object == "snapshot":
                    if not snapshot:
                        continue
                    if attr == "timestamp":
                        value = my._get_timestamp(snapshot)
                    else:
                        value = snapshot.get_value(attr)
                    if attr in ['version', 'revision']:
                        if value:
                            value = version_expr % int(value)
                        else:
                            value = "0"*version_padding
                elif object == "search_type":
                    search_type_obj = sobject.get_search_type_obj()
                    value = search_type_obj.get_value(attr)
                elif object == "parent":
                    parent = sobject.get_parent()
                    if not parent:
                        value = "NO_PARENT"
                    else:
                        if attr == 'timestamp':
                            value = my._get_timestamp(parent)
                        else:
                            value = parent.get_value(attr)
                elif object == "project":
                    project = Project.get()
                    value = project.get_value(attr)
                elif object in ["login","user"]:
                    login = Environment.get_login()
                    value = login.get_value(attr)
                elif object == "file":
                    if attr == 'file_type':
                        if file_type:
                            value = file_type
                        else:
                            value = 'main'
                    else:
                        value = file.get_value(attr)

                else:
                    raise NamingException("Can't parse part [%s] in template" % part)

            else:
                # use implicit declarations
                attr = part
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))
                
                if attr in ['context','snapshot_type','version','revision'] \
                    and not snapshot:
                    continue
                if attr == "context":
                    value = snapshot.get_value(attr)
                elif attr == "snapshot_type":
                    value = snapshot.get_value(attr)
                elif attr == "version":
                    value = snapshot.get_value(attr)
                    if value:
                        value = version_expr % int(value)
                    else:
                        value = "0"*version_padding
                elif attr == "revision":
                    value = snapshot.get_value(attr)
                    if value:
                        value = version_expr % int(value)
                    else:
                        value = "0"*version_padding

                elif attr.startswith("#"):
                    if not snapshot:
                        continue
                    value = snapshot.get_value("version")
                    expr = "%%0.%sd" % len(attr)
                    if value:
                        value = expr % int(value)
                    else:
                        value = "0" * len(attr)

                elif attr.startswith("id"):
                    value = "%0.5d" % sobject.get_id()

                elif attr in ["login","user"]:
                    login = Environment.get_login()
                    value = login.get_value("login")

                elif attr == "file_type":
                    if file_type:
                        value = file_type
                    else:
                        value = 'main'
                else:
                    if attr == "timestamp":
                        value = my._get_timestamp(sobject)
                    else:
                        value = sobject.get_value(attr)

            if index != -1:
                value = re.split("[/]", value)
                if len(value) <= index:
                    value = '!'
                else:
                    try:
                        value = value[index]
                    except IndexError, e:
                        value = ""



            if not sobject.is_insert() and not value:
                value = ""
                #raise NamingException("Naming convention error: Value for part [%s] is empty" % part)

          
            if isinstance(value, int):
                value = str(value)
            result = result.replace("{%s}" % part, value)
Beispiel #3
0
    def naming_to_file(my, template, sobject, snapshot, file=None, ext=None, file_type=None):
        '''
        # chr001_model_v004_00001.ext
        '''


        version_padding = Config.get_value("checkin", "version_padding")
        if version_padding:
            version_padding = int(version_padding)
        else:
            version_padding = 3
        version_expr = "%%0.%dd" % version_padding


        # the main sobject
        project = sobject.get_project()

        # parse the pattern string
        expression = re.compile(r'{([\w|\.|\#]+\[?\d?\]?)}')
        temp_list = expression.findall(template)

        # if nothing is found, then just return parse through an expression
        if not temp_list:
            #return template
            # put in the ability to add expressions
            from pyasm.biz import ExpressionParser
            xp = ExpressionParser()
            env_sobjects = {
                'snapshot': snapshot,
                'file': file
            }
            file_name = file.get_value("file_name")
            base_type = file.get_value("base_type")
            if base_type =='directory':
                base = file_name
                ext = None
            else:
                base, ext = os.path.splitext(file_name)
            if not ext:
                value = None
            else:
                # external ext starts with a .
                ext = ext.lstrip(".")
                value = ext
            vars = {'EXT': value, 'BASEFILE': base}
            
            result = xp.eval(template, sobject, mode='string', env_sobjects=env_sobjects, vars=vars)
            test = template
            test = test.replace("{", "")
            test = test.replace("}", "")
            # don't allow / in filename
            test = test.replace("/", "_")
            if test != result:
                return result

        result = template
        for part in temp_list:
            index = -1
            if part.find(".") != -1:
                # explict declarations
                object, attr = part.split(".")
                
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))

                if object == "sobject":
                    value = sobject.get_value(attr)
                elif object == "snapshot":
                    if not snapshot:
                        continue
                    value = snapshot.get_value(attr)
                    if attr in ['version', 'revision']:
                        if value:
                            value = version_expr % int(value)
                        else:
                            value = "0"*version_padding
                    #value = snapshot.get_value(attr)
                elif object == "file":
                    if attr == 'file_type':
                        if file_type:
                            value = file_type
                        else:
                            value = 'main'
                    else:
                        value = file.get_value(attr)

                elif object == "parent":
                    parent = sobject.get_parent()
                    if not parent:
                        value = "NO_PARENT"
                    else:
                        value = parent.get_value(attr)
                elif object in ["login","user"]:
                    login = Environment.get_login()
                    value = login.get_value(attr)
                elif object == "project":
                    project = Project.get()
                    value = project.get_value(attr)
                else:
                    raise NamingException("Can't parse part [%s] in template" % part)

            else:
                # use implicit declarations
                attr = part

                
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))    

                if attr == "context":
                    value = snapshot.get_value(attr)
                elif attr == "snapshot_type":
                    value = snapshot.get_value(attr)
                elif attr == "version":
                    value = snapshot.get_value(attr)
                    if value:
                        value = version_expr % int(value)
                    else:
                        value = "0"*version_padding
                elif attr == "revision":
                    value = snapshot.get_value(attr)
                    if value:
                        value = version_expr % int(value)
                    else:
                        value = "0"*version_padding

                elif attr.startswith("#"):
                    if not snapshot:
                        continue
                    value = snapshot.get_value("version")

                    expr = "%%0.%sd" % len(attr)
                    if value:
                        value = expr % int(value)
                    else:
                        value = "0" * len(attr)

                elif attr == "basefile":
                    file_name = file.get_value("file_name")
                    base_type = file.get_value("base_type")
                    if base_type =='directory':
                        value = file_name
                    else:
                        base, ext = os.path.splitext(file_name)
                        value = base
                elif attr == "ext":
                    if not ext:
                        file_name = file.get_value("file_name")
                        base_type = file.get_value("base_type")
                        if base_type =='directory':
                            value = ''
                        else:
                            base, ext = os.path.splitext(file_name)
                            value = ext.lstrip(".")
                    else:
                        # external ext starts with a .
                        ext = ext.lstrip(".")
                        value = ext
                elif attr in ["login","user"]:
                    login = Environment.get_login()
                    value = login.get_value("login")

                elif attr == "file_type":
                    if file_type:
                        value = file_type
                    else:
                        value = 'main'

                elif attr.startswith('date'):
                    # {date,%Y-%m-%d_%H-%M-%S]}
                    import time
                    parts = attr.split(",", 1)
                    if len(parts) == 2:
                        format = parts[1]
                    else:
                        format = "%Y%m%d"
                    value = time.strftime(format, time.localtime())


                else:
                    value = sobject.get_value(attr)

            # tbis applies to context for now
            if index != -1:
                value = re.split("[/]", value)
                if len(value) <= index:
                    value = '!'
                else:
                    value = value[index]


            #if not value:
            #    raise NamingException("Value for part [%s] is empty" % part)
            if isinstance(value, int):
                value = str(value)
            
            result = result.replace("{%s}" % part, value)

        # don't allow / in filename, 
        # FIXME: it's not put in get_filesystem_name since it
        # is used for directory name also, need to modify that
        result = result.replace("/", "_")
        # post process result so that it looks good
        result = Common.get_filesystem_name(result)

        return result
Beispiel #4
0
    def eval_template(template, sobject=None, parent=None, snapshot=None):
        ''' generic method to values an sobject template expression. '''
        #NOTE: no file kwarg
        # parse the pattern string
        #expression = re.compile(r'{([\w|\.|\#]+\[?\d?\]?)}')
        expression = re.compile(r'{(.*?)}')
        temp_list = expression.findall(template)

        # if nothing is found, then just return parse through an expression
        xp = ExpressionParser()
        if not temp_list:
            #return template
            # put in the ability to add expressions
            env_sobjects = {
                'snapshot': snapshot
            }
            result = xp.eval(template, sobject, mode='string', env_sobjects=env_sobjects)
          
            test = template
            test = test.replace("{", "")
            test = test.replace("}", "")
            if test != result:
                return result

             

        # if nothing is found, temp_list is empty
        if not temp_list:
            temp_list = []

        # the main sobject
        if sobject:
            project = sobject.get_project()
        else:
            project = Project.get()


        result = template
        for part in temp_list:
            index = -1

            if part.startswith(("@","$")):
                env_sobjects = {
                    'snapshot': snapshot,
                }
                value = xp.eval("{%s}" % part, sobject, env_sobjects=env_sobjects, vars=vars, single=True)
            
            elif part.find(".") != -1:
                # explict declarasions
                object, attr = part.split(".")

                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))
                    


                if object == "sobject":
                    value = sobject.get_value(attr)

                elif object == "parent":
                    if not parent:
                        parent = sobject.get_parent()
                    if parent:
                        value = parent.get_value(attr)
                    else:
                        value = ''

                elif object in ["login", "user"]:
                    login = Environment.get_security().get_login()
                    value = login.get_value(attr)

                else:
                    raise NamingException("Can't parse part [%s] in template" % part)

                if index != -1:
                    value = re.split("[/._]", value)
                    value = value[index]

            else:
                value = part

            result = result.replace("{%s}" % part, str(value))

        return result
Beispiel #5
0
    def naming_to_dir(my, template, sobject, snapshot, file=None, file_type=None):
        '''
        # shot/SEQ001/shot_001
        '''

        # the main sobject
        project = sobject.get_project()

        # parse the pattern string
        expression = re.compile(r'{(.*?)}')
        temp_list = expression.findall(template)


        from pyasm.biz import ExpressionParser
        xp = ExpressionParser()
        ''' 
        # if nothing is found, then just return parse through an expression
        if not temp_list:
            #return template

            # put in the ability to add expressions
            env_sobjects = {
                'snapshot': snapshot,
                'file': file
            }
            result = xp.eval(template, sobject, mode='string', env_sobjects=env_sobjects)
            test = template
            test = test.replace("{", "")
            test = test.replace("}", "")
            if test != result:
                return result
        '''

        # version padding defaults
        version_padding = Config.get_value("checkin", "version_padding")
        if version_padding:
            version_padding = int(version_padding)
        else:
            version_padding = 3
        version_expr = "%%0.%dd" % version_padding



        # use simplified expressions
        result = template

        for part in temp_list:
             
            index = -1

            if part.startswith(("@","$")):
                env_sobjects = {
                    'snapshot': snapshot,
                    'file': file
                }
                value = xp.eval("{%s}" % part, sobject, env_sobjects=env_sobjects, single=True)
            
            elif part.find(".") != -1:
                # explict declarasions
                object, attr = part.split(".")
                
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))
                if object == "sobject":
                    if attr == "timestamp":
                        value = my._get_timestamp(sobject)
                    else:
                        value = sobject.get_value(attr)
                elif object == "snapshot":
                    if not snapshot:
                        continue
                    if attr == "timestamp":
                        value = my._get_timestamp(snapshot)
                    else:
                        value = snapshot.get_value(attr)
                    if attr in ['version', 'revision']:
                        if value:
                            value = version_expr % int(value)
                        else:
                            value = "0"*version_padding
                elif object == "search_type":
                    search_type_obj = sobject.get_search_type_obj()
                    value = search_type_obj.get_value(attr)
                elif object == "parent":
                    parent = sobject.get_parent()
                    if not parent:
                        value = "NO_PARENT"
                    else:
                        if attr == 'timestamp':
                            value = my._get_timestamp(parent)
                        else:
                            value = parent.get_value(attr)
                elif object == "project":
                    project = Project.get()
                    value = project.get_value(attr)
                elif object in ["login","user"]:
                    login = Environment.get_login()
                    value = login.get_value(attr)
                elif object == "file":
                    if attr == 'file_type':
                        if file_type:
                            value = file_type
                        else:
                            value = 'main'
                    else:
                        value = file.get_value(attr)

                else:
                    raise NamingException("Can't parse part [%s] in template" % part)

            else:
                # use implicit declarations
                attr = part
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))
                
                if attr in ['context','process','snapshot_type','version','revision'] \
                    and not snapshot:
                    continue
                if attr in ["context","process","snapshot_type"]:
                    value = snapshot.get_value(attr)
                elif attr == "version":
                    value = snapshot.get_value(attr)
                    if value:
                        value = version_expr % int(value)
                    else:
                        value = "0"*version_padding
                elif attr == "revision":
                    value = snapshot.get_value(attr)
                    if value:
                        value = version_expr % int(value)
                    else:
                        value = "0"*version_padding

                elif attr.startswith("#"):
                    if not snapshot:
                        continue
                    value = snapshot.get_value("version")
                    expr = "%%0.%sd" % len(attr)
                    if value:
                        value = expr % int(value)
                    else:
                        value = "0" * len(attr)

                elif attr.startswith("id"):
                    value = "%0.5d" % sobject.get_id()

                elif attr in ["login","user"]:
                    login = Environment.get_login()
                    value = login.get_value("login")

                elif attr == "file_type":
                    if file_type:
                        value = file_type
                    else:
                        value = 'main'
                else:
                    if attr == "timestamp":
                        value = my._get_timestamp(sobject)
                    else:
                        value = sobject.get_value(attr)

            if index != -1:
                value = re.split("[/]", value)
                if len(value) <= index:
                    value = '!'
                else:
                    try:
                        value = value[index]
                    except IndexError, e:
                        value = ""



            if not sobject.is_insert() and not value:
                value = ""
                #raise NamingException("Naming convention error: Value for part [%s] is empty" % part)

          
            if isinstance(value, int):
                value = str(value)
            result = result.replace("{%s}" % part, value)
Beispiel #6
0
    def naming_to_file(my, template, sobject, snapshot, file=None, ext=None, file_type=None):
        '''
        # chr001_model_v004_00001.ext
        '''


        version_padding = Config.get_value("checkin", "version_padding")
        if version_padding:
            version_padding = int(version_padding)
        else:
            version_padding = 3
        version_expr = "%%0.%dd" % version_padding


        # the main sobject
        project = sobject.get_project()

        # parse the pattern string
        expression = re.compile(r'{(.*?)}')
        #expression = re.compile(r'{([\w|\.|\#]+\[?\d?\]?)}')
        temp_list = expression.findall(template)

        result = template
        from pyasm.biz import ExpressionParser
        xp = ExpressionParser()
        # if nothing is found, then just return parse through an expression
        '''
        if not temp_list:
            #return template
            # put in the ability to add expressions
            env_sobjects = {
                'snapshot': snapshot,
                'file': file
            }

            
            file_name = file.get_value("file_name")
            base_type = file.get_value("base_type")
            if base_type =='directory':
                base = file_name
                ext = None
            else:
                base, ext = os.path.splitext(file_name)
            if not ext:
                value = None
            else:
                # external ext starts with a .
                ext = ext.lstrip(".")
                value = ext
            vars = {'EXT': value, 'BASEFILE': base}
            
            result = xp.eval(template, sobject, mode='string', env_sobjects=env_sobjects, vars=vars)
            test = template
            test = test.replace("{", "")
            test = test.replace("}", "")
            # don't allow / in filename
            test = test.replace("/", "_")
            if test != result:
               return result
        '''
       
        base = None

        if file:
            file_name = file.get_value("file_name")
            base_type = file.get_value("base_type")
            if base_type =='directory':
                base = file_name
                ext = None
            else:
                base, file_ext = os.path.splitext(file_name)
                # passed in ext takes prescedence
                if not ext:
                    ext = file_ext

        if not ext:
            value = None
        else:
            # external ext starts with a .
            ext = ext.lstrip(".")
            value = ext

        vars = {'EXT': value, 'BASEFILE': base}


        for part in temp_list:
            index = -1
            if part.startswith(("@","$")):
                env_sobjects = {
                    'snapshot': snapshot,
                    'file': file
                }
                value = xp.eval("{%s}" % part, sobject, env_sobjects=env_sobjects, vars=vars, single=True)
            elif part.find(".") != -1:
                # explict declarations
                object, attr = part.split(".")
                
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))

                if object == "sobject":
                    value = sobject.get_value(attr)
                elif object == "snapshot":
                    if not snapshot:
                        continue
                    value = snapshot.get_value(attr)
                    if attr in ['version', 'revision']:
                        if value:
                            value = version_expr % int(value)
                        else:
                            value = "0"*version_padding
                    #value = snapshot.get_value(attr)
                elif object == "file":
                    if attr == 'file_type':
                        if file_type:
                            value = file_type
                        else:
                            value = 'main'
                    else:
                        value = file.get_value(attr)

                elif object == "parent":
                    parent = sobject.get_parent()
                    if not parent:
                        value = "NO_PARENT"
                    else:
                        value = parent.get_value(attr)
                elif object in ["login","user"]:
                    login = Environment.get_login()
                    value = login.get_value(attr)
                elif object == "project":
                    project = Project.get()
                    value = project.get_value(attr)
                else:
                    raise NamingException("Can't parse part [%s] in template" % part)

            else:
                # use implicit declarations
                attr = part

                
                if attr.endswith(']'):
                    # ugly, but it works
                    attr, index = attr.split("[")
                    index = int(index.rstrip("]"))    

                if attr in ["context","process","snapshot_type"]:
                    value = snapshot.get_value(attr)
                elif attr == "version":
                    value = snapshot.get_value(attr)
                    if value:
                        value = version_expr % int(value)
                    else:
                        value = "0"*version_padding
                elif attr == "revision":
                    value = snapshot.get_value(attr)
                    if value:
                        value = version_expr % int(value)
                    else:
                        value = "0"*version_padding

                elif attr.startswith("#"):
                    if not snapshot:
                        continue
                    value = snapshot.get_value("version")

                    expr = "%%0.%sd" % len(attr)
                    if value:
                        value = expr % int(value)
                    else:
                        value = "0" * len(attr)

                elif attr == "basefile":
                    file_name = file.get_value("file_name")
                    base_type = file.get_value("base_type")
                    if base_type =='directory':
                        value = file_name
                    else:
                        base, ext = os.path.splitext(file_name)
                        value = base
                elif attr == "ext":
                    if not ext:
                        file_name = file.get_value("file_name")
                        base_type = file.get_value("base_type")
                        if base_type =='directory':
                            value = ''
                        else:
                            base, ext = os.path.splitext(file_name)
                            value = ext.lstrip(".")
                    else:
                        # external ext starts with a .
                        ext = ext.lstrip(".")
                        value = ext
                elif attr in ["login","user"]:
                    login = Environment.get_login()
                    value = login.get_value("login")

                elif attr == "file_type":
                    if file_type:
                        value = file_type
                    else:
                        value = 'main'

                elif attr.startswith('date'):
                    # {date,%Y-%m-%d_%H-%M-%S]}
                    import time
                    parts = attr.split(",", 1)
                    if len(parts) == 2:
                        format = parts[1]
                    else:
                        format = "%Y%m%d"
                    value = time.strftime(format, time.localtime())


                else:
                    value = sobject.get_value(attr)

            # tbis applies to context for now
            if index != -1:
                value = re.split("[/]", value)
                if len(value) <= index:
                    value = '!'
                else:
                    value = value[index]


            #if not value:
            #    raise NamingException("Value for part [%s] is empty" % part)
            if isinstance(value, int):
                value = str(value)
            elif value is None:
                value = ""
            
            result = result.replace("{%s}" % part, value)

        # don't allow / in filename, 
        # FIXME: it's not put in get_filesystem_name since it
        # is used for directory name also, need to modify that
        result = result.replace("/", "_")

        # remove trailing . if any
        if result and result[-1] == '.':
            result = result[:-1]
        # post process result so that it looks good
        result = Common.get_filesystem_name(result)

        return result