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.
Files changed (67) hide show
  1. query_farm_airport_test_server-0.1.1/.github/workflows/ci.yml +64 -0
  2. query_farm_airport_test_server-0.1.1/Dockerfile +9 -0
  3. {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/PKG-INFO +1 -1
  4. query_farm_airport_test_server-0.1.1/database_library_0276f9bf-74b4-4746-9abb-07cc41629d7e.pkl +0 -0
  5. query_farm_airport_test_server-0.1.1/database_library_0f574b14-cf3a-4f6e-aa39-df4d4e6a962b.pkl +0 -0
  6. query_farm_airport_test_server-0.1.1/database_library_191ab8da-a63a-4890-9457-e1ed70ef1079.pkl +0 -0
  7. query_farm_airport_test_server-0.1.1/database_library_1bc128c1-a3eb-4c68-a824-329a523ba291.pkl +0 -0
  8. query_farm_airport_test_server-0.1.1/database_library_1c223378-5eff-4408-b1de-9d47721e1fee.pkl +0 -0
  9. query_farm_airport_test_server-0.1.1/database_library_1c81d309-74fd-44f1-b683-32eea8836f9f.pkl +0 -0
  10. query_farm_airport_test_server-0.1.1/database_library_23af9844-32d0-4e5c-8138-b61467814ce5.pkl +0 -0
  11. query_farm_airport_test_server-0.1.1/database_library_33d3c826-3ec4-4c50-922d-99faf6343b7e.pkl +0 -0
  12. query_farm_airport_test_server-0.1.1/database_library_35e40ae1-fe07-4118-9f4b-f7421f598ca1.pkl +0 -0
  13. query_farm_airport_test_server-0.1.1/database_library_379c4588-ec9a-4ca8-ad15-615d8fc795aa.pkl +0 -0
  14. query_farm_airport_test_server-0.1.1/database_library_44416da5-7e97-41b7-9687-782cabd54b6d.pkl +0 -0
  15. query_farm_airport_test_server-0.1.1/database_library_520884c3-b607-42db-b588-ebbc7d32b620.pkl +0 -0
  16. query_farm_airport_test_server-0.1.1/database_library_5370b6eb-c193-4153-a4da-b3e39ddc405d.pkl +0 -0
  17. query_farm_airport_test_server-0.1.1/database_library_556f2306-9214-4a56-a25a-b8829a817b74.pkl +0 -0
  18. query_farm_airport_test_server-0.1.1/database_library_5d5c1c87-2ef2-4f7a-a2c7-5ab0b8030786.pkl +0 -0
  19. query_farm_airport_test_server-0.1.1/database_library_5fe0a78c-e9f3-4aa4-8e98-bc31bdbb5422.pkl +0 -0
  20. query_farm_airport_test_server-0.1.1/database_library_64ff5398-0648-4464-a560-a3633fbc3bc6.pkl +0 -0
  21. query_farm_airport_test_server-0.1.1/database_library_694d189e-ceb3-4a02-9bca-0b6a269f2fc6.pkl +0 -0
  22. query_farm_airport_test_server-0.1.1/database_library_6a6e5877-407a-44de-bb18-36bdd591347f.pkl +0 -0
  23. query_farm_airport_test_server-0.1.1/database_library_6cc16d8d-d82e-47c2-9c8b-eee4b46e418f.pkl +0 -0
  24. query_farm_airport_test_server-0.1.1/database_library_70ed7556-ac78-43df-934f-770b067e3f90.pkl +0 -0
  25. query_farm_airport_test_server-0.1.1/database_library_71147360-57a9-47a3-8557-ddd7e0fa8019.pkl +0 -0
  26. query_farm_airport_test_server-0.1.1/database_library_72655563-36fb-409e-aecc-7557135c26ff.pkl +0 -0
  27. query_farm_airport_test_server-0.1.1/database_library_78fab7d3-f7d8-46e5-a595-181371ab98be.pkl +0 -0
  28. query_farm_airport_test_server-0.1.1/database_library_8ea06715-352c-437e-991d-3df69d45eede.pkl +0 -0
  29. query_farm_airport_test_server-0.1.1/database_library_908e4d8e-06c0-42ad-ba0c-bf596127c4ca.pkl +0 -0
  30. query_farm_airport_test_server-0.1.1/database_library_92d1baeb-6bc2-4fd1-9b24-835c40c967ff.pkl +0 -0
  31. query_farm_airport_test_server-0.1.1/database_library_9449e595-8484-4718-9695-5f96394ab445.pkl +0 -0
  32. query_farm_airport_test_server-0.1.1/database_library_9491f877-5699-4a0b-a422-0cd7046e5cd2.pkl +0 -0
  33. query_farm_airport_test_server-0.1.1/database_library_98ab84c5-1e9a-4b8c-b7a5-de2e2dddd28a.pkl +0 -0
  34. query_farm_airport_test_server-0.1.1/database_library_a3ba8bfc-d7b4-4efd-b87e-9cedc49044e7.pkl +0 -0
  35. query_farm_airport_test_server-0.1.1/database_library_acb65985-39cf-47bf-8e85-f0cfb4f95ced.pkl +0 -0
  36. query_farm_airport_test_server-0.1.1/database_library_b41d7c1a-031d-4330-8a63-5934ce495052.pkl +0 -0
  37. query_farm_airport_test_server-0.1.1/database_library_bcca97bf-178a-4085-8884-d93b4e3db7c5.pkl +0 -0
  38. query_farm_airport_test_server-0.1.1/database_library_bdfb2ad4-caf0-442c-9045-88fd6750d02e.pkl +0 -0
  39. query_farm_airport_test_server-0.1.1/database_library_bf18ad90-4fc2-4412-9ed5-14b4be72cdb9.pkl +0 -0
  40. query_farm_airport_test_server-0.1.1/database_library_c3709451-1b21-44a9-80bd-10bd0b9cec8d.pkl +0 -0
  41. query_farm_airport_test_server-0.1.1/database_library_c3b54080-ec57-47e2-a312-d24f428a577b.pkl +0 -0
  42. query_farm_airport_test_server-0.1.1/database_library_cdecd2ab-e9ac-4e82-9c92-287baeaba48f.pkl +0 -0
  43. query_farm_airport_test_server-0.1.1/database_library_d257d2fd-5fa7-4198-8c81-391153d70645.pkl +0 -0
  44. query_farm_airport_test_server-0.1.1/database_library_dacbeeec-8be6-49b7-a707-1f4ac7d3a8f6.pkl +0 -0
  45. query_farm_airport_test_server-0.1.1/database_library_dc041777-b25e-409c-ab5b-f317b4f5d706.pkl +0 -0
  46. query_farm_airport_test_server-0.1.1/database_library_de6893a1-569e-472e-bb74-ae6b33a68074.pkl +0 -0
  47. query_farm_airport_test_server-0.1.1/database_library_e0741ddb-b47e-4cd2-bae3-075be81d9c3e.pkl +0 -0
  48. query_farm_airport_test_server-0.1.1/database_library_ea650d75-4fe9-4192-b3b9-f4b0bc717617.pkl +0 -0
  49. query_farm_airport_test_server-0.1.1/database_library_fab7e1ae-dba1-4dec-b4e1-37112a36c555.pkl +0 -0
  50. query_farm_airport_test_server-0.1.1/dns.diff +129 -0
  51. {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/pyproject.toml +1 -2
  52. {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/requirements-dev.lock +14 -14
  53. {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/requirements.lock +11 -11
  54. {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/scripts/generate-types-tests.py +21 -9
  55. query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/collatz.sql +30 -0
  56. query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/database_impl.py +1122 -0
  57. query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/repro.py +17 -0
  58. query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/repro2.py +15 -0
  59. query_farm_airport_test_server-0.1.1/src/query_farm_airport_test_server/server.py +1234 -0
  60. query_farm_airport_test_server-0.1.0/src/query_farm_airport_test_server/server.py +0 -1799
  61. {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/.gitignore +0 -0
  62. {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/.python-version +0 -0
  63. {query_farm_airport_test_server-0.1.0 → query_farm_airport_test_server-0.1.1}/README.md +0 -0
  64. {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
  65. {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
  66. {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
  67. {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
+
@@ -0,0 +1,9 @@
1
+ FROM python:slim
2
+
3
+ EXPOSE 50003
4
+
5
+ FROM python:slim
6
+ RUN pip install uv
7
+ RUN --mount=source=dist,target=/dist uv pip install --system --no-cache /dist/*.whl
8
+ CMD airport_test_server --location=grpc://0.0.0.0:50003
9
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: query-farm-airport-test-server
3
- Version: 0.1.0
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
@@ -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())]),
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "query-farm-airport-test-server"
3
- version = "0.1.0"
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
  ]
@@ -12,20 +12,20 @@
12
12
  -e file:.
13
13
  annotated-types==0.7.0
14
14
  # via pydantic
15
- boto3==1.39.0
15
+ boto3==1.39.12
16
16
  # via query-farm-flight-server
17
- botocore==1.39.0
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.6.15
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.1
26
+ coverage==7.9.2
27
27
  # via pytest-cov
28
- duckdb==1.3.1
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.16.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.0
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==20.0.0
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.7.0
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.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.2
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.0
94
+ s3transfer==0.13.1
95
95
  # via boto3
96
- sentry-sdk==2.32.0
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.0
104
+ typing-extensions==4.14.1
105
105
  # via mypy
106
106
  # via pydantic
107
107
  # via pydantic-core
@@ -12,18 +12,18 @@
12
12
  -e file:.
13
13
  annotated-types==0.7.0
14
14
  # via pydantic
15
- boto3==1.39.0
15
+ boto3==1.39.12
16
16
  # via query-farm-flight-server
17
- botocore==1.39.0
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.6.15
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.1
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.0
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==20.0.0
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.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.2
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.0
61
+ s3transfer==0.13.1
62
62
  # via boto3
63
- sentry-sdk==2.32.0
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.0
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 'example_token',
183
- scope 'grpc://localhost:50003/');
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://localhost:50003/', 'reset');
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://localhost:50003/', 'create_database', 'test1');
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://localhost:50003/');
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;