Skip to content

Commit 2501574

Browse files
committed
fixes test, adds exception
1 parent 9bbb050 commit 2501574

File tree

2 files changed

+33
-16
lines changed

2 files changed

+33
-16
lines changed

openhexa/toolbox/dhis2/api.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ class DHIS2Connection(Protocol):
2626

2727
class Api:
2828
def __init__(self, connection: DHIS2Connection = None, cache_dir: Optional[Union[Path, str]] = None, **kwargs):
29-
3029
self.session = requests.Session()
3130
adapter = HTTPAdapter(
3231
max_retries=Retry(
@@ -39,8 +38,13 @@ def __init__(self, connection: DHIS2Connection = None, cache_dir: Optional[Union
3938
self.session.mount("https://", adapter)
4039
self.session.mount("http://", adapter)
4140

41+
if connection is None and ("url" not in kwargs and "username" not in kwargs and "password" not in kwargs):
42+
raise DHIS2Error("Connection or url, username and password must be provided")
43+
4244
self.url = self.parse_api_url(kwargs.get("url", connection.url))
43-
self.session = self.authenticate(kwargs.get("username", connection.username), kwargs.get("password", connection.password))
45+
self.session = self.authenticate(
46+
kwargs.get("username", connection.username), kwargs.get("password", connection.password)
47+
)
4448

4549
self.cache = None
4650
if cache_dir:

openhexa/toolbox/dhis2/dhis2.py

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ def __init__(self, connection: DHIS2Connection = None, cache_dir: Union[str, Pat
1919
2020
Parameters
2121
----------
22-
connection : openhexa DHIS2Connection
22+
connection : openhexa DHIS2Connection, optional
2323
An initialized openhexa dhis2 connection
24+
kwargs:
25+
Additional arguments to pass to initialize openhexa dhis2 connection, such as `url`, `username`, `password`
2426
cache_dir : str, optional
2527
Cache directory. Actual cache data will be stored under a sub-directory
2628
named after the DHIS2 instance domain.
@@ -69,7 +71,7 @@ def organisation_unit_levels(self) -> List[dict]:
6971
)
7072
return levels
7173

72-
def organisation_units(self, fields:str = "id,name,level,path,geometry", filter: str = None) -> List[dict]:
74+
def organisation_units(self, fields: str = "id,name,level,path,geometry", filter: str = None) -> List[dict]:
7375
"""Get organisation units metadata.
7476
7577
Parameters
@@ -95,13 +97,17 @@ def organisation_units(self, fields:str = "id,name,level,path,geometry", filter:
9597
for ou in page["organisationUnits"]:
9698
org_units.append(
9799
{
98-
key: ou.get(key) if key != "geometry" else json.dumps(ou.get("geometry")) if ou.get("geometry") else None
100+
key: ou.get(key)
101+
if key != "geometry"
102+
else json.dumps(ou.get("geometry"))
103+
if ou.get("geometry")
104+
else None
99105
for key in fields.split(",")
100106
}
101107
)
102108
return org_units
103109

104-
def organisation_unit_groups(self, fields:str = "id,name,organisationUnits") -> List[dict]:
110+
def organisation_unit_groups(self, fields: str = "id,name,organisationUnits") -> List[dict]:
105111
"""Get organisation unit groups metadata.
106112
Parameters
107113
----------
@@ -121,20 +127,23 @@ def organisation_unit_groups(self, fields:str = "id,name,organisationUnits") ->
121127
for group in page.get("organisationUnitGroups"):
122128
groups.append(
123129
{
124-
key : group.get(key) if key != "organisationUnits" else [ou.get("id") for ou in group["organisationUnits"]]
130+
key: group.get(key)
131+
if key != "organisationUnits"
132+
else [ou.get("id") for ou in group["organisationUnits"]]
125133
for key in fields.split(",")
126134
}
127135
)
128136
org_unit_groups += groups
129137
return groups
130138

131-
def datasets(self, fields:str ="id,name,dataSetElements,indicators,organisationUnits") -> List[dict]:
139+
def datasets(self, fields: str = "id,name,dataSetElements,indicators,organisationUnits") -> List[dict]:
132140
"""Get datasets metadata.
133141
134142
Parameters
135143
----------
136144
fields: str, optional
137-
DHIS2 fields to include in the response, where default value is "id,name,dataSetElements,indicators,organisationUnits"
145+
DHIS2 fields to include in the response, where default value is
146+
"id,name,dataSetElements,indicators,organisationUnits"
138147
Return
139148
------
140149
list of dict
@@ -164,7 +173,9 @@ def datasets(self, fields:str ="id,name,dataSetElements,indicators,organisationU
164173
datasets.append(row)
165174
return datasets
166175

167-
def data_elements(self, fields:str = "id,name,aggregationType,zeroIsSignificant" ,filter: str = None) -> List[dict]:
176+
def data_elements(
177+
self, fields: str = "id,name,aggregationType,zeroIsSignificant", filter: str = None
178+
) -> List[dict]:
168179
"""Get data elements metadata.
169180
170181
Parameters
@@ -184,14 +195,14 @@ def data_elements(self, fields:str = "id,name,aggregationType,zeroIsSignificant"
184195
params["filter"] = filter
185196
elements = []
186197
for page in self.client.api.get_paged(
187-
"dataElements",
188-
params=params,
198+
"dataElements",
199+
params=params,
189200
):
190201
for element in page["dataElements"]:
191202
elements.append({key: element.get(key) for key in params["fields"].split(",")})
192203
return elements
193204

194-
def data_element_groups(self, fields:str = "id,name,dataElements") -> List[dict]:
205+
def data_element_groups(self, fields: str = "id,name,dataElements") -> List[dict]:
195206
"""Get data element groups metadata.
196207
Parameters
197208
----------
@@ -231,7 +242,7 @@ def category_option_combos(self) -> List[dict]:
231242
combos += page.get("categoryOptionCombos")
232243
return combos
233244

234-
def indicators(self, fields:str="id,name,numerator,denominator", filter: str = None) -> List[dict]:
245+
def indicators(self, fields: str = "id,name,numerator,denominator", filter: str = None) -> List[dict]:
235246
"""Get indicators metadata.
236247
237248
Parameters
@@ -257,7 +268,7 @@ def indicators(self, fields:str="id,name,numerator,denominator", filter: str = N
257268
indicators += page["indicators"]
258269
return indicators
259270

260-
def indicator_groups(self, fields:str=None) -> List[dict]:
271+
def indicator_groups(self, fields: str = "id,name,indicators") -> List[dict]:
261272
"""Get indicator groups metadata.
262273
263274
Return
@@ -274,7 +285,9 @@ def indicator_groups(self, fields:str=None) -> List[dict]:
274285
for group in page.get("indicatorGroups"):
275286
groups.append(
276287
{
277-
key: group.get(key) if key != "indicators" else [indicator.get("id") for indicator in group["indicators"]]
288+
key: group.get(key)
289+
if key != "indicators"
290+
else [indicator.get("id") for indicator in group["indicators"]]
278291
for key in fields.split(",")
279292
}
280293
)

0 commit comments

Comments
 (0)