Skip to content

Commit

Permalink
update user metadata table name
Browse files Browse the repository at this point in the history
  • Loading branch information
npalaska committed Mar 17, 2021
1 parent f360de1 commit 9ea5268
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 27 deletions.
54 changes: 32 additions & 22 deletions lib/pbench/server/api/resources/metadata_api.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from flask_restful import Resource, abort
from flask import request, make_response, jsonify
from pbench.server.database.models.metadata import Metadata
from pbench.server.database.models.metadata import UserMetadata
from pbench.server.api.auth import Auth


Expand Down Expand Up @@ -46,25 +46,31 @@ def post(self):
self.logger.warning("Invalid json object: {}", request.url)
abort(400, message="Invalid json object in request")

current_user = self.auth.token_auth.current_user()
if current_user:
current_user_id = current_user.id
else:
current_user_id = None

value = post_data.get("value")
if value is None:
self.logger.warning("Value not provided during metadata creation.")
self.logger.warning(
"Value not provided during metadata creation. User_id: {}",
current_user_id,
)
abort(400, message="Value field missing")

metadata_key = post_data.get("key")
if metadata_key is None:
self.logger.warning("Key not provided during metadata creation.")
self.logger.warning(
"Key not provided during metadata creation. User_id: {}",
current_user_id,
)
abort(400, message="Key field missing")

current_user = self.auth.token_auth.current_user()
if current_user:
current_user_id = current_user.id
else:
current_user_id = None

try:
# Create a new metadata object
metadata_object = Metadata(
metadata_object = UserMetadata(
value=value, key=metadata_key.lower(), user_id=current_user_id
)
# insert the metadata object for a user
Expand Down Expand Up @@ -125,7 +131,9 @@ def get(self, key):
current_user_id = None
try:
# Query the metadata object with a given key
metadata_objects = Metadata.query(user_id=current_user_id, key=key.lower())
metadata_objects = UserMetadata.query(
user_id=current_user_id, key=key.lower()
)
data = [
metadata.get_json(include=["id", "created", "updated", "value"])
for metadata in metadata_objects
Expand Down Expand Up @@ -173,7 +181,7 @@ def verify_metadata(self, metadata):
return True

@Auth.token_auth.login_required(optional=True)
def get(self, id=None):
def get(self, id):
"""
Get request for querying a metadata object of a user given a metadata id.
This requires a Pbench auth token in the header field if the metadata object is private to a user
Expand Down Expand Up @@ -201,7 +209,7 @@ def get(self, id=None):

try:
# Fetch the metadata object
metadata_objects = Metadata.query(id=id)
metadata_objects = UserMetadata.query(id=id)
except Exception:
self.logger.exception(
"Exception occurred in the GET request while querying the Metadata model, id: {}",
Expand All @@ -226,7 +234,7 @@ def get(self, id=None):
return make_response(jsonify(response_object), 200)

@Auth.token_auth.login_required(optional=True)
def put(self, id=None):
def put(self, id):
"""
Put request for updating a metadata object of a user given a metadata id.
This requires a Pbench auth token in the header field
Expand Down Expand Up @@ -255,15 +263,15 @@ def put(self, id=None):
"""
if id is None:
self.logger.warning("Metadata id not provided during metadata query")
abort(400, message="Please provide a metadata id to query")
abort(400, message="Missing metadata id in the URI for update operation")

post_data = request.get_json()
if not post_data:
self.logger.warning("Invalid json object: {}", request.url)
abort(400, message="Invalid json object in request")

try:
metadata_objects = Metadata.query(id=id)
metadata_objects = UserMetadata.query(id=id)
except Exception:
self.logger.exception(
"Exception occurred in the PUT request while querying the Metadata model, id: {}",
Expand All @@ -284,15 +292,17 @@ def put(self, id=None):
# not present in the metadata db. If any key in the payload does not match
# with the column name we will abort the update request.
non_existent = set(post_data.keys()).difference(
set(Metadata.__table__.columns.keys())
set(UserMetadata.__table__.columns.keys())
)
if non_existent:
self.logger.warning(
"User trying to update fields that are not present in the metadata database. Fields: {}",
non_existent,
)
abort(400, message="Invalid fields in update request payload")
protected = set(post_data.keys()).intersection(set(Metadata.get_protected()))
protected = set(post_data.keys()).intersection(
set(UserMetadata.get_protected())
)
for field in protected:
if getattr(metadata_object, field) != post_data[field]:
self.logger.warning(
Expand All @@ -314,7 +324,7 @@ def put(self, id=None):
return make_response(jsonify(response_object), 200)

@Auth.token_auth.login_required(optional=True)
def delete(self, id=None):
def delete(self, id):
"""
Delete request for deleting a metadata object of a user given a metadata id.
This requires a Pbench auth token in the header field
Expand All @@ -331,11 +341,11 @@ def delete(self, id=None):
"""
if id is None:
self.logger.warning("Metadata id not provided during metadata query")
abort(400, message="Please provide a metadata id to query")
abort(400, message="Missing metadata id in the URI for delete operation")

try:
# Fetch the metadata object
metadata_objects = Metadata.query(id=id)
metadata_objects = UserMetadata.query(id=id)
except Exception:
self.logger.exception(
"Exception occurred in the Delete request while querying the Metadata model, id: {}",
Expand All @@ -354,7 +364,7 @@ def delete(self, id=None):

try:
# Delete the metadata object
Metadata.delete(id=id)
UserMetadata.delete(id=id)
except Exception:
self.logger.exception(
"Exception occurred in the while deleting the metadata entry, id: {}",
Expand Down
10 changes: 5 additions & 5 deletions lib/pbench/server/database/models/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text


class Metadata(Database.Base):
class UserMetadata(Database.Base):
""" Metadata Model for storing user metadata details """

# TODO: Think about the better name
__tablename__ = "metadata"
__tablename__ = "user_metadata"

id = Column(Integer, primary_key=True, autoincrement=True)
created = Column(DateTime, nullable=False, default=datetime.datetime.now())
Expand All @@ -28,9 +28,9 @@ def get_protected():

@staticmethod
def query(**kwargs):
query = Database.db_session.query(Metadata)
query = Database.db_session.query(UserMetadata)
for attr, value in kwargs.items():
query = query.filter(getattr(Metadata, attr) == value)
query = query.filter(getattr(UserMetadata, attr) == value)
return query.all()

def add(self):
Expand Down Expand Up @@ -64,7 +64,7 @@ def delete(id):
:return:
"""
try:
metadata_query = Database.db_session.query(Metadata).filter_by(id=id)
metadata_query = Database.db_session.query(UserMetadata).filter_by(id=id)
metadata_query.delete()
Database.db_session.commit()
return True
Expand Down

0 comments on commit 9ea5268

Please sign in to comment.