Skip to content

Commit

Permalink
Merge pull request #1 from bluesky-api/user-agent
Browse files Browse the repository at this point in the history
Send a more useful user agent
  • Loading branch information
maxhollmann committed Mar 4, 2022
2 parents fcbc97a + cae70de commit b125d44
Show file tree
Hide file tree
Showing 6 changed files with 222 additions and 46 deletions.
1 change: 1 addition & 0 deletions src/blueskyapi/__init__.py
@@ -1 +1,2 @@
from .__version__ import __version__
from .client import Client
6 changes: 6 additions & 0 deletions src/blueskyapi/__version__.py
@@ -0,0 +1,6 @@
try:
import importlib.metadata as importlib_metadata
except ModuleNotFoundError:
import importlib_metadata

__version__ = importlib_metadata.version("blueskyapi")
14 changes: 14 additions & 0 deletions src/blueskyapi/client.py
@@ -1,3 +1,4 @@
import sys
from datetime import datetime
from typing import Iterable
from typing import Optional
Expand All @@ -8,6 +9,7 @@

from blueskyapi import default_config
from blueskyapi import errors
from blueskyapi.__version__ import __version__


def _create_dataframe(response: bytes) -> pd.DataFrame:
Expand Down Expand Up @@ -60,6 +62,7 @@ def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None
self.base_url = base_url or default_config.base_url

self.session = requests.Session()
self.session.headers.update({"User-Agent": self._user_agent()})

if self.api_key is not None:
self.session.headers.update({"Authorization": f"Bearer {self.api_key}"})
Expand Down Expand Up @@ -138,3 +141,14 @@ def _get(self, endpoint: str, params: dict = {}) -> bytes:

def _url(self, endpoint: str) -> str:
return self.base_url + endpoint

def _user_agent(self) -> str:
python_version = sys.version.split(" ")[0]
return " ".join(
[
f"blueskyapi-python/{__version__}",
f"python/{python_version}",
f"pandas/{pd.__version__}",
f"requests/{requests.__version__}",
]
)
25 changes: 23 additions & 2 deletions tests/blueskyapi/client_test.py
Expand Up @@ -142,14 +142,13 @@ def test_integration(client):
assert len(result) == 15

assert str(result.forecast_moment.dtype) == "datetime64[ns, UTC]"
assert np.all(result.forecast_moment == pd.to_datetime("2021-12-29T00:00:00Z"))
assert np.all(result.forecast_moment == pd.to_datetime("2022-03-04T00:00:00Z"))

assert np.all(
result.forecast_distance
== [0, 3, 6, 9, 12, 15, 18, 21, 24, 48, 72, 96, 120, 144, 168]
)

print(result)
assert np.all(result.apparent_temperature_at_2m > 250)
assert np.all(result.apparent_temperature_at_2m < 290)

Expand Down Expand Up @@ -205,3 +204,25 @@ def with_none(client):
min_forecast_moment=datetime(2021, 12, 27, 18, 0),
max_forecast_moment=None,
)

@pytest.mark.vcr()
def test_integration(client):
min_moment = datetime(2021, 12, 27, 18, 0)
max_moment = datetime(2021, 12, 28, 0, 0)

result = client.forecast_history(
53.5,
13.5,
min_forecast_moment=min_moment,
max_forecast_moment=max_moment,
)

assert len(result.columns) == 35
assert len(result) == 30

assert str(result.forecast_moment.dtype) == "datetime64[ns, UTC]"
assert np.all(result.forecast_moment >= pd.to_datetime("2021-12-27T18:00:00Z"))
assert np.all(result.forecast_moment <= pd.to_datetime("2021-12-28T00:00:00Z"))

assert np.all(result.apparent_temperature_at_2m > 250)
assert np.all(result.apparent_temperature_at_2m < 290)
129 changes: 129 additions & 0 deletions tests/cassettes/describe_forecast_history/test_integration.yaml
@@ -0,0 +1,129 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
User-Agent:
- blueskyapi-python/0.1.3 python/3.7.12 pandas/1.3.5 requests/2.26.0
method: GET
uri: https://api.blueskyapi.io/forecasts/history?lat=53.5&lon=13.5&min_forecast_moment=2021-12-27T18%3A00%3A00&max_forecast_moment=2021-12-28T00%3A00%3A00
response:
body:
string: !!binary |
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
jAAA
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 6e6a00eb1c0dd46b-HAM
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Fri, 04 Mar 2022 10:42:11 GMT
Expect-CT:
- max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
NEL:
- '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
Report-To:
- '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=NSfl35nKiLWuzb5rUWvSrVA7e%2FinFmlGj%2ByKxjeEK7EuAHgj41hPmDxzYlyKb94s%2B%2F%2F3ACUfTU3V%2BWhL8ig%2BmKpJI0x09QLIwxifWixRCo0dIhRG5JZaWXCLVTgvbAgE513FTR89BzE1ZIuyEAqVuA%3D%3D"}],"group":"cf-nel","max_age":604800}'
Server:
- cloudflare
Transfer-Encoding:
- chunked
alt-svc:
- h3=":443"; ma=86400, h3-29=":443"; ma=86400
strict-transport-security:
- max-age=15724800; includeSubDomains
vary:
- Accept-Encoding
status:
code: 200
message: OK
version: 1
93 changes: 49 additions & 44 deletions tests/cassettes/describe_latest_forecast/test_integration.yaml
Expand Up @@ -9,74 +9,79 @@ interactions:
Connection:
- keep-alive
User-Agent:
- python-requests/2.26.0
- blueskyapi-python/0.1.3 python/3.7.12 pandas/1.3.5 requests/2.26.0
method: GET
uri: https://api.blueskyapi.io/forecasts/latest?lat=53.5&lon=13.5
response:
body:
string: !!binary |
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
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 6c5266befeec4168-HAM
- 6e69fbba4a65414a-HAM
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Wed, 29 Dec 2021 10:38:53 GMT
- Fri, 04 Mar 2022 10:38:38 GMT
Expect-CT:
- max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
NEL:
- '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
Report-To:
- '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=%2FEc3FfgHgCvCRGVDDY%2BiG4poVUD55wuKiaudPqpk3a5GYnRy5pPfvmyZ0TSwayQJaIOVUm5%2F248y2AEzXghAjtAnc0x97%2BS92nEQlqAqdvR2m%2FUDHQyQo6RMZhU81xKSSqF7TL5RSP8Q63YFDLY5JA%3D%3D"}],"group":"cf-nel","max_age":604800}'
- '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=cmPHCe0ySrwMwexBHfLvkehfBZL3Zo2USKmQRnyWN2bzFGkaO02QSqMis1dNV66MT0UzzE5bBwvx6O3bZID5%2FCv383jzHGASdcJY5E3aH9EzeowcepXWxunmsmBRhQYGvnSGpRAwyRkdwEHkVMPBfg%3D%3D"}],"group":"cf-nel","max_age":604800}'
Server:
- cloudflare
Transfer-Encoding:
- chunked
alt-svc:
- h3=":443"; ma=86400, h3-29=":443"; ma=86400, h3-28=":443"; ma=86400, h3-27=":443";
ma=86400
content-encoding:
- gzip
- h3=":443"; ma=86400, h3-29=":443"; ma=86400
strict-transport-security:
- max-age=15724800; includeSubDomains
vary:
Expand Down

0 comments on commit b125d44

Please sign in to comment.