def assign_reference(request): """assigns the link to the given entity as a new reference """ link_ids = get_multi_integer(request, 'link_ids[]') removed_link_ids = get_multi_integer(request, 'removed_link_ids[]') entity_id = request.params.get('entity_id', -1) entity = Entity.query.filter_by(id=entity_id).first() links = Link.query.filter(Link.id.in_(link_ids)).all() removed_links = Link.query.filter(Link.id.in_(removed_link_ids)).all() # Tags tags = get_tags(request) logged_in_user = get_logged_in_user(request) logger.debug('link_ids : %s' % link_ids) logger.debug('links : %s' % links) logger.debug('entity_id : %s' % entity_id) logger.debug('entity : %s' % entity) logger.debug('tags : %s' % tags) logger.debug('removed_links : %s' % removed_links) # remove all the removed links for removed_link in removed_links: # no need to search for any linked tasks here DBSession.delete(removed_link) if entity and links: entity.references.extend(links) # assign all the tags to the links for link in links: link.tags.extend(tags) # generate thumbnail thumbnail = generate_thumbnail(link) link.thumbnail = thumbnail thumbnail.created_by = logged_in_user DBSession.add(thumbnail) DBSession.add(entity) DBSession.add_all(links) # return new links as json data # in response text return [ { 'id': link.id, 'full_path': link.full_path, 'original_filename': link.original_filename, 'thumbnail': link.thumbnail.full_path if link.thumbnail else link.full_path, 'tags': [tag.name for tag in link.tags] } for link in links ]
def update_structure(request): """updates a structure """ logged_in_user = get_logged_in_user(request) # get params structure_id = request.params.get('structure_id') structure = Structure.query.filter_by(id=structure_id).first() name = request.params.get('name') custom_template = request.params.get('custom_template') # get all FilenameTemplates ft_ids = get_multi_integer(request, 'filename_templates') fts = FilenameTemplate.query.filter(FilenameTemplate.id.in_(ft_ids)).all() if name: # update structure structure.name = name structure.custom_template = custom_template structure.templates = fts structure.updated_by = logged_in_user structure.date_updated = datetime.datetime.now() DBSession.add(structure) return HTTPOk()
def assign_thumbnail(request): """assigns the thumbnail to the given entity """ link_ids = get_multi_integer(request, 'link_ids[]') entity_id = request.params.get('entity_id', -1) link = Link.query.filter(Link.id.in_(link_ids)).first() entity = Entity.query.filter_by(id=entity_id).first() logger.debug('link_ids : %s' % link_ids) logger.debug('link : %s' % link) logger.debug('entity_id : %s' % entity_id) logger.debug('entity : %s' % entity) logged_in_user = get_logged_in_user(request) if entity and link: entity.thumbnail = link # resize the thumbnail file_full_path = convert_file_link_to_full_path(link.full_path) img = Image.open(file_full_path) if img.format != 'GIF': img.thumbnail((1024, 1024)) img.thumbnail((512, 512), Image.ANTIALIAS) img.save(file_full_path) DBSession.add(entity) DBSession.add(link) return HTTPOk()
def create_structure(request): """creates a structure """ logged_in_user = get_logged_in_user(request) # get parameters name = request.params.get('name') custom_template = request.params.get('custom_template') ft_ids = get_multi_integer(request, 'filename_templates') fts = FilenameTemplate.query.filter(FilenameTemplate.id.in_(ft_ids)).all() if name and custom_template: # create a new structure new_structure = Structure( name=name, custom_template=custom_template, templates=fts, created_by=logged_in_user, ) DBSession.add(new_structure) return HTTPOk()
def append_entities_to_entity(request): """Appends entities to entity for example appends Projects to user.projects etc. """ logger.debug('append_class_to_entity is running') entity_id = request.matchdict.get('id', -1) entity = Entity.query.filter_by(id=entity_id).first() selected_list = get_multi_integer(request, 'selected_items[]') logger.debug('selected_list: %s' % selected_list) if entity and selected_list: appended_entities = Entity.query\ .filter(Entity.id.in_(selected_list)).all() if appended_entities: attr_name = appended_entities[0].plural_class_name.lower() eval( 'entity.%(attr_name)s.extend(appended_entities)' % {'attr_name': attr_name} ) DBSession.add(entity) logger.debug('entity is updated successfully') request.session.flash( 'success:User <strong>%s</strong> is updated successfully' % entity.name ) logger.debug('***append_entities_to_entity method ends ***') else: logger.debug('not all parameters are in request.params') HTTPServerError() return HTTPOk()
def assign_version(request): """assigns the version to the given entity """ logged_in_user = get_logged_in_user(request) # TODO: this should be renamed to create version # collect data link_ids = get_multi_integer(request, 'link_ids') task_id = request.params.get('task_id', -1) link = Link.query.filter(Link.id.in_(link_ids)).first() task = Task.query.filter_by(id=task_id).first() logger.debug('link_ids : %s' % link_ids) logger.debug('link : %s' % link) logger.debug('task_id : %s' % task_id) logger.debug('task : %s' % task) if task and link: # delete the link and create a version instead full_path = convert_file_link_to_full_path(link.full_path) take_name = request.params.get('take_name', defaults.version_take_name) publish = bool(request.params.get('publish')) logger.debug('publish : %s' % publish) path_and_filename, extension = os.path.splitext(full_path) version = Version(task=task, take_name=take_name, created_by=logged_in_user) version.is_published = publish # generate path values version.update_paths() version.extension = extension # specify that this version is created with Stalker Pyramid version.created_with = 'StalkerPyramid' # TODO: that should also be a # config value # now move the link file to the version.absolute_full_path try: os.makedirs( os.path.dirname(version.absolute_full_path) ) except OSError: # dir exists pass logger.debug('full_path : %s' % full_path) logger.debug('version.absolute_full_path : %s' % version.absolute_full_path) shutil.copyfile(full_path, version.absolute_full_path) os.remove(full_path) # it is now safe to delete the link DBSession.add(task) DBSession.delete(link) DBSession.add(version) return HTTPOk()
def create_ticket(request): """runs when creating a ticket """ logged_in_user = get_logged_in_user(request) #************************************************************************** # collect data description = request.params.get('description') summary = request.params.get('summary') project_id = request.params.get('project_id', None) project = Project.query.filter(Project.id == project_id).first() owner_id = request.params.get('owner_id', None) owner = User.query.filter(User.id == owner_id).first() priority = request.params.get('priority', "TRIVIAL") type_name = request.params.get('type') send_email = request.params.get('send_email', 1) # for testing purposes logger.debug('*******************************') logger.debug('create_ticket is running') logger.debug('project_id : %s' % project_id) logger.debug('owner_id : %s' % owner_id) logger.debug('owner: %s' % owner) if not summary: return Response('Please supply a summary', 500) if not description: return Response('Please supply a description', 500) if not type_name: return Response('Please supply a type for this ticket', 500) type_ = Type.query.filter_by(name=type_name).first() if not project: return Response('There is no project with id: %s' % project_id, 500) if owner_id: if not owner: # there is an owner id but no resource found return Response('There is no user with id: %s' % owner_id, 500) else: return Response('Please supply an owner for this ticket', 500) link_ids = get_multi_integer(request, 'link_ids') links = Task.query.filter(Task.id.in_(link_ids)).all() # we are ready to create the time log # Ticket should handle the extension of the effort utc_now = local_to_utc(datetime.datetime.now()) ticket = Ticket( project=project, summary=summary, description=description, priority=priority, type=type_, created_by=logged_in_user, date_created=utc_now, date_updated=utc_now ) ticket.links = links ticket.set_owner(owner) # email the ticket to the owner and to the created by if send_email: # send email to responsible and resources of the task mailer = get_mailer(request) recipients = [logged_in_user.email, owner.email] # append link resources for link in links: for resource in link.resources: recipients.append(resource.email) # make recipients unique recipients = list(set(recipients)) description_text = \ 'A New Ticket for project "%s" has been created by %s with the ' \ 'following description:\n\n%s' % ( project.name, logged_in_user.name, description ) # TODO: add project link, after the server can be reached outside description_html = \ 'A <strong>New Ticket</strong> for project <strong>%s</strong> ' \ 'has been created by <strong>%s</strong> and assigned to ' \ '<strong>%s</strong> with the following description:<br><br>%s' % ( project.name, logged_in_user.name, owner.name, description.replace('\n', '<br>') ) message = Message( subject='New Ticket: %s' % summary, sender=dummy_email_address, recipients=recipients, body=description_text, html=description_html ) mailer.send(message) DBSession.add(ticket) return Response('Ticket Created successfully')
def create_user(request): """called when adding a User """ logger.debug('***create user method starts ***') logged_in_user = get_logged_in_user(request) # get params came_from = request.params.get('came_from', '/') name = request.params.get('name', None) login = request.params.get('login', None) email = request.params.get('email', None) password = request.params.get('password', None) logger.debug('came_from : %s' % came_from) logger.debug('new user name : %s' % name) logger.debug('new user login : %s' % login) logger.debug('new user email : %s' % email) logger.debug('new user password : %s' % password) # create and add a new user if name and login and email and password: department_id = request.params.get('department_id', None) departments = [] if department_id: department = Department.query.filter_by(id=department_id).first() departments = [department] else: # Departments if 'department_ids' in request.params: dep_ids = get_multi_integer(request, 'department_ids') departments = Department.query.filter( Department.id.in_(dep_ids)).all() # Groups groups = [] if 'group_ids' in request.params: grp_ids = get_multi_integer(request, 'group_ids') groups = Group.query.filter( Group.id.in_(grp_ids)).all() # Tags tags = get_tags(request) logger.debug('new user departments : %s' % departments) logger.debug('new user groups : %s' % groups) logger.debug('new user tags : %s' % tags) try: new_user = User( name=request.params['name'], login=request.params['login'], email=request.params['email'], password=request.params['password'], created_by=logged_in_user, departments=departments, groups=groups, tags=tags ) DBSession.add(new_user) logger.debug('added new user successfully') request.session.flash( 'success:User <strong>%s</strong> is created successfully' % name ) logger.debug('***create user method ends ***') response = Response('User created successfully') response.status_int = 200 return response except BaseException as e: # request.session.flash('error:' + e.message) # HTTPFound(location=came_from) transaction.abort() return Response('BaseException: %s'%e.message, 500) else: logger.debug('not all parameters are in request.params') log_param(request, 'name') log_param(request, 'login') log_param(request, 'email') log_param(request, 'password') response = Response('There are missing parameters: ') response.status_int = 500 return response response = Response('User created successfully') response.status_int = 200 return response