def update(call: APICall): """ update :summary: Update project information. See `project.create` for parameters. :return: updated - `int` - number of projects updated fields - `[string]` - updated fields """ project_id = call.data["project"] with translate_errors_context(): project = Project.get_for_writing(company=call.identity.company, id=project_id) if not project: raise errors.bad_request.InvalidProjectId(id=project_id) fields = parse_from_call(call.data, create_fields, Project.get_fields(), discard_none_values=False) conform_tag_fields(call, fields, validate=True) fields["last_update"] = datetime.utcnow() with TimingContext("mongo", "projects_update"): updated = project.update(upsert=False, **fields) conform_output_tags(call, fields) call.result.data_model = UpdateResponse(updated=updated, fields=fields)
def prepare_update_fields(call: APICall, task, call_data): valid_fields = deepcopy(task.__class__.user_set_allowed()) update_fields = {k: v for k, v in create_fields.items() if k in valid_fields} update_fields["output__error"] = None t_fields = task_fields t_fields.add("output__error") fields = parse_from_call(call_data, update_fields, t_fields) return prepare_for_save(call, fields), valid_fields
def prepare_update_fields(task, call_data): valid_fields = deepcopy(task.__class__.user_set_allowed()) update_fields = { k: v for k, v in create_fields.items() if k in valid_fields } update_fields["output__error"] = None t_fields = task_fields t_fields.add("output__error") fields = parse_from_call(call_data, update_fields, t_fields) tags = fields.get("tags") if tags: fields["tags"] = list(set(tags)) return fields, valid_fields
def update_user(user_id, company_id, data: dict) -> Tuple[int, dict]: """ Update user. :param user_id: user ID to update :param company_id: ID of company user belongs to :param data: mapping to update user by :return: (updated fields count, updated fields) pair """ update_fields = { k: v for k, v in create_fields.items() if k in User.user_set_allowed() } partial_update_dict = parse_from_call(data, update_fields, User.get_fields()) with translate_errors_context("updating user"): return User.safe_update(company_id, user_id, partial_update_dict)
def prepare_create_fields(call: APICall, valid_fields=None, output=None, previous_task: Task = None): valid_fields = valid_fields if valid_fields is not None else create_fields t_fields = task_fields t_fields.add("output_dest") fields = parse_from_call(call.data, valid_fields, t_fields) # Move output_dest to output.destination output_dest = fields.get("output_dest") if output_dest is not None: fields.pop("output_dest") if output: output.destination = output_dest else: output = Output(destination=output_dest) fields["output"] = output try: dpath.delete(fields, "script/requirements") except dpath.exceptions.PathNotFound: pass # Make sure there are no duplicate tags tags = fields.get("tags") if tags: fields["tags"] = list(set(tags)) # Strip all script fields (remove leading and trailing whitespace chars) to avoid unusable names and paths for field in task_script_fields: try: path = "script/%s" % field value = dpath.get(fields, path) if isinstance(value, six.string_types): value = value.strip() dpath.set(fields, path, value) except KeyError: pass parameters = safe_get(fields, "execution/parameters") if parameters is not None: parameters = {k.strip(): v for k, v in parameters.items()} dpath.set(fields, "execution/parameters", parameters) return fields
def create(call): assert isinstance(call, APICall) identity = call.identity with translate_errors_context(): fields = parse_from_call(call.data, create_fields, Project.get_fields()) conform_tag_fields(call, fields, validate=True) now = datetime.utcnow() project = Project(id=database.utils.id(), user=identity.user, company=identity.company, created=now, last_update=now, **fields) with TimingContext("mongo", "projects_save"): project.save() call.result.data = {"id": project.id}
def prepare_create_fields( call: APICall, valid_fields=None, output=None, previous_task: Task = None ): valid_fields = valid_fields if valid_fields is not None else create_fields t_fields = task_fields t_fields.add("output_dest") fields = parse_from_call(call.data, valid_fields, t_fields) # Move output_dest to output.destination output_dest = fields.get("output_dest") if output_dest is not None: fields.pop("output_dest") if output: output.destination = output_dest else: output = Output(destination=output_dest) fields["output"] = output return prepare_for_save(call, fields)
def parse_model_fields(call, valid_fields): fields = parse_from_call(call.data, valid_fields, Model.get_fields()) conform_tag_fields(call, fields, validate=True) return fields
def parse_model_fields(call, valid_fields): fields = parse_from_call(call.data, valid_fields, Model.get_fields()) tags = fields.get("tags") if tags: fields["tags"] = list(set(tags)) return fields