def save(data, project=None): """ Create or update a project with a given slug. """ data = validate(data, project) operation = 'create' if project is None else 'update' if project is None: project = Project() project.slug = data.get('slug') project.author = data.get('author') from grano.logic import permissions as permissions_logic permissions_logic.save({ 'account': data.get('author'), 'project': project, 'admin': True }) project.settings = data.get('settings') project.label = data.get('label') project.private = data.get('private') project.updated_at = datetime.utcnow() db.session.add(project) # TODO: make this nicer - separate files? from grano.logic.schemata import import_schema with app.open_resource('fixtures/base.yaml') as fh: import_schema(project, fh) db.session.flush() _project_changed(project.slug, operation) return project
def create(slug): project = object_or_404(Project.by_slug(slug)) authz.require(authz.project_manage(project)) data = request_data({'project': project}) permission = permissions.save(data) db.session.commit() return jsonify(permission, status=201)
def update(slug, id): project = object_or_404(Project.by_slug(slug)) authz.require(authz.project_manage(project)) permission = object_or_404(Permission.by_project_and_id(project, id)) data = request_data({'project': project}) permission = permissions.save(data, permission=permission) db.session.commit() return jsonify(permission)