def get(self): template = dao.get_template_by_id(self.request.get(u'template_id')) if not dao.test_template_permissions( template, [dao.TEMPLATE_OWN, dao.TEMPLATE_EDIT]): webapp2.abort(401) variable_list = list() for variable_entity in dao.get_variables(template): variable = dict() variable[u'id'] = variable_entity.key.id() variable[u'name'] = variable_entity.name variable[u'description'] = variable_entity.description variable[u'is_repeating'] = variable_entity.is_repeating variable[u'input_field'] = variable_entity.input_field variable[u'assignments'] = self.get_assignments(template, variable) variable[u'documents'] = self.get_documents(template, variable) variable_list.append(variable) # Create template and template values, render the page jinja_template = ui.get_template(self, u'template/variable/index.html') jinja_template_values = dao.get_standard_template_values(template) jinja_template_values[u'variables'] = variable_list self.response.out.write(jinja_template.render(jinja_template_values))
def post(self): template = dao.get_template_by_id(self.request.get(u'template_id')) if not dao.test_template_permissions( template, [dao.TEMPLATE_OWN, dao.TEMPLATE_EDIT]): webapp2.abort(401) error_msg = None # Handle contribute request if self.request.get(u'contribute'): try: name = self.request.get(u'name').strip() if not name: raise Exception( u'You must provide a name for the public template') if dao.get_public_template_by_name(name): raise Exception(u'Sorry, that name is taken') new_template = dao.Project( name=name, project_type=dao.PUBLIC_TEMPLATE, status=dao.STATUS_PENDING, description=self.request.get(u'description')) new_template.put() for assignment_entity in dao.get_assignments(template): assignment_entity.clone(new_template).put() for document_entity in dao.get_documents(template): template_document_entity = document_entity.clone( new_template) template_document_entity.put() for document_item_entity in dao.get_document_items( document_entity): document_item_entity.clone( template_document_entity).put() for interview_entity in dao.get_interviews(template): cloned_interview_entity = interview_entity.clone( new_template) cloned_interview_entity.put() for style_entity in dao.get_styles(template): style_entity.clone(new_template).put() for variable_entity in dao.get_variables(template): variable_entity.clone(new_template).put() self.redirect("/template?template_id={}".format( template.key.id())) return except Exception as e: error_msg = u'Contributing project failed: {}'.format(e) # Display the webpage self.render(template, error_msg)
def generate_variable_values(self, project, inner_template_values): indexed_variable_max_indices = dict() for variable in dao.get_variables(project): indexed_variable_match_object = indexed_name_pattern.match( variable.name) if indexed_variable_match_object: variable_name = indexed_variable_match_object.group(1) variable_index = indexed_variable_match_object.group(2) old_max_index = indexed_variable_max_indices[ variable_name] if variable_name in indexed_variable_max_indices else None if not old_max_index or int(variable_index) > old_max_index: indexed_variable_max_indices[variable_name] = int( variable_index) else: content = variable.content if variable.content else u'' inner_template_values[variable.internal_name] = content for variable_name in iter(indexed_variable_max_indices): count_name = u'{}_count'.format(variable_name) # Because of how "range" works, count needs to be max index + 1 count = int(indexed_variable_max_indices[variable_name]) + 1 inner_template_values[count_name] = count
def generate_variable_values(self, project, index, inner_template_values): indexed_variable_max_indices = dict() for variable in dao.get_variables(project): indexed_variable_match_object = indexed_name_pattern.match( variable.name) if indexed_variable_match_object: variable_name = indexed_variable_match_object.group(1) variable_index = indexed_variable_match_object.group(2) if index and int(variable_index) == int(index): self.generate_variable_value(inner_template_values, variable) old_max_index = indexed_variable_max_indices[ variable_name] if variable_name in indexed_variable_max_indices else None if not old_max_index or int(variable_index) > old_max_index: indexed_variable_max_indices[variable_name] = int( variable_index) else: self.generate_variable_value(inner_template_values, variable) for variable_name in iter(indexed_variable_max_indices): count_name = u'{}_count'.format(variable_name) count = int(indexed_variable_max_indices[variable_name]) + 1 inner_template_values[count_name] = count
def post(self): if not dao.test_current_user_registered(): webapp2.abort(401) current_user = users.get_current_user() current_email = current_user.email().lower() # Attempt to create a new project try: name = self.request.get(u'name').strip() if not name: raise Exception(u'You must provide a name for your project') for project in dao.get_projects_by_name(name): if dao.test_email_is_project_owner(project, current_email): raise Exception( u'Sorry, you already own a project by that name') # Create the new Project entity project = dao.Project(name=name, project_type=dao.PROJECT, description=self.request.get(u'description')) project_key = project.put() # Create a ProjectUser entity, making the current user owner of the new project dao.ProjectUser(email=dao.get_current_site_user().email, permissions=[dao.PROJECT_OWN], parent=project_key).put() # Get the selected template ID template_id = self.request.get(u'template_id') if template_id: # Generate HTML for the template template_entity = dao.get_template_by_id(template_id) html_generator_service = HtmlGeneratorService(template_entity) html_generator_service.generate_all_html() # Copy entities owned by the template entity into the project for assignment_entity in dao.get_assignments(template_entity): assignment_entity.clone(project).put() for document_entity in dao.get_documents(template_entity): template_document_entity = document_entity.clone(project) template_document_entity.put() for document_item_entity in dao.get_document_items( document_entity): document_item_entity.clone( template_document_entity).put() for interview_entity in dao.get_interviews(template_entity): cloned_interview_entity = interview_entity.clone(project) if cloned_interview_entity.auto_assign: cloned_interview_entity.assigned_email = current_email cloned_interview_entity.put() for style_entity in dao.get_styles(template_entity): style_entity.clone(project).put() for variable_entity in dao.get_variables(template_entity): variable_entity.clone(project).put() self.redirect("/project?project_id={}".format(project_key.id())) return except Exception as e: error_msg = u'Creating project failed: {}'.format(e) # Display the webpage self.render(error_msg)