11from abc import ABC , abstractmethod
22
33
4+ class MissingDataException (Exception ):
5+ pass
6+
7+
48class BaseDataService (ABC ):
59 """
610 Base class for all Data Services. Data Services are classes that are responsible for querying external services
@@ -17,17 +21,17 @@ class BaseDataService(ABC):
1721 # Class variable that can store query results if necessary
1822 query_results = {}
1923
20- @abstractmethod
21- def pre_query_validation_service (self , query_parameters ):
22- """Same thing as query_service, but a dry run"""
23-
2424 @abstractmethod
2525 def query_service (self , query_parameters ):
2626 """takes in the serialized data from the query form and actually submits the query to the service"""
2727
28- @abstractmethod
28+ def pre_query_validation (self , query_parameters ):
29+ """Same thing as query_service, but a dry run"""
30+ raise NotImplementedError
31+
2932 def get_form_class (self ):
3033 """Returns the full form class for querying this service"""
34+ raise NotImplementedError
3135
3236 def get_additional_context_data (self ):
3337 """
@@ -63,14 +67,53 @@ def query_targets(self, query_parameters):
6367 """Set up and run a specialized query for retrieving targets from a DataService."""
6468 return self .query_service (query_parameters )
6569
66- def to_data_product (self , query_results ):
70+ def to_data_product (self , query_results = None , ** kwargs ):
71+ """
72+ Upper level function to create a new DataProduct from the query results
73+ Can take either new query results, or use stored results form a recent `query_service()`
74+ :param query_results: Query results from the DataService
75+ :returns: Target object
76+ """
77+ query_results = query_results or self .query_results
78+ if not query_results :
79+ raise MissingDataException ('No query results. Did you call query_service()?' )
80+ else :
81+ return self .create_data_product_from_query (query_results , ** kwargs )
82+
83+ def create_data_product_from_query (self , query_results = None , ** kwargs ):
6784 """Create a new DataProduct from the query results"""
6885 raise NotImplementedError
6986
70- def to_reduced_datums (self , query_results ):
71- """Create a new ReducedDatum of the appropriate type from the query results"""
87+ def to_reduced_datums (self , query_results = None , ** kwargs ):
88+ """
89+ Upper level function to create a new ReducedDatum from the query results
90+ Can take either new query results, or use stored results form a recent `query_service()`
91+ :param query_results: Query results from the DataService
92+ :returns: Target object
93+ """
94+ query_results = query_results or self .query_results
95+ if not query_results :
96+ raise MissingDataException ('No query results. Did you call query_service()?' )
97+ else :
98+ return self .create_reduced_datums_from_query (query_results , ** kwargs )
99+
100+ def create_reduced_datums_from_query (self , query_results = None , ** kwargs ):
101+ """Create a new reduced_datum of the appropriate type from the query results"""
72102 raise NotImplementedError
73103
74- def to_target (self , query_results ):
104+ def to_target (self , query_results = None , ** kwargs ):
105+ """
106+ Upper level function to create a new target from the query results
107+ Can take either new query results, or use stored results form a recent `query_service()`
108+ :param query_results: Query results from the DataService
109+ :returns: Target object
110+ """
111+ target_parameters = query_results or self .query_results
112+ if not target_parameters :
113+ raise MissingDataException ('No query results. Did you call query_service()?' )
114+ else :
115+ return self .create_target_from_query (target_parameters , ** kwargs )
116+
117+ def create_target_from_query (self , query_results , ** kwargs ):
75118 """Create a new target from the query results"""
76119 raise NotImplementedError
0 commit comments