def update(self, id): """Update an orthography and return it. :URL: ``PUT /orthographies/id`` :Request body: JSON object representing the orthography with updated attribute values. :param str id: the ``id`` value of the orthography to be updated. :returns: the updated orthography model. .. note:: Contributors can only update orthographies that are not used in the active application settings. """ orthography = Session.query(Orthography).get(int(id)) user = session['user'] if orthography: app_set = h.get_application_settings() if user.role == u'administrator' or orthography not in ( app_set.storage_orthography, app_set.input_orthography, app_set.output_orthography): try: schema = OrthographySchema() values = json.loads(unicode(request.body, request.charset)) state = h.get_state_object(values) state.id = id result = schema.to_python(values, state) orthography = update_orthography(orthography, result) # orthography will be False if there are no changes (cf. update_orthography). if orthography: Session.add(orthography) Session.commit() return orthography else: response.status_int = 400 return { 'error': u'The update request failed because the submitted data were not new.' } except h.JSONDecodeError: response.status_int = 400 return h.JSONDecodeErrorResponse except Invalid, e: response.status_int = 400 return {'errors': e.unpack_errors()} else: response.status = 403 return { 'error': u'Only administrators are permitted to update orthographies that are used in the active application settings.' }
def update(self, id): """Update an orthography and return it. :URL: ``PUT /orthographies/id`` :Request body: JSON object representing the orthography with updated attribute values. :param str id: the ``id`` value of the orthography to be updated. :returns: the updated orthography model. .. note:: Contributors can only update orthographies that are not used in the active application settings. """ orthography = Session.query(Orthography).get(int(id)) user = session['user'] if orthography: app_set = h.get_application_settings() if user.role == u'administrator' or orthography not in ( app_set.storage_orthography, app_set.input_orthography, app_set.output_orthography): try: schema = OrthographySchema() values = json.loads(unicode(request.body, request.charset)) state = h.get_state_object(values) state.id = id result = schema.to_python(values, state) orthography = update_orthography(orthography, result) # orthography will be False if there are no changes (cf. update_orthography). if orthography: Session.add(orthography) Session.commit() return orthography else: response.status_int = 400 return {'error': u'The update request failed because the submitted data were not new.'} except h.JSONDecodeError: response.status_int = 400 return h.JSONDecodeErrorResponse except Invalid, e: response.status_int = 400 return {'errors': e.unpack_errors()} else: response.status = 403 return {'error': u'Only administrators are permitted to update orthographies that are used in the active application settings.'}
def create(self): """Create a new orthography resource and return it. :URL: ``POST /orthographies`` :request body: JSON object representing the orthography to create. :returns: the newly created orthography. """ try: schema = OrthographySchema() values = json.loads(unicode(request.body, request.charset)) data = schema.to_python(values) orthography = create_new_orthography(data) Session.add(orthography) Session.commit() return orthography except h.JSONDecodeError: response.status_int = 400 return h.JSONDecodeErrorResponse except Invalid, e: response.status_int = 400 return {'errors': e.unpack_errors()}