Skip to content

Commit

Permalink
fix: support different python objects in time parameter
Browse files Browse the repository at this point in the history
and be more picky about other list parameters
  • Loading branch information
SlowMo24 authored Nov 16, 2023
1 parent 0c52533 commit b7f5b5b
Show file tree
Hide file tree
Showing 42 changed files with 215 additions and 323 deletions.
34 changes: 15 additions & 19 deletions ohsome/clients.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@

"""OhsomeClient classes to build and handle requests to ohsome API"""
import json
import os
import urllib

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

from ohsome import OhsomeException, OhsomeResponse
from ohsome.constants import (
DEFAULT_LOG_DIR,
Expand All @@ -17,12 +21,9 @@
extract_error_message_from_invalid_json,
format_boundary,
format_time,
format_lists,
convert_arrays,
format_list_parameters,
)
import os
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
import numpy as np


class _OhsomeBaseClient:
Expand Down Expand Up @@ -355,21 +356,16 @@ def _format_parameters(self, params):
:param params: Parameters for request
:return:
"""
for i in params.keys():
if isinstance(params[i], np.ndarray):
params[i] = list(params[i])
self._parameters = params.copy()
try:
format_boundary(self._parameters)
except OhsomeException as e:
raise OhsomeException(
message=str(e),
error_code=440,
params=self._parameters,
url=self._url,
)
self._parameters = format_time(self._parameters)
self._parameters = format_lists(self._parameters)

self._parameters = convert_arrays(self._parameters)

self._parameters = format_boundary(self._parameters)

if self._parameters.get("time") is not None:
self._parameters["time"] = format_time(self._parameters.get("time"))

self._parameters = format_list_parameters(self._parameters)

def _construct_resource_url(self, endpoint=None):
"""
Expand Down
71 changes: 45 additions & 26 deletions ohsome/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,52 @@
"""Ohsome utility functions"""

import datetime
import re

import geopandas as gpd
import numpy as np
import pandas as pd

from ohsome import OhsomeException

import re

def convert_arrays(params: dict) -> dict:
"""Convert arrays to lists.
def format_time(params: dict) -> dict:
"""
Formats the 'time' parameter given as string, list of dates or pandas.Series or pandas.DateTimeIndex
:param params:
:return:
params: the request parameters
"""
if isinstance(params["time"], pd.DatetimeIndex):
params["time"] = params["time"].strftime("%Y-%m-%dT%H:%M:%S").tolist()
elif isinstance(params["time"], pd.Series):
params["time"] = params["time"].tolist()
elif isinstance((params["time"]), list):
if isinstance((params["time"])[0], datetime.datetime):
params["time"] = [x.isoformat() for x in params["time"]]
elif isinstance(params["time"], datetime.datetime):
params["time"] = params["time"].strftime("%Y-%m-%dT%H:%M:%S")
for i in params.keys():
if isinstance(params[i], np.ndarray):
assert (
params[i].ndim == 1
), f"Only one dimensional arrays are supported for parameter {i}"
params[i] = list(params[i])

return params


def format_boundary(params):
def format_time(time: any) -> str:
"""
Formats the 'time' parameter
:param time:
:return:
"""
if isinstance(time, str):
return time
if isinstance(time, datetime.datetime) or isinstance(time, datetime.date):
return time.isoformat()
elif isinstance(time, list):
return ",".join([format_time(t) for t in time])
if isinstance(time, pd.DatetimeIndex) or isinstance(time, pd.Series):
return format_time(time.to_list())
else:
raise ValueError(
f"The given time format {type(time)} is not supported. Feel free to open an issue in "
"the ohsome-py repository for a feature request."
)


def format_boundary(params: dict) -> dict:
"""
Formats the boundary parameters 'bboxes', 'bcircles' and 'bpolys'
:param params:
Expand All @@ -46,10 +63,14 @@ def format_boundary(params):
params["bcircles"] = format_bcircles(params["bcircles"])
else:
raise OhsomeException(
message="No valid boundary parameter is given. Specify one of the parameters 'bboxes', 'bpolys' or 'bcircles'.",
message="No valid boundary parameter is given. Specify one of the parameters 'bboxes', 'bpolys' or "
"'bcircles'.",
error_code=440,
params=params,
)

return params


def format_bcircles(bcircles):
"""
Expand Down Expand Up @@ -168,15 +189,13 @@ def format_bpolys(bpolys):
return bpolys


def format_lists(parameters: dict) -> dict:
"""
Converts parameters of type list to strings using ',' as seperator.
:param parameters: request parameters
:return: the modified parameters
"""
for k, v in parameters.items():
if isinstance(v, list):
parameters[k] = ",".join(v)
def format_list_parameters(parameters: dict) -> dict:
"""Converts parameters of type list to strings using ',' as seperator."""
list_parameters = ["groupByKeys", "groupByValues", "properties"]
for param in list_parameters:
if isinstance(parameters.get(param), list):
parameters[param] = ",".join(parameters[param])

return parameters


Expand Down
59 changes: 0 additions & 59 deletions ohsome/test/cassettes/test_client/test_bbox_numpy.yaml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ interactions:
Content-Type:
- application/json
Date:
- Wed, 15 Nov 2023 12:04:47 GMT
- Thu, 16 Nov 2023 11:12:17 GMT
Keep-Alive:
- timeout=5, max=100
Server:
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ interactions:
Content-Type:
- application/json
Date:
- Wed, 15 Nov 2023 12:04:46 GMT
- Thu, 16 Nov 2023 11:12:16 GMT
Keep-Alive:
- timeout=5, max=100
Server:
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ interactions:
Content-Type:
- application/json
Date:
- Wed, 15 Nov 2023 12:04:48 GMT
- Thu, 16 Nov 2023 11:12:17 GMT
Keep-Alive:
- timeout=5, max=100
Server:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ interactions:
Content-Type:
- application/json
Date:
- Wed, 15 Nov 2023 12:04:51 GMT
- Thu, 16 Nov 2023 11:12:20 GMT
Keep-Alive:
- timeout=5, max=100
Server:
Expand Down
Loading

0 comments on commit b7f5b5b

Please sign in to comment.