Skip to content

Commit

Permalink
Move reader_client into ReaderQueryHandler
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinphippsstfc authored and MRichards99 committed Oct 2, 2024
1 parent 6eed052 commit 6a5d1e5
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 14 deletions.
26 changes: 12 additions & 14 deletions datagateway_api/src/datagateway_api/icat/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,21 +340,19 @@ def get_data_with_filters(
if reader_query.is_query_eligible_for_reader_performance():
log.info("Query is eligible to be passed as reader acount")
if reader_query.is_user_authorised_to_see_entity_id(client):
# TODO - make reader client reuseable
if client_pool:
reader_client = get_cached_client(None, client_pool)
else:
reader_client = ICATClient("datagateway_api")
reader_config = Config.config.datagateway_api.use_reader_for_performance
login_credentals = {
"username": reader_config.reader_username,
"password": reader_config.reader_password,
}
reader_client.login(reader_config.reader_mechanism, login_credentals)
reader_client = ReaderQueryHandler.reader_client
log.info("Query to be executed as reader account")
return execute_entity_query(
reader_client, entity_type, filters, aggregate=aggregate,
)
try:
results = execute_entity_query(
reader_client, entity_type, filters, aggregate=aggregate,
)
except ICATSessionError:
# re-login as reader and try the query again
reader_client = reader_query.create_reader_client()
results = execute_entity_query(
reader_client, entity_type, filters, aggregate=aggregate,
)
return results
else:
raise AuthenticationError(
"Not authorised to access the"
Expand Down
18 changes: 18 additions & 0 deletions datagateway_api/src/datagateway_api/icat/reader_query_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from datagateway_api.src.common.config import Config
from datagateway_api.src.common.filter_order_handler import FilterOrderHandler
from datagateway_api.src.datagateway_api.icat.filters import PythonICATWhereFilter
from datagateway_api.src.datagateway_api.icat.icat_client_pool import ICATClient
from datagateway_api.src.datagateway_api.icat.query import ICATQuery

log = logging.getLogger()
Expand All @@ -13,6 +14,8 @@ class ReaderQueryHandler:
# TODO - add docstrings
entity_filter_check = {"Datafile": "dataset.id", "Dataset": "investigation.id"}
entity_type_check = {"Datafile": "Dataset", "Dataset": "Investigation"}
# keep a cached reader_client for faster queries
reader_client = None

def __init__(self, entity_type, filters):
self.entity_type = entity_type
Expand All @@ -22,6 +25,21 @@ def __init__(self, entity_type, filters):
self.entity_type,
)
self.reader_query_eligible = self.check_eligibility()
self.create_reader_client()

def create_reader_client(self):
log.info("Creating reader_client")
ReaderQueryHandler.reader_client = ICATClient("datagateway_api")
reader_config = Config.config.datagateway_api.use_reader_for_performance
login_credentals = {
"username": reader_config.reader_username,
"password": reader_config.reader_password,
}
ReaderQueryHandler.reader_client.login(
reader_config.reader_mechanism,
login_credentals,
)
return ReaderQueryHandler.reader_client

def check_eligibility(self):
reader_config = Config.config.datagateway_api.use_reader_for_performance
Expand Down

0 comments on commit 6a5d1e5

Please sign in to comment.