def create_statuses_and_status_lists(): """Creates the statuses needed for Project, Task, Asset, Shot and Sequence entities """ # Also create basic Status and status lists for # Project, Asset, Shot, Sequence # Project project_status_list = StatusList.query\ .filter_by(target_entity_type='Project').first() if not project_status_list: project_status_list = StatusList(name='Project Statuses', target_entity_type='Project') new = Status.query.filter_by(code='NEW').first() wip = Status.query.filter_by(code='WIP').first() cmpl = Status.query.filter_by(code='CMPL').first() # now use them in status lists project_status_list.statuses = [new, wip, cmpl] # Warning! Not using scoped_session here, it is the plain old session DBSession.add_all([ project_status_list, ]) DBSession.commit()
def create_entity_statuses(entity_type="", status_names=None, status_codes=None, user=None): """creates the default task statuses """ if not entity_type: raise ValueError("Please supply entity_type") if not status_names: raise ValueError("Please supply status names") if not status_codes: raise ValueError("Please supply status codes") # create statuses for entity from stalker import Status, StatusList logger.debug("Creating %s Statuses" % entity_type) statuses = Status.query.filter(Status.name.in_(status_names)).all() status_names_in_db = map(lambda x: x.name, statuses) for name, code in zip(status_names, status_codes): if name not in status_names_in_db: logger.debug("Creating Status: %s (%s)" % (name, code)) new_status = Status(name=name, code=code, created_by=user, updated_by=user) statuses.append(new_status) DBSession.add(new_status) # create the Status List status_list = StatusList.query.filter(StatusList.target_entity_type == entity_type).first() if status_list is None: logger.debug("No %s Status List found, creating new!" % entity_type) status_list = StatusList( name="%s Statuses" % entity_type, target_entity_type=entity_type, created_by=user, updated_by=user ) else: logger.debug("%s Status List already created, updating statuses" % entity_type) status_list.statuses = statuses DBSession.add(status_list) try: DBSession.commit() except IntegrityError as e: logger.debug("error in DBSession.commit, rolling back: %s" % e) DBSession.rollback() else: logger.debug("Created %s Statuses successfully" % entity_type) DBSession.flush()
def create_entity_statuses(entity_type='', status_names=None, status_codes=None, user=None): """creates the default task statuses """ if not entity_type: raise ValueError('Please supply entity_type') if not status_names: raise ValueError('Please supply status names') if not status_codes: raise ValueError('Please supply status codes') # create statuses for entity from stalker import Status, StatusList logger.debug("Creating %s Statuses" % entity_type) statuses = Status.query.filter(Status.name.in_(status_names)).all() logger.debug('status_names: %s' % status_names) logger.debug('statuses: %s' % statuses) status_names_in_db = list(map(lambda x: x.name, statuses)) logger.debug('statuses_names_in_db: %s' % status_names_in_db) for name, code in zip(status_names, status_codes): if name not in status_names_in_db: logger.debug('Creating Status: %s (%s)' % (name, code)) new_status = Status( name=name, code=code, created_by=user, updated_by=user ) statuses.append(new_status) DBSession.add(new_status) else: logger.debug( 'Status %s (%s) is already created skipping!' % (name, code) ) # create the Status List status_list = StatusList.query\ .filter(StatusList.target_entity_type == entity_type)\ .first() if status_list is None: logger.debug('No %s Status List found, creating new!' % entity_type) status_list = StatusList( name='%s Statuses' % entity_type, target_entity_type=entity_type, created_by=user, updated_by=user ) else: logger.debug("%s Status List already created, updating statuses" % entity_type) status_list.statuses = statuses DBSession.add(status_list) try: DBSession.commit() except IntegrityError as e: logger.debug("error in DBSession.commit, rolling back: %s" % e) DBSession.rollback() else: logger.debug("Created %s Statuses successfully" % entity_type) DBSession.flush()