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