def _report_proxy_auth_error(key, **kwargs): """ Generate standard log message for warning: API access without :param **kwargs: arbitrary keyword parameters """ message = 'Attempt to access with invalid proxy/api key: ' + key logger().warning(struct_log(action=message, **kwargs))
def _report_object_exists(typename, **kwargs): """ Generate standard log message + request error for warning: Trying to POST an object that already exists :param typename: name of type involved :param **kwargs: arbitrary keyword parameters :return: Connexion Error() type to return """ report = typename + ' already exists' logger().warning(struct_log(action=report, **kwargs)) return dict(message=report, code=405)
def _report_conversion_error(typename, exception, **kwargs): """ Generate standard log message + request error for warning: Trying to POST an object that already exists :param typename: name of type involved :param exception: exception thrown by ORM :param **kwargs: arbitrary keyword parameters :return: Connexion Error() type to return """ report = 'Could not convert ' + typename + ' to ORM model' message = typename + ': failed validation - could not convert to internal representation' logger().error( struct_log(action=report, exception=str(exception), **kwargs)) return dict(message=message, code=400)
def _report_update_failed(typename, exception, **kwargs): """ Generate standard log message + request error for error: Internal error performing update (PUT) :param typename: name of type involved :param exception: exception thrown by ORM :param **kwargs: arbitrary keyword parameters :return: Connexion Error() type to return """ report = typename + ' updated failed' message = 'Internal error updating ' + typename + 's' logger().error( struct_log(action=report, exception=str(exception), **kwargs)) return dict(message=message, code=500)
def _report_write_error(typename, exception, **kwargs): """ Generate standard log message + request error for error: Error writing to DB :param typename: name of type involved :param exception: exception thrown by ORM :param **kwargs: arbitrary keyword parameters :return: Connexion Error() type to return """ report = 'Internal error writing ' + typename + ' to DB' message = typename + ': internal error saving ORM object to DB' logger().error( struct_log(action=report, exception=str(exception), **kwargs)) err = dict(message=message, code=500) return err
def post_change_log(body): """ Create a new change log following the changeLog schema in datasets.yaml :return: body, 200 on success """ db_session = get_session() change_version = body.get('version') body['created'] = datetime.datetime.utcnow() try: orm_changelog = ChangeLog(**body) except TypeError as e: err = _report_conversion_error('changelog', e, **body) return err, 400 try: db_session.add(orm_changelog) db_session.commit() except exc.IntegrityError: db_session.rollback() err = _report_object_exists('changelog: ' + body['version'], **body) return err, 405 except ORMException as e: err = _report_write_error('changelog', e, **body) return err, 500 logger().info( struct_log(action='post_change_log', status='created', change_version=change_version, **body)) return body, 201