def put(self, name, kvp): """ Create a new entry or update an existing one. """ LOG.info('PUT /keys/ with key name=%s and data=%s', name, kvp) # TODO: There is a race, add custom add_or_update which updates by non # id field existing_kvp = self.__get_by_name(name=name) kvp.name = name try: kvp_db = KeyValuePairAPI.to_model(kvp) if existing_kvp: kvp_db.id = existing_kvp.id kvp_db = KeyValuePair.add_or_update(kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s', kvp) abort(http_client.BAD_REQUEST, str(e)) return LOG.audit('KeyValuePair updated. KeyValuePair=%s', kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('PUT /keys/ client_result=%s', kvp_api) return kvp_api
def post(self, kvp): """ Create a new key value pair. Handles requests: POST /keys/ """ LOG.info('POST /keys/ with key value data=%s', kvp) try: kvp_db = KeyValuePairAPI.to_model(kvp) LOG.debug('/keys/ POST verified KeyValuePairAPI and ' 'formulated KeyValuePairDB=%s', kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s.', kvp) abort(http_client.BAD_REQUEST, str(e)) return kvp_db = KeyValuePair.add_or_update(kvp_db) LOG.audit('KeyValuePair created. KeyValuePair=%s', kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('POST /keys/ client_result=%s', kvp_api) return kvp_api
def put(self, id, kvp): LOG.info('PUT /keys/ with key id=%s and data=%s', id, kvp) kvp_db = self.__get_by_id(id) LOG.debug('PUT /keys/ lookup with id=%s found object: %s', id, kvp_db) try: if kvp.id and kvp.id != id: LOG.warning('Discarding mismatched id=%s found in payload ' 'and using uri_id=%s.', kvp.id, id) old_kvp_db = kvp_db kvp_db = KeyValuePairAPI.to_model(kvp) kvp_db.id = id kvp_db = KeyValuePair.add_or_update(kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s', kvp) abort(http_client.BAD_REQUEST, str(e)) return LOG.audit('KeyValuePair updated. KeyValuePair=%s and original KeyValuePair=%s', kvp_db, old_kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('PUT /keys/ client_result=%s', kvp_api) return kvp_api
def put(self, name, kvp): """ Create a new entry or update an existing one. """ # TODO: There is a race, add custom add_or_update which updates by non # id field existing_kvp = self.__get_by_name(name=name) kvp.name = name try: kvp_db = KeyValuePairAPI.to_model(kvp) if existing_kvp: kvp_db.id = existing_kvp.id kvp_db = KeyValuePair.add_or_update(kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s', kvp) abort(http_client.BAD_REQUEST, str(e)) return extra = {'kvp_db': kvp_db} LOG.audit('KeyValuePair updated. KeyValuePair.id=%s' % (kvp_db.id), extra=extra) kvp_api = KeyValuePairAPI.from_model(kvp_db) return kvp_api
def put(self, id, kvp): LOG.info('PUT /keys/ with key id=%s and data=%s', id, kvp) kvp_db = self.__get_by_id(id) LOG.debug('PUT /keys/ lookup with id=%s found object: %s', id, kvp_db) try: if kvp.id and kvp.id != id: LOG.warning( 'Discarding mismatched id=%s found in payload ' 'and using uri_id=%s.', kvp.id, id) old_kvp_db = kvp_db kvp_db = KeyValuePairAPI.to_model(kvp) kvp_db.id = id kvp_db = KeyValuePair.add_or_update(kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s', kvp) abort(http_client.BAD_REQUEST, str(e)) return LOG.audit( 'KeyValuePair updated. KeyValuePair=%s and original KeyValuePair=%s', kvp_db, old_kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('PUT /keys/ client_result=%s', kvp_api) return kvp_api
def post(self, kvp): """ Create a new key value pair. Handles requests: POST /keys/ """ LOG.info('POST /keys/ with key value data=%s', kvp) try: kvp_db = KeyValuePairAPI.to_model(kvp) LOG.debug( '/keys/ POST verified KeyValuePairAPI and ' 'formulated KeyValuePairDB=%s', kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s.', kvp) abort(http_client.BAD_REQUEST, str(e)) return kvp_db = KeyValuePair.add_or_update(kvp_db) LOG.audit('KeyValuePair created. KeyValuePair=%s', kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('POST /keys/ client_result=%s', kvp_api) return kvp_api
def get_one(self, name): """ List key by name. Handle: GET /keys/key1 """ LOG.info('GET /keys/ with name=%s', name) kvp_db = self.__get_by_name(name=name) if not kvp_db: LOG.exception('Database lookup for name="%s" ' 'resulted in exception.', name) abort(http_client.NOT_FOUND) return try: kvp_api = KeyValuePairAPI.from_model(kvp_db) except (ValidationError, ValueError) as e: abort(http_client.INTERNAL_SERVER_ERROR, str(e)) return LOG.debug('GET /keys/ with name=%s, client_result=%s', name, kvp_api) return kvp_api
def get_all(self, **kw): """ List all keys. Handles requests: GET /keys/ """ LOG.info('GET all /keys/ with filters=%s', kw) kvp_dbs = KeyValuePair.get_all(**kw) kvps = [KeyValuePairAPI.from_model(kvp_db) for kvp_db in kvp_dbs] LOG.debug('GET all /keys/ client_result=%s', kvps) return kvps
def get_one(self, id): """ List key by id. Handle: GET /keys/1 """ LOG.info('GET /keys/ with id=%s', id) kvp_db = self.__get_by_id(id) try: kvp_api = KeyValuePairAPI.from_model(kvp_db) except (ValidationError, ValueError) as e: abort(http_client.INTERNAL_SERVER_ERROR, str(e)) return LOG.debug('GET /keys/ with id=%s, client_result=%s', id, kvp_api) return kvp_api
def get_all(self, **kw): """ List all keys. Handles requests: GET /keys/ """ # Prefix filtering prefix_filter = kw.get('prefix', None) if prefix_filter: kw['name__startswith'] = prefix_filter del kw['prefix'] kvp_dbs = KeyValuePair.get_all(**kw) kvps = [KeyValuePairAPI.from_model(kvp_db) for kvp_db in kvp_dbs] return kvps
def get_all(self, **kw): """ List all keys. Handles requests: GET /keys/ """ LOG.info('GET all /keys/ with filters=%s', kw) # Prefix filtering prefix_filter = kw.get('prefix', None) if prefix_filter: kw['name__startswith'] = prefix_filter del kw['prefix'] kvp_dbs = KeyValuePair.get_all(**kw) kvps = [KeyValuePairAPI.from_model(kvp_db) for kvp_db in kvp_dbs] LOG.debug('GET all /keys/ client_result=%s', kvps) return kvps
def get_one(self, name): """ List key by name. Handle: GET /keys/key1 """ kvp_db = self.__get_by_name(name=name) if not kvp_db: LOG.exception('Database lookup for name="%s" resulted in exception.', name) abort(http_client.NOT_FOUND) return try: kvp_api = KeyValuePairAPI.from_model(kvp_db) except (ValidationError, ValueError) as e: abort(http_client.INTERNAL_SERVER_ERROR, str(e)) return return kvp_api