Esempio n. 1
0
def transition_old_state(request):
    old_id = request.matchdict['old_id']
    try:
        old = m.get_old(old_id)
    except NoResultFound:
        request.response.status = 404
        return {'error': 'No OLD with supplied ID'}
    payload, error = get_json_payload(request)
    if error:
        return error
    try:
        new_state, error = validate_old_state(payload.get('state'))
        if error:
            return {'error': error}
        if new_state == old.state:
            updated_old = old
        else:
            new_state, error = validate_state_transition(old.state, new_state)
            if error:
                return {'error': error}
            updated_old = m.update_old(old, state=new_state)
    except m.DTValueError as e:
        request.response.status = 400
        return {'error': str(e)}
    except Exception:
        request.response.status = 500
        return {'error': 'Internal server error'}
    request.response.status = 200
    return m.serialize_old(updated_old)
Esempio n. 2
0
def read_old(request):
    old_id = request.matchdict['old_id']
    try:
        old = m.get_old(old_id)
    except NoResultFound:
        request.response.status = 404
        return {'error': 'No OLD with supplied ID'}
    return m.serialize_old(old)
Esempio n. 3
0
def create_old(request):
    payload, error = get_json_payload(request)
    if error:
        return error
    slug = payload.get('slug')
    if not slug:
        return {'error': 'slug is required'}
    try:
        old = m.create_old(slug,
                           name=str_or_none(payload.get('name')),
                           leader=str_or_none(payload.get('leader')),
                           username=str_or_none(payload.get('username')),
                           password=str_or_none(payload.get('password')),
                           is_auto_syncing=boolean(
                               payload.get('is_auto_syncing', False)))
    except m.DTValueError as e:
        request.response.status = 400
        return {'error': str(e)}
    except Exception:
        request.response.status = 500
        return {'error': 'Internal server error'}
    request.response.status = 201
    return m.serialize_old(old)
Esempio n. 4
0
def update_old(request):
    old_id = request.matchdict['old_id']
    try:
        old = m.get_old(old_id)
    except NoResultFound:
        request.response.status = 404
        return {'error': 'No OLD with supplied ID'}
    payload, error = get_json_payload(request)
    if error:
        return error
    # Cannot update slug (for now, too complicated)
    try:
        payload = {
            'name':
            str_or_none(payload.get('name', old.name)),
            'leader':
            str_or_none(payload.get('leader', old.leader)),
            'username':
            str_or_none(payload.get('username', old.username)),
            'password':
            str_or_none(payload.get('password', old.password)),
            'is_auto_syncing':
            boolean(payload.get('is_auto_syncing', old.is_auto_syncing))
        }
        if payload == {attr: getattr(old, attr) for attr in payload}:
            updated_old = old
        else:
            updated_old = m.update_old(old, **payload)
    except m.DTValueError as e:
        request.response.status = 400
        return {'error': str(e)}
    except Exception:
        request.response.status = 500
        return {'error': 'Internal server error'}
    request.response.status = 200
    return m.serialize_old(updated_old)
Esempio n. 5
0
def read_olds(request):
    return [m.serialize_old(old) for old in m.get_olds()]