Example #1
0
    def test_version_number_attribute_is_set_to_a_lower_then_it_should_be(self):
        """testing if the version_number attribute will be set to a correct
        unique value when it is set to a lower number then it should be
        """
        self.test_version.version_number = -1
        self.assertEqual(self.test_version.version_number, 1)

        self.test_version.version_number = -10
        self.assertEqual(self.test_version.version_number, 1)

        DBSession.add(self.test_version)
        DBSession.commit()

        self.test_version.version_number = -100
        # it should be 1 again
        self.assertEqual(self.test_version.version_number, 1)

        new_version = Version(**self.kwargs)
        self.assertEqual(new_version.version_number, 2)

        new_version.version_number = 1
        self.assertEqual(new_version.version_number, 2)

        new_version.version_number = 100
        self.assertEqual(new_version.version_number, 100)
Example #2
0
    def loads(self, data):
        """Decodes Stalker data

        :param data:
        :return:
        """
        from stalker.db.session import DBSession
        from stalker import Asset, Task, Shot, Sequence, Version, Type

        if isinstance(data, str):
            data = json.loads(data)

        # get the entity_type
        entity_type = data['entity_type']

        # set default entity class to Task
        entity_class = Task
        if entity_type == 'Asset':
            entity_class = Asset
        elif entity_type == 'Shot':
            entity_class = Shot
            # this is a bug
            data['sequences'] = []
        elif entity_type == 'Sequence':
            entity_class = Sequence

        version_data = data['versions']
        data['versions'] = []
        # get the type
        if 'type' in data:
            type_data = data['type']
            if type_data:
                type_name = type_data['name']
                type_ = Type.query.filter(Type.name == type_name).first()
                if not type_:
                    # create a Type
                    type_ = Type(**type_data)
                data['type'] = type_

        data['project'] = self.project
        entity = entity_class(**data)
        DBSession.add(entity)
        DBSession.commit()

        # create Versions
        if version_data:
            for v_data in version_data:
                # get Version info
                v_data['task'] = entity
                v = Version(**v_data)
                # update version_number
                v.version_number = v_data['version_number']
                v.is_published = v_data['is_published']

        # for each child task call a new StalkerEntityDecoder
        for t in data['tasks']:
            child_task = self.loads(t)
            entity.tasks.append(child_task)

        return entity
Example #3
0
    def loads(self, data, parent=None):
        """Decodes Stalker data

        :param data:
        :return:
        """
        from stalker.db.session import DBSession
        from stalker import Asset, Task, Shot, Sequence, Version, Type

        if isinstance(data, str):
            data = json.loads(data)

        # get the entity_type
        entity_type = data['entity_type']

        # set default entity class to Task
        entity_class = Task
        if entity_type == 'Asset':
            entity_class = Asset
        elif entity_type == 'Shot':
            entity_class = Shot
            # this is a bug
            data['sequences'] = []
        elif entity_type == 'Sequence':
            entity_class = Sequence

        # get the type
        if 'type' in data:
            type_data = data['type']
            if type_data and not isinstance(type_data, Type):
                type_name = type_data['name']
                type_ = Type.query.filter(Type.name == type_name).first()
                if not type_:
                    # create a Type
                    type_ = Type(**type_data)
                data['type'] = type_

        # store version data
        version_data = sorted(data['versions'], key=lambda x: x["version_number"])
        data['versions'] = []

        data['project'] = self.project

        # check if the data exists before creating it
        entity = entity_class.query\
            .filter(entity_class.project==self.project)\
            .filter(entity_class.parent==parent)\
            .filter(entity_class.name==data['name'])\
            .first()

        if not entity:
            # then create it
            entity = entity_class(**data)
            DBSession.add(entity)
            DBSession.commit()

        # create Versions
        if version_data:
            for v_data in version_data:

                # check version number and take name
                # if there is a version with the same version_number
                # don't create it
                take_name = v_data['take_name']
                version_number = v_data['version_number']

                v = Version.query\
                    .filter(Version.task==entity)\
                    .filter(Version.take_name==take_name)\
                    .filter(Version.version_number==version_number)\
                    .first()

                if not v:
                    # then create it
                    # get Version info
                    v_data['task'] = entity
                    v = Version(**v_data)
                    # update version_number
                    v.version_number = v_data['version_number']
                    v.is_published = v_data['is_published']

            DBSession.commit()

        # for each child task call a new StalkerEntityDecoder
        for t in data['tasks']:
            self.loads(t, parent=entity)

        if parent:
            entity.parent = parent

        return entity