polars-api 0.1.4__tar.gz → 0.1.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {polars_api-0.1.4/polars_api.egg-info → polars_api-0.1.5}/PKG-INFO +1 -1
- polars_api-0.1.5/polars_api/api.py +97 -0
- {polars_api-0.1.4 → polars_api-0.1.5/polars_api.egg-info}/PKG-INFO +1 -1
- {polars_api-0.1.4 → polars_api-0.1.5}/pyproject.toml +1 -1
- polars_api-0.1.4/polars_api/api.py +0 -91
- {polars_api-0.1.4 → polars_api-0.1.5}/LICENSE +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/README.md +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/examples/test.py +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/polars_api/__init__.py +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/polars_api.egg-info/SOURCES.txt +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/polars_api.egg-info/dependency_links.txt +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/polars_api.egg-info/requires.txt +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/polars_api.egg-info/top_level.txt +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/setup.cfg +0 -0
- {polars_api-0.1.4 → polars_api-0.1.5}/tests/test_api.py +0 -0
@@ -0,0 +1,97 @@
|
|
1
|
+
import asyncio
|
2
|
+
from typing import Optional
|
3
|
+
|
4
|
+
import httpx
|
5
|
+
import polars as pl
|
6
|
+
|
7
|
+
|
8
|
+
def check_status_code(status_code):
|
9
|
+
return status_code >= 200 and status_code < 300
|
10
|
+
|
11
|
+
|
12
|
+
@pl.api.register_expr_namespace("api")
|
13
|
+
class Api:
|
14
|
+
def __init__(self, url: pl.Expr) -> None:
|
15
|
+
self._url = url
|
16
|
+
|
17
|
+
@staticmethod
|
18
|
+
def _get(url: str, params: Optional[dict[str, str]] = None, timeout: Optional[float] = None) -> Optional[str]:
|
19
|
+
result = httpx.get(url, params=params, timeout=timeout)
|
20
|
+
if check_status_code(result.status_code):
|
21
|
+
return result.text
|
22
|
+
else:
|
23
|
+
return None
|
24
|
+
|
25
|
+
@staticmethod
|
26
|
+
def _post(url: str, params: dict[str, str], body: str, timeout: float) -> Optional[str]:
|
27
|
+
result = httpx.post(url, params=params, json=body, timeout=timeout)
|
28
|
+
if check_status_code(result.status_code):
|
29
|
+
return result.text
|
30
|
+
else:
|
31
|
+
return None
|
32
|
+
|
33
|
+
@staticmethod
|
34
|
+
async def _aget_one(url: str, params: str, timeout: float) -> str:
|
35
|
+
async with httpx.AsyncClient() as client:
|
36
|
+
r = await client.get(url, params=params, timeout=timeout)
|
37
|
+
return r.text
|
38
|
+
|
39
|
+
async def _aget_all(self, x, params, timeout):
|
40
|
+
return await asyncio.gather(*[self._aget_one(url, param, timeout) for url, param in zip(x, params)])
|
41
|
+
|
42
|
+
def _aget(self, x, params, timeout):
|
43
|
+
return pl.Series(asyncio.run(self._aget_all(x, params, timeout)))
|
44
|
+
|
45
|
+
@staticmethod
|
46
|
+
async def _apost_one(url: str, params: str, body: str, timeout: Optional[float]) -> str:
|
47
|
+
async with httpx.AsyncClient() as client:
|
48
|
+
r = await client.post(url, params=params, json=body, timeout=timeout)
|
49
|
+
return r.text
|
50
|
+
|
51
|
+
async def _apost_all(self, x, params, body, timeout):
|
52
|
+
return await asyncio.gather(*[
|
53
|
+
self._apost_one(url, _params, _body, timeout) for url, _params, _body in zip(x, params, body)
|
54
|
+
])
|
55
|
+
|
56
|
+
def _apost(self, x, params, body, timeout):
|
57
|
+
return pl.Series(asyncio.run(self._apost_all(x, params, body, timeout)))
|
58
|
+
|
59
|
+
def get(self, params: Optional[pl.Expr] = None, timeout: Optional[float] = None) -> pl.Expr:
|
60
|
+
if params is None:
|
61
|
+
params = pl.lit(None)
|
62
|
+
return pl.struct(self._url.alias("url"), params.alias("params")).map_elements(
|
63
|
+
lambda x: self._get(x["url"], params=x["params"], timeout=timeout),
|
64
|
+
return_dtype=pl.Utf8,
|
65
|
+
)
|
66
|
+
|
67
|
+
def post(
|
68
|
+
self, params: Optional[pl.Expr] = None, body: Optional[pl.Expr] = None, timeout: Optional[float] = None
|
69
|
+
) -> pl.Expr:
|
70
|
+
if params is None:
|
71
|
+
params = pl.lit(None)
|
72
|
+
if body is None:
|
73
|
+
body = pl.lit(None)
|
74
|
+
return pl.struct(self._url.alias("url"), params.alias("params"), body.alias("body")).map_elements(
|
75
|
+
lambda x: self._post(x["url"], params=x["params"], body=x["body"], timeout=timeout),
|
76
|
+
return_dtype=pl.Utf8,
|
77
|
+
)
|
78
|
+
|
79
|
+
def aget(self, params: Optional[pl.Expr] = None, timeout: Optional[float] = None) -> pl.Expr:
|
80
|
+
if params is None:
|
81
|
+
params = pl.lit(None)
|
82
|
+
return pl.struct(self._url.alias("url"), params.alias("params")).map_batches(
|
83
|
+
lambda x: self._aget(x.struct.field("url"), params=x.struct.field("params"), timeout=timeout)
|
84
|
+
)
|
85
|
+
|
86
|
+
def apost(
|
87
|
+
self, params: Optional[pl.Expr] = None, body: Optional[pl.Expr] = None, timeout: Optional[float] = None
|
88
|
+
) -> pl.Expr:
|
89
|
+
if params is None:
|
90
|
+
params = pl.lit(None)
|
91
|
+
if body is None:
|
92
|
+
body = pl.lit(None)
|
93
|
+
return pl.struct(self._url.alias("url"), params.alias("params"), body.alias("body")).map_batches(
|
94
|
+
lambda x: self._apost(
|
95
|
+
x.struct.field("url"), params=x.struct.field("params"), body=x.struct.field("body"), timeout=timeout
|
96
|
+
)
|
97
|
+
)
|
@@ -1,91 +0,0 @@
|
|
1
|
-
import asyncio
|
2
|
-
from typing import Optional
|
3
|
-
|
4
|
-
import httpx
|
5
|
-
import polars as pl
|
6
|
-
|
7
|
-
|
8
|
-
def check_status_code(status_code):
|
9
|
-
return status_code >= 200 and status_code < 300
|
10
|
-
|
11
|
-
|
12
|
-
@pl.api.register_expr_namespace("api")
|
13
|
-
class Api:
|
14
|
-
def __init__(self, url: pl.Expr) -> None:
|
15
|
-
self._url = url
|
16
|
-
|
17
|
-
@staticmethod
|
18
|
-
def _get(url: str, params: Optional[dict[str, str]] = None) -> Optional[str]:
|
19
|
-
result = httpx.get(url, params=params)
|
20
|
-
if check_status_code(result.status_code):
|
21
|
-
return result.text
|
22
|
-
else:
|
23
|
-
return None
|
24
|
-
|
25
|
-
@staticmethod
|
26
|
-
def _post(url: str, params: dict[str, str], body: str) -> Optional[str]:
|
27
|
-
result = httpx.post(url, params=params, json=body)
|
28
|
-
if check_status_code(result.status_code):
|
29
|
-
return result.text
|
30
|
-
else:
|
31
|
-
return None
|
32
|
-
|
33
|
-
@staticmethod
|
34
|
-
async def _aget_one(url: str, params: str) -> str:
|
35
|
-
async with httpx.AsyncClient() as client:
|
36
|
-
r = await client.get(url, params=params)
|
37
|
-
return r.text
|
38
|
-
|
39
|
-
async def _aget_all(self, x, params):
|
40
|
-
return await asyncio.gather(*[self._aget_one(url, param) for url, param in zip(x, params)])
|
41
|
-
|
42
|
-
def _aget(self, x, params):
|
43
|
-
return pl.Series(asyncio.run(self._aget_all(x, params)))
|
44
|
-
|
45
|
-
@staticmethod
|
46
|
-
async def _apost_one(url: str, params: str, body: str) -> str:
|
47
|
-
async with httpx.AsyncClient() as client:
|
48
|
-
r = await client.post(url, params=params, json=body)
|
49
|
-
return r.text
|
50
|
-
|
51
|
-
async def _apost_all(self, x, params, body):
|
52
|
-
return await asyncio.gather(*[
|
53
|
-
self._apost_one(url, _params, _body) for url, _params, _body in zip(x, params, body)
|
54
|
-
])
|
55
|
-
|
56
|
-
def _apost(self, x, params, body):
|
57
|
-
return pl.Series(asyncio.run(self._apost_all(x, params, body)))
|
58
|
-
|
59
|
-
def get(self, params: Optional[pl.Expr] = None) -> pl.Expr:
|
60
|
-
if params is None:
|
61
|
-
params = pl.lit(None)
|
62
|
-
return pl.struct(self._url.alias("url"), params.alias("params")).map_elements(
|
63
|
-
lambda x: self._get(x["url"], params=x["params"]),
|
64
|
-
return_dtype=pl.Utf8,
|
65
|
-
)
|
66
|
-
|
67
|
-
def post(self, params: Optional[pl.Expr] = None, body: Optional[pl.Expr] = None) -> pl.Expr:
|
68
|
-
if params is None:
|
69
|
-
params = pl.lit(None)
|
70
|
-
if body is None:
|
71
|
-
body = pl.lit(None)
|
72
|
-
return pl.struct(self._url.alias("url"), params.alias("params"), body.alias("body")).map_elements(
|
73
|
-
lambda x: self._post(x["url"], params=x["params"], body=x["body"]),
|
74
|
-
return_dtype=pl.Utf8,
|
75
|
-
)
|
76
|
-
|
77
|
-
def aget(self, params: Optional[pl.Expr] = None) -> pl.Expr:
|
78
|
-
if params is None:
|
79
|
-
params = pl.lit(None)
|
80
|
-
return pl.struct(self._url.alias("url"), params.alias("params")).map_batches(
|
81
|
-
lambda x: self._aget(x.struct.field("url"), params=x.struct.field("params"))
|
82
|
-
)
|
83
|
-
|
84
|
-
def apost(self, params: Optional[pl.Expr] = None, body: Optional[pl.Expr] = None) -> pl.Expr:
|
85
|
-
if params is None:
|
86
|
-
params = pl.lit(None)
|
87
|
-
if body is None:
|
88
|
-
body = pl.lit(None)
|
89
|
-
return pl.struct(self._url.alias("url"), params.alias("params"), body.alias("body")).map_batches(
|
90
|
-
lambda x: self._apost(x.struct.field("url"), params=x.struct.field("params"), body=x.struct.field("body"))
|
91
|
-
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|