query-farm-airport-test-server 0.1.0__tar.gz → 0.1.1__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.
- query_farm_airport_test_server-0.1.1/.github/workflows/ci.yml +64 -0
- query_farm_airport_test_server-0.1.1/Dockerfile +9 -0
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/PKG-INFO +1 -1
- query_farm_airport_test_server-0.1.1/database_library_0276f9bf-74b4-4746-9abb-07cc41629d7e.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_0f574b14-cf3a-4f6e-aa39-df4d4e6a962b.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_191ab8da-a63a-4890-9457-e1ed70ef1079.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_1bc128c1-a3eb-4c68-a824-329a523ba291.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_1c223378-5eff-4408-b1de-9d47721e1fee.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_1c81d309-74fd-44f1-b683-32eea8836f9f.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_23af9844-32d0-4e5c-8138-b61467814ce5.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_33d3c826-3ec4-4c50-922d-99faf6343b7e.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_35e40ae1-fe07-4118-9f4b-f7421f598ca1.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_379c4588-ec9a-4ca8-ad15-615d8fc795aa.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_44416da5-7e97-41b7-9687-782cabd54b6d.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_520884c3-b607-42db-b588-ebbc7d32b620.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_5370b6eb-c193-4153-a4da-b3e39ddc405d.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_556f2306-9214-4a56-a25a-b8829a817b74.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_5d5c1c87-2ef2-4f7a-a2c7-5ab0b8030786.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_5fe0a78c-e9f3-4aa4-8e98-bc31bdbb5422.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_64ff5398-0648-4464-a560-a3633fbc3bc6.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_694d189e-ceb3-4a02-9bca-0b6a269f2fc6.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_6a6e5877-407a-44de-bb18-36bdd591347f.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_6cc16d8d-d82e-47c2-9c8b-eee4b46e418f.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_70ed7556-ac78-43df-934f-770b067e3f90.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_71147360-57a9-47a3-8557-ddd7e0fa8019.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_72655563-36fb-409e-aecc-7557135c26ff.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_78fab7d3-f7d8-46e5-a595-181371ab98be.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_8ea06715-352c-437e-991d-3df69d45eede.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_908e4d8e-06c0-42ad-ba0c-bf596127c4ca.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_92d1baeb-6bc2-4fd1-9b24-835c40c967ff.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_9449e595-8484-4718-9695-5f96394ab445.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_9491f877-5699-4a0b-a422-0cd7046e5cd2.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_98ab84c5-1e9a-4b8c-b7a5-de2e2dddd28a.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_a3ba8bfc-d7b4-4efd-b87e-9cedc49044e7.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_acb65985-39cf-47bf-8e85-f0cfb4f95ced.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_b41d7c1a-031d-4330-8a63-5934ce495052.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_bcca97bf-178a-4085-8884-d93b4e3db7c5.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_bdfb2ad4-caf0-442c-9045-88fd6750d02e.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_bf18ad90-4fc2-4412-9ed5-14b4be72cdb9.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_c3709451-1b21-44a9-80bd-10bd0b9cec8d.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_c3b54080-ec57-47e2-a312-d24f428a577b.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_cdecd2ab-e9ac-4e82-9c92-287baeaba48f.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_d257d2fd-5fa7-4198-8c81-391153d70645.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_dacbeeec-8be6-49b7-a707-1f4ac7d3a8f6.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_dc041777-b25e-409c-ab5b-f317b4f5d706.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_de6893a1-569e-472e-bb74-ae6b33a68074.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_e0741ddb-b47e-4cd2-bae3-075be81d9c3e.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_ea650d75-4fe9-4192-b3b9-f4b0bc717617.pkl +0 -0
- query_farm_airport_test_server-0.1.1/database_library_fab7e1ae-dba1-4dec-b4e1-37112a36c555.pkl +0 -0
- query_farm_airport_test_server-0.1.1/dns.diff +129 -0
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/pyproject.toml +1 -2
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/requirements-dev.lock +14 -14
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/requirements.lock +11 -11
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/scripts/generate-types-tests.py +21 -9
- query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/collatz.sql +30 -0
- query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/database_impl.py +1122 -0
- query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/repro.py +17 -0
- query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/repro2.py +15 -0
- query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/server.py +1234 -0
- query_farm_airport_test_server-0.1.0/src/query_farm_airport_test_server/server.py +0 -1799
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/.gitignore +0 -0
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/.python-version +0 -0
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/README.md +0 -0
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/src/query_farm_airport_test_server/__init__.py +0 -0
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/src/query_farm_airport_test_server/auth.py +0 -0
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/src/query_farm_airport_test_server/py.typed +0 -0
- {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/src/query_farm_airport_test_server/utils.py +0 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [master]
|
6
|
+
pull_request:
|
7
|
+
branches: [master]
|
8
|
+
|
9
|
+
permissions:
|
10
|
+
contents: read
|
11
|
+
id-token: write
|
12
|
+
|
13
|
+
jobs:
|
14
|
+
test:
|
15
|
+
permissions:
|
16
|
+
contents: 'read'
|
17
|
+
id-token: 'write'
|
18
|
+
runs-on: ubuntu-latest
|
19
|
+
steps:
|
20
|
+
- name: Checkout code
|
21
|
+
uses: actions/checkout@v4
|
22
|
+
|
23
|
+
- name: Install the latest version of rye
|
24
|
+
uses: eifinger/setup-rye@v4
|
25
|
+
|
26
|
+
- name: Add Python to PATH
|
27
|
+
run: echo "$(rye show python-path | head -n 1 | xargs dirname | xargs dirname)/bin" >> $GITHUB_PATH
|
28
|
+
|
29
|
+
- name: Cache Rye
|
30
|
+
uses: actions/cache@v4
|
31
|
+
with:
|
32
|
+
path: |
|
33
|
+
~/.cache/rye
|
34
|
+
~/.rye
|
35
|
+
key: ${{ runner.os }}-rye-${{ hashFiles('**/pyproject.toml', '**/pyproject.lock') }}
|
36
|
+
restore-keys: |
|
37
|
+
${{ runner.os }}-rye-
|
38
|
+
|
39
|
+
- name: Sync dependencies
|
40
|
+
run: rye sync
|
41
|
+
|
42
|
+
- name: Lint & Format (Ruff)
|
43
|
+
run: rye run ruff check .
|
44
|
+
|
45
|
+
- name: Authenticate to Google Cloud
|
46
|
+
uses: google-github-actions/auth@v2
|
47
|
+
with:
|
48
|
+
project_id: ${{ secrets.GOOGLE_PROJECT_ID }}
|
49
|
+
workload_identity_provider: ${{ secrets.GOOGLE_WORKLOAD_IDENTITY_PROVIDER }}
|
50
|
+
service_account: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
|
51
|
+
|
52
|
+
- name: Set up Docker to use gcloud as a credential helper
|
53
|
+
run: |
|
54
|
+
gcloud auth configure-docker us-east1-docker.pkg.dev
|
55
|
+
|
56
|
+
- name: Build docker image
|
57
|
+
run: |
|
58
|
+
IMAGE_NAME="us-east1-docker.pkg.dev/airport-ci-service/airport-ci-service/python-airport-test-server"
|
59
|
+
rye build --wheel --clean
|
60
|
+
docker build -t $IMAGE_NAME:latest -t $IMAGE_NAME:${{ github.sha }} .
|
61
|
+
docker push $IMAGE_NAME:latest
|
62
|
+
docker push $IMAGE_NAME:${{ github.sha }}
|
63
|
+
|
64
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: query-farm-airport-test-server
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.1
|
4
4
|
Summary: An Apache Arrow Flight server that is used to test the Airport extension for DuckDB.
|
5
5
|
Project-URL: Repository, https://github.com/query-farm/python-airport-test-server.git
|
6
6
|
Project-URL: Issues, https://github.com/query-farm/python-airport-test-server/issues
|
query_farm_airport_test_server-0.1.1/database_library_0276f9bf-74b4-4746-9abb-07cc41629d7e.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_0f574b14-cf3a-4f6e-aa39-df4d4e6a962b.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_191ab8da-a63a-4890-9457-e1ed70ef1079.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_1bc128c1-a3eb-4c68-a824-329a523ba291.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_1c223378-5eff-4408-b1de-9d47721e1fee.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_1c81d309-74fd-44f1-b683-32eea8836f9f.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_23af9844-32d0-4e5c-8138-b61467814ce5.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_33d3c826-3ec4-4c50-922d-99faf6343b7e.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_35e40ae1-fe07-4118-9f4b-f7421f598ca1.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_379c4588-ec9a-4ca8-ad15-615d8fc795aa.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_44416da5-7e97-41b7-9687-782cabd54b6d.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_520884c3-b607-42db-b588-ebbc7d32b620.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_5370b6eb-c193-4153-a4da-b3e39ddc405d.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_556f2306-9214-4a56-a25a-b8829a817b74.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_5d5c1c87-2ef2-4f7a-a2c7-5ab0b8030786.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_5fe0a78c-e9f3-4aa4-8e98-bc31bdbb5422.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_64ff5398-0648-4464-a560-a3633fbc3bc6.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_694d189e-ceb3-4a02-9bca-0b6a269f2fc6.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_6a6e5877-407a-44de-bb18-36bdd591347f.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_6cc16d8d-d82e-47c2-9c8b-eee4b46e418f.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_70ed7556-ac78-43df-934f-770b067e3f90.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_71147360-57a9-47a3-8557-ddd7e0fa8019.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_72655563-36fb-409e-aecc-7557135c26ff.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_78fab7d3-f7d8-46e5-a595-181371ab98be.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_8ea06715-352c-437e-991d-3df69d45eede.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_908e4d8e-06c0-42ad-ba0c-bf596127c4ca.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_92d1baeb-6bc2-4fd1-9b24-835c40c967ff.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_9449e595-8484-4718-9695-5f96394ab445.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_9491f877-5699-4a0b-a422-0cd7046e5cd2.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_98ab84c5-1e9a-4b8c-b7a5-de2e2dddd28a.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_a3ba8bfc-d7b4-4efd-b87e-9cedc49044e7.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_acb65985-39cf-47bf-8e85-f0cfb4f95ced.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_b41d7c1a-031d-4330-8a63-5934ce495052.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_bcca97bf-178a-4085-8884-d93b4e3db7c5.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_bdfb2ad4-caf0-442c-9045-88fd6750d02e.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_bf18ad90-4fc2-4412-9ed5-14b4be72cdb9.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_c3709451-1b21-44a9-80bd-10bd0b9cec8d.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_c3b54080-ec57-47e2-a312-d24f428a577b.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_cdecd2ab-e9ac-4e82-9c92-287baeaba48f.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_d257d2fd-5fa7-4198-8c81-391153d70645.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_dacbeeec-8be6-49b7-a707-1f4ac7d3a8f6.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_dc041777-b25e-409c-ab5b-f317b4f5d706.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_de6893a1-569e-472e-bb74-ae6b33a68074.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_e0741ddb-b47e-4cd2-bae3-075be81d9c3e.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_ea650d75-4fe9-4192-b3b9-f4b0bc717617.pkl
ADDED
Binary file
|
query_farm_airport_test_server-0.1.1/database_library_fab7e1ae-dba1-4dec-b4e1-37112a36c555.pkl
ADDED
Binary file
|
@@ -0,0 +1,129 @@
|
|
1
|
+
diff --git a/pyproject.toml b/pyproject.toml
|
2
|
+
index c1f60f7..644fc97 100644
|
3
|
+
--- a/pyproject.toml
|
4
|
+
+++ b/pyproject.toml
|
5
|
+
@@ -9,7 +9,8 @@ dependencies = [
|
6
|
+
"pyarrow>=20.0.0",
|
7
|
+
"query-farm-flight-server",
|
8
|
+
"duckdb>=1.3.1",
|
9
|
+
- "query-farm-duckdb-json-serialization>=0.1.1"
|
10
|
+
+ "query-farm-duckdb-json-serialization>=0.1.1",
|
11
|
+
+ "dnspython[asyncio]>=2.7.0",
|
12
|
+
]
|
13
|
+
readme = "README.md"
|
14
|
+
requires-python = ">= 3.12"
|
15
|
+
diff --git a/requirements-dev.lock b/requirements-dev.lock
|
16
|
+
index d7f4bee..ccb6d9e 100644
|
17
|
+
--- a/requirements-dev.lock
|
18
|
+
+++ b/requirements-dev.lock
|
19
|
+
@@ -25,6 +25,8 @@ click==8.2.1
|
20
|
+
# via query-farm-flight-server
|
21
|
+
coverage==7.9.2
|
22
|
+
# via pytest-cov
|
23
|
+
+dnspython==2.7.0
|
24
|
+
+ # via query-farm-airport-test-server
|
25
|
+
duckdb==1.3.2
|
26
|
+
# via query-farm-airport-test-server
|
27
|
+
execnet==2.1.1
|
28
|
+
diff --git a/requirements.lock b/requirements.lock
|
29
|
+
index b9d8fbb..0bb5d38 100644
|
30
|
+
--- a/requirements.lock
|
31
|
+
+++ b/requirements.lock
|
32
|
+
@@ -23,6 +23,8 @@ certifi==2025.7.14
|
33
|
+
# via sentry-sdk
|
34
|
+
click==8.2.1
|
35
|
+
# via query-farm-flight-server
|
36
|
+
+dnspython==2.7.0
|
37
|
+
+ # via query-farm-airport-test-server
|
38
|
+
duckdb==1.3.2
|
39
|
+
# via query-farm-airport-test-server
|
40
|
+
fuzzywuzzy==0.18.0
|
41
|
+
diff --git a/src/query_farm_airport_test_server/database_impl.py b/src/query_farm_airport_test_server/database_impl.py
|
42
|
+
index e330cae..d30a295 100644
|
43
|
+
--- a/src/query_farm_airport_test_server/database_impl.py
|
44
|
+
+++ b/src/query_farm_airport_test_server/database_impl.py
|
45
|
+
@@ -7,6 +7,7 @@ from dataclasses import dataclass, field
|
46
|
+
from decimal import Decimal
|
47
|
+
from typing import Any, Literal, overload
|
48
|
+
|
49
|
+
+from duckdb import struct_type
|
50
|
+
import pyarrow as pa
|
51
|
+
import pyarrow.compute as pc
|
52
|
+
import pyarrow.flight as flight
|
53
|
+
@@ -810,9 +811,76 @@ def collatz_steps(n: int) -> list[int]:
|
54
|
+
return results
|
55
|
+
|
56
|
+
|
57
|
+
+import asyncio
|
58
|
+
+import dns.asyncresolver
|
59
|
+
+import dns.reversename
|
60
|
+
+import dns.rdatatype
|
61
|
+
+import pyarrow as pa
|
62
|
+
+
|
63
|
+
+
|
64
|
+
+async def get_soa_for_ip(resolver: dns.asyncresolver.Resolver, ip: str) -> dict[str, str | None]:
|
65
|
+
+ assert isinstance(ip, str)
|
66
|
+
+ print("doing reverse lookup for", ip)
|
67
|
+
+ try:
|
68
|
+
+ rev_name = dns.reversename.from_add
|
69
|
+
+
|
70
|
+
+ ress(ip)
|
71
|
+
+ labels = rev_name.labels
|
72
|
+
+
|
73
|
+
+ for i in range(len(labels) - 2): # Skip root
|
74
|
+
+ zone = dns.name.Name(labels[i:])
|
75
|
+
+ try:
|
76
|
+
+ response = await resolver.resolve(zone, dns.rdatatype.SOA)
|
77
|
+
+ for rdata in response:
|
78
|
+
+ return {"zone": str(zone), "soa_mname": str(rdata.mname)}
|
79
|
+
+ except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer, dns.resolver.LifetimeTimeout):
|
80
|
+
+ continue
|
81
|
+
+ except Exception as e:
|
82
|
+
+ return {"zone": None, "soa_mname": f"Error: {e}"}
|
83
|
+
+ except Exception as e:
|
84
|
+
+ return {"zone": None, "soa_mname": f"Error: {e}"}
|
85
|
+
+
|
86
|
+
+ return {"zone": None, "soa_mname": "No SOA found"}
|
87
|
+
+
|
88
|
+
+
|
89
|
+
+async def _get_reverse_soa(inputs: pa.Array) -> pa.Table:
|
90
|
+
+ resolver = dns.asyncresolver.Resolver()
|
91
|
+
+ tasks = [get_soa_for_ip(resolver, v["ip"]) for v in inputs.to_pylist()]
|
92
|
+
+ results = await asyncio.gather(*tasks)
|
93
|
+
+ struct_type = pa.struct([("zone", pa.string()), ("soa_mname", pa.string())])
|
94
|
+
+ return pa.array(results, type=struct_type)
|
95
|
+
+
|
96
|
+
+
|
97
|
+
+def get_reverse_soa(ip_array: pa.Array) -> pa.Array:
|
98
|
+
+ try:
|
99
|
+
+ results = asyncio.run(_get_reverse_soa(ip_array))
|
100
|
+
+ return results
|
101
|
+
+ except RuntimeError:
|
102
|
+
+ raise flight.FlightServerError(
|
103
|
+
+ "Failed to run async function get_reverse_soa. This may be due to running in a non-async context."
|
104
|
+
+ )
|
105
|
+
+
|
106
|
+
+
|
107
|
+
util_schema = SchemaCollection(
|
108
|
+
scalar_functions_by_name=CaseInsensitiveDict(
|
109
|
+
{
|
110
|
+
+ "soa_for_ip": ScalarFunction(
|
111
|
+
+ input_schema=pa.schema([pa.field("ip", pa.string())]),
|
112
|
+
+ output_schema=pa.schema(
|
113
|
+
+ [
|
114
|
+
+ pa.field(
|
115
|
+
+ "result",
|
116
|
+
+ pa.struct(
|
117
|
+
+ [
|
118
|
+
+ pa.field("zone", pa.string()),
|
119
|
+
+ pa.field("soa_mname", pa.string()),
|
120
|
+
+ ]
|
121
|
+
+ ),
|
122
|
+
+ ),
|
123
|
+
+ ]
|
124
|
+
+ ),
|
125
|
+
+ handler=get_reverse_soa,
|
126
|
+
+ ),
|
127
|
+
"test_uppercase": ScalarFunction(
|
128
|
+
input_schema=pa.schema([pa.field("a", pa.string())]),
|
129
|
+
output_schema=pa.schema([pa.field("result", pa.string())]),
|
{query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/pyproject.toml
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "query-farm-airport-test-server"
|
3
|
-
version = "0.1.
|
3
|
+
version = "0.1.1"
|
4
4
|
description = "An Apache Arrow Flight server that is used to test the Airport extension for DuckDB."
|
5
5
|
authors = [
|
6
6
|
{ name = "Rusty Conover", email = "rusty@query.farm" }
|
@@ -8,7 +8,6 @@ authors = [
|
|
8
8
|
dependencies = [
|
9
9
|
"pyarrow>=20.0.0",
|
10
10
|
"query-farm-flight-server",
|
11
|
-
# "query-farm-flight-server @ git+https://github.com/Query-farm/server_base.git@master",
|
12
11
|
"duckdb>=1.3.1",
|
13
12
|
"query-farm-duckdb-json-serialization>=0.1.1",
|
14
13
|
]
|
{query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/requirements-dev.lock
RENAMED
@@ -12,20 +12,20 @@
|
|
12
12
|
-e file:.
|
13
13
|
annotated-types==0.7.0
|
14
14
|
# via pydantic
|
15
|
-
boto3==1.39.
|
15
|
+
boto3==1.39.12
|
16
16
|
# via query-farm-flight-server
|
17
|
-
botocore==1.39.
|
17
|
+
botocore==1.39.12
|
18
18
|
# via boto3
|
19
19
|
# via s3transfer
|
20
20
|
cache3==0.4.3
|
21
21
|
# via query-farm-flight-server
|
22
|
-
certifi==2025.
|
22
|
+
certifi==2025.7.14
|
23
23
|
# via sentry-sdk
|
24
24
|
click==8.2.1
|
25
25
|
# via query-farm-flight-server
|
26
|
-
coverage==7.9.
|
26
|
+
coverage==7.9.2
|
27
27
|
# via pytest-cov
|
28
|
-
duckdb==1.3.
|
28
|
+
duckdb==1.3.2
|
29
29
|
# via query-farm-airport-test-server
|
30
30
|
execnet==2.1.1
|
31
31
|
# via pytest-xdist
|
@@ -42,11 +42,11 @@ levenshtein==0.27.1
|
|
42
42
|
# via python-levenshtein
|
43
43
|
msgpack==1.1.1
|
44
44
|
# via query-farm-flight-server
|
45
|
-
mypy==1.
|
45
|
+
mypy==1.17.0
|
46
46
|
# via pytest-mypy
|
47
47
|
mypy-boto3-dynamodb==1.39.0
|
48
48
|
# via query-farm-flight-server
|
49
|
-
mypy-boto3-s3==1.39.
|
49
|
+
mypy-boto3-s3==1.39.5
|
50
50
|
# via query-farm-flight-server
|
51
51
|
mypy-extensions==1.1.0
|
52
52
|
# via mypy
|
@@ -59,7 +59,7 @@ pluggy==1.6.0
|
|
59
59
|
# via pytest-cov
|
60
60
|
prettytable==3.16.0
|
61
61
|
# via query-farm-flight-server
|
62
|
-
pyarrow==
|
62
|
+
pyarrow==21.0.0
|
63
63
|
# via query-farm-airport-test-server
|
64
64
|
# via query-farm-flight-server
|
65
65
|
pydantic==2.11.7
|
@@ -79,21 +79,21 @@ pytest-cov==6.2.1
|
|
79
79
|
pytest-env==1.1.5
|
80
80
|
pytest-mypy==1.0.1
|
81
81
|
pytest-parallel==0.1.1
|
82
|
-
pytest-xdist==3.
|
82
|
+
pytest-xdist==3.8.0
|
83
83
|
python-dateutil==2.9.0.post0
|
84
84
|
# via botocore
|
85
85
|
python-levenshtein==0.27.1
|
86
86
|
# via query-farm-flight-server
|
87
|
-
query-farm-duckdb-json-serialization==0.1.
|
87
|
+
query-farm-duckdb-json-serialization==0.1.2
|
88
88
|
# via query-farm-airport-test-server
|
89
|
-
query-farm-flight-server==0.1.
|
89
|
+
query-farm-flight-server==0.1.8
|
90
90
|
# via query-farm-airport-test-server
|
91
91
|
rapidfuzz==3.13.0
|
92
92
|
# via levenshtein
|
93
93
|
ruff==0.11.2
|
94
|
-
s3transfer==0.13.
|
94
|
+
s3transfer==0.13.1
|
95
95
|
# via boto3
|
96
|
-
sentry-sdk==2.
|
96
|
+
sentry-sdk==2.33.2
|
97
97
|
# via query-farm-flight-server
|
98
98
|
six==1.17.0
|
99
99
|
# via python-dateutil
|
@@ -101,7 +101,7 @@ structlog==25.4.0
|
|
101
101
|
# via query-farm-flight-server
|
102
102
|
tblib==3.1.0
|
103
103
|
# via pytest-parallel
|
104
|
-
typing-extensions==4.14.
|
104
|
+
typing-extensions==4.14.1
|
105
105
|
# via mypy
|
106
106
|
# via pydantic
|
107
107
|
# via pydantic-core
|
{query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/requirements.lock
RENAMED
@@ -12,18 +12,18 @@
|
|
12
12
|
-e file:.
|
13
13
|
annotated-types==0.7.0
|
14
14
|
# via pydantic
|
15
|
-
boto3==1.39.
|
15
|
+
boto3==1.39.12
|
16
16
|
# via query-farm-flight-server
|
17
|
-
botocore==1.39.
|
17
|
+
botocore==1.39.12
|
18
18
|
# via boto3
|
19
19
|
# via s3transfer
|
20
20
|
cache3==0.4.3
|
21
21
|
# via query-farm-flight-server
|
22
|
-
certifi==2025.
|
22
|
+
certifi==2025.7.14
|
23
23
|
# via sentry-sdk
|
24
24
|
click==8.2.1
|
25
25
|
# via query-farm-flight-server
|
26
|
-
duckdb==1.3.
|
26
|
+
duckdb==1.3.2
|
27
27
|
# via query-farm-airport-test-server
|
28
28
|
fuzzywuzzy==0.18.0
|
29
29
|
# via query-farm-flight-server
|
@@ -36,11 +36,11 @@ msgpack==1.1.1
|
|
36
36
|
# via query-farm-flight-server
|
37
37
|
mypy-boto3-dynamodb==1.39.0
|
38
38
|
# via query-farm-flight-server
|
39
|
-
mypy-boto3-s3==1.39.
|
39
|
+
mypy-boto3-s3==1.39.5
|
40
40
|
# via query-farm-flight-server
|
41
41
|
prettytable==3.16.0
|
42
42
|
# via query-farm-flight-server
|
43
|
-
pyarrow==
|
43
|
+
pyarrow==21.0.0
|
44
44
|
# via query-farm-airport-test-server
|
45
45
|
# via query-farm-flight-server
|
46
46
|
pydantic==2.11.7
|
@@ -52,21 +52,21 @@ python-dateutil==2.9.0.post0
|
|
52
52
|
# via botocore
|
53
53
|
python-levenshtein==0.27.1
|
54
54
|
# via query-farm-flight-server
|
55
|
-
query-farm-duckdb-json-serialization==0.1.
|
55
|
+
query-farm-duckdb-json-serialization==0.1.2
|
56
56
|
# via query-farm-airport-test-server
|
57
|
-
query-farm-flight-server==0.1.
|
57
|
+
query-farm-flight-server==0.1.8
|
58
58
|
# via query-farm-airport-test-server
|
59
59
|
rapidfuzz==3.13.0
|
60
60
|
# via levenshtein
|
61
|
-
s3transfer==0.13.
|
61
|
+
s3transfer==0.13.1
|
62
62
|
# via boto3
|
63
|
-
sentry-sdk==2.
|
63
|
+
sentry-sdk==2.33.2
|
64
64
|
# via query-farm-flight-server
|
65
65
|
six==1.17.0
|
66
66
|
# via python-dateutil
|
67
67
|
structlog==25.4.0
|
68
68
|
# via query-farm-flight-server
|
69
|
-
typing-extensions==4.14.
|
69
|
+
typing-extensions==4.14.1
|
70
70
|
# via pydantic
|
71
71
|
# via pydantic-core
|
72
72
|
# via typing-inspection
|
@@ -2,16 +2,18 @@
|
|
2
2
|
# from a list of basic types.
|
3
3
|
|
4
4
|
import math
|
5
|
+
from collections.abc import Sequence
|
6
|
+
from typing import Any
|
5
7
|
|
6
8
|
|
7
|
-
def unescape_value(value):
|
9
|
+
def unescape_value(value: str) -> str:
|
8
10
|
"""Unescape the value for display."""
|
9
11
|
if value.startswith("'") and value.endswith("'"):
|
10
12
|
return value[1:-1].replace("''", "'") # Remove single quotes
|
11
13
|
return value
|
12
14
|
|
13
15
|
|
14
|
-
def parse_to_float(val):
|
16
|
+
def parse_to_float(val: str) -> float:
|
15
17
|
if isinstance(val, str):
|
16
18
|
v = val.replace("'", "") # Remove single quotes
|
17
19
|
try:
|
@@ -21,7 +23,7 @@ def parse_to_float(val):
|
|
21
23
|
return val # already a float
|
22
24
|
|
23
25
|
|
24
|
-
def sort_key(val):
|
26
|
+
def sort_key(val: str) -> tuple[int] | tuple[int, float]:
|
25
27
|
x = parse_to_float(val)
|
26
28
|
if math.isnan(x):
|
27
29
|
return (3,)
|
@@ -33,7 +35,7 @@ def sort_key(val):
|
|
33
35
|
return (1, x)
|
34
36
|
|
35
37
|
|
36
|
-
def custom_sorted(values):
|
38
|
+
def custom_sorted(values: Sequence[Any]) -> list[Any]:
|
37
39
|
if "'inf'" in values or "'-inf'" in values or "'nan'" in values:
|
38
40
|
# Sort using the custom key
|
39
41
|
return sorted(values, key=sort_key)
|
@@ -162,6 +164,8 @@ data = [
|
|
162
164
|
]
|
163
165
|
|
164
166
|
|
167
|
+
test_server_location = "grpc://"
|
168
|
+
|
165
169
|
for record in data:
|
166
170
|
with open(
|
167
171
|
f"/Users/rusty/Development/duckdb-arrow-flight-extension/test/sql/airport-test-types-{record['field_name']}.test",
|
@@ -179,19 +183,19 @@ require airport
|
|
179
183
|
statement ok
|
180
184
|
CREATE SECRET airport_testing (
|
181
185
|
type airport,
|
182
|
-
auth_token
|
183
|
-
scope 'grpc://
|
186
|
+
auth_token uuid(),
|
187
|
+
scope 'grpc+tls://airport-ci.query.farm/');
|
184
188
|
|
185
189
|
# Reset the test server
|
186
190
|
statement ok
|
187
|
-
CALL airport_action('grpc://
|
191
|
+
CALL airport_action('grpc+tls://airport-ci.query.farm/', 'reset');
|
188
192
|
|
189
193
|
# Create the initial database
|
190
194
|
statement ok
|
191
|
-
CALL airport_action('grpc://
|
195
|
+
CALL airport_action('grpc+tls://airport-ci.query.farm/', 'create_database', 'test1');
|
192
196
|
|
193
197
|
statement ok
|
194
|
-
ATTACH 'test1' (TYPE AIRPORT, location 'grpc://
|
198
|
+
ATTACH 'test1' (TYPE AIRPORT, location 'grpc+tls://airport-ci.query.farm/');
|
195
199
|
""",
|
196
200
|
file=f,
|
197
201
|
)
|
@@ -241,3 +245,11 @@ insert into {table_name} values ({value});
|
|
241
245
|
print("----", file=f)
|
242
246
|
print(unescape_value(value), file=f)
|
243
247
|
print("", file=f)
|
248
|
+
|
249
|
+
print(
|
250
|
+
"""# Reset the test server
|
251
|
+
statement ok
|
252
|
+
CALL airport_action('grpc+tls://airport-ci.query.farm/', 'reset');
|
253
|
+
""",
|
254
|
+
file=f,
|
255
|
+
)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
--install airport from community;
|
2
|
+
--load airport;
|
3
|
+
|
4
|
+
CREATE SECRET airport_testing (
|
5
|
+
type airport,
|
6
|
+
auth_token uuid(),
|
7
|
+
scope 'grpc://localhost:50003');
|
8
|
+
|
9
|
+
CALL airport_action('grpc://localhost:50003', 'create_database', 'test1');
|
10
|
+
|
11
|
+
ATTACH 'test1' (TYPE AIRPORT, location 'grpc://localhost:50003');
|
12
|
+
--create table small_numbers (n bigint);
|
13
|
+
--INSERT INTO small_numbers (select * as n from generate_series(1, 900000000));
|
14
|
+
explain analyze select sum(test1.utils.test_add(n, n)) from small_numbers;
|
15
|
+
|
16
|
+
--explain analyze select n, length(test1.utils.collatz_sequence(n)) from small_numbers order by 2 desc;
|
17
|
+
|
18
|
+
-- select test1.utils.soa_for_ip('8.8.8.8');
|
19
|
+
|
20
|
+
-- select test1.utils.soa_for_ip('1.1.1.1');
|
21
|
+
-- select test1.utils.soa_for_ip('153.90.3.216');
|
22
|
+
|
23
|
+
-- create table addresses as (
|
24
|
+
-- with values as (
|
25
|
+
-- select * as n from generate_series(1, 252)
|
26
|
+
-- )
|
27
|
+
-- select v1.n || '.' || v2.n || '.1.1' as ip from values as v1, values as v2 order by random());
|
28
|
+
|
29
|
+
|
30
|
+
-- select ip, test1.utils.soa_for_ip(ip) from addresses limit 100;
|