def edit(node_type_id): node_type = NodeType.find(node_type_id) form = NodeTypeForm(obj=node_type) if form.validate_on_submit(): node_type.name = form.name.data node_type.description = form.description.data node_type.url = form.url.data # Processing custom fields for field in form.properties: print field.data["id"] else: print form.errors return render_template("node_types/edit.html", node_type=node_type, form=form)
def edit(node_type_id): node_type = NodeType.find(node_type_id) form = NodeTypeForm(obj=node_type) if form.validate_on_submit(): node_type.name = form.name.data node_type.description = form.description.data node_type.url = form.url.data # Processing custom fields for field in form.properties: print field.data['id'] else: print form.errors return render_template('node_types/edit.html', node_type=node_type, form=form)
def add(node_type_id): """Generic function to add a node of any type """ api = SystemUtility.attract_api() ntype = NodeType.find(node_type_id, api=api) form = get_node_form(ntype) user_id = current_user.objectid if form.validate_on_submit(): if process_node_form(form, node_type=ntype, user=user_id): return redirect(url_for('nodes.index', node_type_name=ntype['name'])) else: print form.errors return render_template('nodes/add.html', node_type=ntype, form=form, errors=form.errors, type_names=type_names())
def delete(node_id): """Generic node deletion """ api = SystemUtility.attract_api() node = Node.find(node_id, api=api) name = node.name node_type = NodeType.find(node.node_type, api=api) try: node.delete(api=api) forbidden = False except ForbiddenAccess: forbidden = True if not forbidden: # print (node_type['name']) return redirect(url_for('nodes.index', node_type_name=node_type['name'])) else: return redirect(url_for('nodes.edit', node_id=node._id))
def add(node_type_id): """Generic function to add a node of any type """ api = SystemUtility.attract_api() ntype = NodeType.find(node_type_id, api=api) form = get_node_form(ntype) user_id = current_user.objectid if form.validate_on_submit(): if process_node_form(form, node_type=ntype, user=user_id): return redirect( url_for('nodes.index', node_type_name=ntype['name'])) else: print form.errors return render_template('nodes/add.html', node_type=ntype, form=form, errors=form.errors, type_names=type_names())
def delete(node_id): """Generic node deletion """ api = system_util.pillar_api() node = Node.find(node_id, api=api) name = node.name node_type = NodeType.find(node.node_type, api=api) try: node.delete(api=api) forbidden = False except ForbiddenAccess: forbidden = True if not forbidden: # print (node_type['name']) return redirect( url_for('nodes.index', node_type_name=node_type['name'])) else: return redirect(url_for('nodes.edit', node_id=node._id))
def edit(node_id): """Generic node editing form """ def set_properties( dyn_schema, form_schema, node_properties, form, prefix="", set_data=True): """Initialize custom properties for the form. We run this function once before validating the function with set_data=False, so that we can set any multiselect field that was originally specified empty and fill it with the current choices. """ for prop in dyn_schema: if not prop in node_properties: continue schema_prop = dyn_schema[prop] form_prop = form_schema[prop] prop_name = "{0}{1}".format(prefix, prop) if schema_prop['type'] == 'dict': set_properties( schema_prop['schema'], form_prop['schema'], node_properties[prop_name], form, "{0}__".format(prop_name)) else: try: data = node_properties[prop] except KeyError: print ("{0} not found in form".format(prop_name)) if schema_prop['type'] == 'datetime': data = datetime.strptime(data, RFC1123_DATE_FORMAT) if prop_name in form: # Other field types if isinstance(form[prop_name], SelectMultipleField): # If we are dealing with a multiselect field, check if # it's empty (usually because we can't query the whole # database to pick all the choices). If it's empty we # populate the choices with the actual data. if not form[prop_name].choices: form[prop_name].choices = [(d,d) for d in data] # Choices should be a tuple with value and name # Assign data to the field if set_data: form[prop_name].data = data api = SystemUtility.attract_api() node = Node.find(node_id, api=api) # TODO: simply embed node_type node_type = NodeType.find(node.node_type, api=api) form = get_node_form(node_type) user_id = current_user.objectid dyn_schema = node_type['dyn_schema'].to_dict() form_schema = node_type['form_schema'].to_dict() error = "" node_type_name = node_type.name node_properties = node.properties.to_dict() set_properties(dyn_schema, form_schema, node_properties, form, set_data=False) if form.validate_on_submit(): if process_node_form( form, node_id=node_id, node_type=node_type, user=user_id): project_update_nodes_list(node_id) return redirect(url_for('nodes.view', node_id=node_id, embed=1)) else: error = "Server error" print ("Error sending data") else: print form.errors # Populate Form form.name.data = node.name form.description.data = node.description if 'picture' in form: form.picture.data = node.picture if node.parent: form.parent.data = node.parent set_properties(dyn_schema, form_schema, node_properties, form) # Get Parent try: parent = Node.find(node['parent'], api=api) except KeyError: parent = None except ResourceNotFound: parent = None embed_string = '' # Check if we want to embed the content via an AJAX call if request.args.get('embed'): if request.args.get('embed') == '1': # Define the prefix for the embedded template embed_string = '_embed' template = '{0}/edit{1}.html'.format(node_type['name'], embed_string) # We should more simply check if the template file actually exsists on # the filesystem level try: return render_template( template, node=node, parent=parent, form=form, errors=form.errors, error=error) except TemplateNotFound: template = 'nodes/edit{1}.html'.format(node_type['name'], embed_string) return render_template( template, node=node, parent=parent, form=form, errors=form.errors, error=error)
def edit(node_id): """Generic node editing form """ def set_properties(dyn_schema, form_schema, node_properties, form, prefix="", set_data=True): """Initialize custom properties for the form. We run this function once before validating the function with set_data=False, so that we can set any multiselect field that was originally specified empty and fill it with the current choices. """ for prop in dyn_schema: if not prop in node_properties: continue schema_prop = dyn_schema[prop] form_prop = form_schema[prop] prop_name = "{0}{1}".format(prefix, prop) if schema_prop['type'] == 'dict': set_properties(schema_prop['schema'], form_prop['schema'], node_properties[prop_name], form, "{0}__".format(prop_name)) else: try: data = node_properties[prop] except KeyError: print("{0} not found in form".format(prop_name)) if schema_prop['type'] == 'datetime': data = datetime.strptime(data, RFC1123_DATE_FORMAT) if prop_name in form: # Other field types if isinstance(form[prop_name], SelectMultipleField): # If we are dealing with a multiselect field, check if # it's empty (usually because we can't query the whole # database to pick all the choices). If it's empty we # populate the choices with the actual data. if not form[prop_name].choices: form[prop_name].choices = [(d, d) for d in data] # Choices should be a tuple with value and name # Assign data to the field if set_data: form[prop_name].data = data api = SystemUtility.attract_api() node = Node.find(node_id, api=api) # TODO: simply embed node_type node_type = NodeType.find(node.node_type, api=api) form = get_node_form(node_type) user_id = current_user.objectid dyn_schema = node_type['dyn_schema'].to_dict() form_schema = node_type['form_schema'].to_dict() error = "" node_type_name = node_type.name node_properties = node.properties.to_dict() set_properties(dyn_schema, form_schema, node_properties, form, set_data=False) if form.validate_on_submit(): if process_node_form(form, node_id=node_id, node_type=node_type, user=user_id): project_update_nodes_list(node_id) return redirect(url_for('nodes.view', node_id=node_id, embed=1)) else: error = "Server error" print("Error sending data") else: print form.errors # Populate Form form.name.data = node.name form.description.data = node.description if 'picture' in form: form.picture.data = node.picture if node.parent: form.parent.data = node.parent set_properties(dyn_schema, form_schema, node_properties, form) # Get Parent try: parent = Node.find(node['parent'], api=api) except KeyError: parent = None except ResourceNotFound: parent = None embed_string = '' # Check if we want to embed the content via an AJAX call if request.args.get('embed'): if request.args.get('embed') == '1': # Define the prefix for the embedded template embed_string = '_embed' template = '{0}/edit{1}.html'.format(node_type['name'], embed_string) # We should more simply check if the template file actually exsists on # the filesystem level try: return render_template(template, node=node, parent=parent, form=form, errors=form.errors, error=error) except TemplateNotFound: template = 'nodes/edit{1}.html'.format(node_type['name'], embed_string) return render_template(template, node=node, parent=parent, form=form, errors=form.errors, error=error)