예제 #1
0
def insert_subject(db_conn, data):
  """
  Create a new version of a new a subject, saving to ES.
  """

  schema = subject_schema
  query = """
    INSERT INTO subjects_entity_id (entity_id)
    VALUES (%(entity_id)s);
    INSERT INTO subjects
    (  entity_id  ,   name  ,   user_id  ,
       body  ,   members  )
    VALUES
    (%(entity_id)s, %(name)s, %(user_id)s,
     %(body)s, %(members)s)
    RETURNING *;
  """
  data = {
    'entity_id': uuid.uuid4(),
    'name': data['name'],
    'user_id': convert_slug_to_uuid(data['user_id']),
    'body': data['body'],
    'members': data.get('members', []),
  }
  errors = is_valid_members(db_conn, data) + ensure_no_cycles(db_conn, data)
  if errors:
    return None, errors
  data, errors = insert_row(db_conn, schema, query, data)
  if not errors:
    save_entity_to_es('subject', deliver_subject(data, access='view'))
  return data, errors
예제 #2
0
def insert_subject_version(db_conn, current_data, next_data):
  """
  Create a new version of an existing subject.
  """

  schema = subject_schema
  query = """
    INSERT INTO subjects
    (  entity_id  ,   previous_id  ,   name  ,   user_id  ,
       body  ,   members  )
    VALUES
    (%(entity_id)s, %(previous_id)s, %(name)s, %(user_id)s,
     %(body)s, %(members)s)
    RETURNING *;
  """
  data = {
    'entity_id': current_data['entity_id'],
    'previous_id': current_data['version_id'],
    'user_id': convert_slug_to_uuid(next_data['user_id']),
    'name': next_data.get('name') or current_data.get('name'),
    'body': next_data.get('body') or current_data.get('body'),
    'members': (next_data.get('members') or
                current_data.get('members') or
                []),
  }
  errors = is_valid_members(db_conn, data) + ensure_no_cycles(db_conn, data)
  if errors:
    return None, errors
  data, errors = insert_row(db_conn, schema, query, data)
  if not errors:
    save_entity_to_es('subject', deliver_subject(data, access='view'))
  return data, errors
def test_save_entity_to_es():
  kind = 'unit'
  data = {
    'status': 'accepted',
    'entity_id': uuid.uuid4(),
  }
  assert save_entity_to_es(kind, data)
예제 #4
0
def update_subject(db_conn, version_id, status):
  """
  Update a subject version's status and available. [hidden]
  """

  query = """
    UPDATE subjects
    SET status = %(status)s
    WHERE version_id = %(version_id)s
    RETURNING *;
  """
  data = {
    'version_id': convert_slug_to_uuid(version_id),
    'status': status,
  }
  data, errors = save_row(db_conn, query, data)
  if not errors:
    save_entity_to_es('subject', deliver_subject(data, access='view'))
  return data, errors
예제 #5
0
def insert_unit_version(db_conn, current_data, next_data):
    """
  Create a new version of a existing unit, saving to ES.
  """

    schema = unit_schema
    query = """
    INSERT INTO units
    (  entity_id  ,   previous_id  ,   name  ,   user_id  ,
       body  ,   require_ids  )
    VALUES
    (%(entity_id)s, %(previous_id)s, %(name)s, %(user_id)s,
     %(body)s, %(require_ids)s)
    RETURNING *;
  """
    data = {
        'entity_id':
        current_data['entity_id'],
        'previous_id':
        current_data['version_id'],
        'user_id':
        convert_slug_to_uuid(next_data['user_id']),
        'name':
        next_data.get('name') or current_data.get('name'),
        'body':
        next_data.get('body') or current_data.get('body'),
        'require_ids': [
            convert_slug_to_uuid(require_id)
            for require_id in next_data.get('require_ids')
            or current_data.get('require_ids') or []
        ],
    }
    errors = ensure_requires(db_conn, data) + ensure_no_cycles(db_conn, data)
    if errors:
        return None, errors
    data, errors = insert_row(db_conn, schema, query, data)
    if not errors:
        save_entity_to_es('unit', deliver_unit(data, access='view'))
    return data, errors
예제 #6
0
def insert_unit(db_conn, data):
    """
  Create a new version of a new unit, saving to ES.
  """

    schema = unit_schema
    query = """
    INSERT INTO units_entity_id (entity_id)
    VALUES (%(entity_id)s);
    INSERT INTO units
    (  entity_id  ,   name  ,   user_id  ,
       body  ,   require_ids  )
    VALUES
    (%(entity_id)s  , %(name)s, %(user_id)s,
     %(body)s, %(require_ids)s)
    RETURNING *;
  """
    data = {
        'entity_id':
        uuid.uuid4(),
        'name':
        data['name'],
        'user_id':
        convert_slug_to_uuid(data['user_id']),
        'body':
        data['body'],
        'require_ids': [
            convert_slug_to_uuid(require_id)
            for require_id in data.get('require_ids', [])
        ],
    }
    errors = ensure_requires(db_conn, data) + ensure_no_cycles(db_conn, data)
    if errors:
        return None, errors
    data, errors = insert_row(db_conn, schema, query, data)
    if not errors:
        save_entity_to_es('unit', deliver_unit(data, access='view'))
    return data, errors