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)
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)
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)
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)
def read_olds(request): return [m.serialize_old(old) for old in m.get_olds()]