Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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}