stac-fastapi.core 3.2.4__tar.gz → 4.0.0__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 (32) hide show
  1. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/PKG-INFO +40 -23
  2. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/README.md +37 -19
  3. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/setup.py +14 -15
  4. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/core.py +173 -88
  5. stac_fastapi_core-4.0.0/stac_fastapi/core/database_logic.py +226 -0
  6. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/extensions/aggregation.py +8 -8
  7. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/extensions/query.py +3 -5
  8. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/models/links.py +1 -1
  9. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/utilities.py +29 -0
  10. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/version.py +1 -1
  11. {stac_fastapi.core-3.2.4/stac_fastapi.core.egg-info → stac_fastapi_core-4.0.0/stac_fastapi_core.egg-info}/PKG-INFO +40 -23
  12. {stac_fastapi.core-3.2.4/stac_fastapi.core.egg-info → stac_fastapi_core-4.0.0/stac_fastapi_core.egg-info}/SOURCES.txt +8 -7
  13. stac_fastapi_core-4.0.0/stac_fastapi_core.egg-info/requires.txt +13 -0
  14. stac_fastapi.core-3.2.4/stac_fastapi.core.egg-info/requires.txt +0 -13
  15. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/setup.cfg +0 -0
  16. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/__init__.py +0 -0
  17. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/base_database_logic.py +0 -0
  18. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/base_settings.py +0 -0
  19. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/basic_auth.py +0 -0
  20. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/datetime_utils.py +0 -0
  21. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/extensions/__init__.py +0 -0
  22. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/extensions/fields.py +0 -0
  23. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/extensions/filter.py +0 -0
  24. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/models/__init__.py +0 -0
  25. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/models/search.py +0 -0
  26. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/rate_limit.py +0 -0
  27. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/route_dependencies.py +0 -0
  28. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/serializers.py +0 -0
  29. {stac_fastapi.core-3.2.4 → stac_fastapi_core-4.0.0}/stac_fastapi/core/session.py +0 -0
  30. {stac_fastapi.core-3.2.4/stac_fastapi.core.egg-info → stac_fastapi_core-4.0.0/stac_fastapi_core.egg-info}/dependency_links.txt +0 -0
  31. {stac_fastapi.core-3.2.4/stac_fastapi.core.egg-info → stac_fastapi_core-4.0.0/stac_fastapi_core.egg-info}/not-zip-safe +0 -0
  32. {stac_fastapi.core-3.2.4/stac_fastapi.core.egg-info → stac_fastapi_core-4.0.0/stac_fastapi_core.egg-info}/top_level.txt +0 -0
@@ -1,20 +1,19 @@
1
1
  Metadata-Version: 2.1
2
- Name: stac_fastapi.core
3
- Version: 3.2.4
2
+ Name: stac_fastapi_core
3
+ Version: 4.0.0
4
4
  Summary: Core library for the Elasticsearch and Opensearch stac-fastapi backends.
5
5
  Home-page: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch
6
6
  License: MIT
7
7
  Classifier: Intended Audience :: Developers
8
8
  Classifier: Intended Audience :: Information Technology
9
9
  Classifier: Intended Audience :: Science/Research
10
- Classifier: Programming Language :: Python :: 3.8
11
10
  Classifier: Programming Language :: Python :: 3.9
12
11
  Classifier: Programming Language :: Python :: 3.10
13
12
  Classifier: Programming Language :: Python :: 3.11
14
13
  Classifier: Programming Language :: Python :: 3.12
15
14
  Classifier: Programming Language :: Python :: 3.13
16
15
  Classifier: License :: OSI Approved :: MIT License
17
- Requires-Python: >=3.8
16
+ Requires-Python: >=3.9
18
17
  Description-Content-Type: text/markdown
19
18
 
20
19
  # stac-fastapi-elasticsearch-opensearch (sfeos)
@@ -28,7 +27,7 @@ Description-Content-Type: text/markdown
28
27
  </p>
29
28
 
30
29
 
31
- [![PyPI version](https://badge.fury.io/py/stac-fastapi.elasticsearch.svg)](https://badge.fury.io/py/stac-fastapi.elasticsearch)
30
+ [![PyPI version](https://badge.fury.io/py/stac-fastapi-elasticsearch.svg)](https://badge.fury.io/py/stac-fastapi-elasticsearch) [![PyPI version](https://badge.fury.io/py/stac-fastapi-opensearch.svg)](https://badge.fury.io/py/stac-fastapi-opensearch)
32
31
  [![Join the chat at https://gitter.im/stac-fastapi-elasticsearch/community](https://badges.gitter.im/stac-fastapi-elasticsearch/community.svg)](https://gitter.im/stac-fastapi-elasticsearch/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
33
32
 
34
33
 
@@ -45,23 +44,39 @@ Description-Content-Type: text/markdown
45
44
 
46
45
  - Our Api core library can be used to create custom backends. See [stac-fastapi-mongo](https://github.com/Healy-Hyperspatial/stac-fastapi-mongo) for a working example.
47
46
  - Reach out on our [Gitter](https://app.gitter.im/#/room/#stac-fastapi-elasticsearch_community:gitter.im) channel or feel free to add to our [Discussions](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/discussions) page here on github.
48
- - There is [Postman](https://documenter.getpostman.com/view/12888943/2s8ZDSdRHA) documentation here for examples on how to run some of the API routes locally - after starting the elasticsearch backend via the docker-compose.yml file.
47
+ - There is [Postman](https://documenter.getpostman.com/view/12888943/2s8ZDSdRHA) documentation here for examples on how to run some of the API routes locally - after starting the elasticsearch backend via the compose.yml file.
49
48
  - The `/examples` folder shows an example of running stac-fastapi-elasticsearch from PyPI in docker without needing any code from the repository. There is also a Postman collection here that you can load into Postman for testing the API routes.
50
49
 
51
- - For changes, see the [Changelog](CHANGELOG.md)
52
- - We are always welcoming contributions. For the development notes: [Contributing](CONTRIBUTING.md)
50
+
51
+ ### Performance Note
52
+
53
+ The `enable_direct_response` option is provided by the stac-fastapi core library (introduced in stac-fastapi 5.2.0) and is available in this project starting from v4.0.0.
54
+
55
+ **You can now control this setting via the `ENABLE_DIRECT_RESPONSE` environment variable.**
56
+
57
+ When enabled (`ENABLE_DIRECT_RESPONSE=true`), endpoints return Starlette Response objects directly, bypassing FastAPI's default serialization for improved performance. **However, all FastAPI dependencies (including authentication, custom status codes, and validation) are disabled for all routes.**
58
+
59
+ This mode is best suited for public or read-only APIs where authentication and custom logic are not required. Default is `false` for safety.
60
+
61
+ See: [issue #347](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/issues/347)
53
62
 
54
63
 
55
64
  ### To install from PyPI:
56
65
 
57
- ```shell
58
- pip install stac_fastapi.elasticsearch
59
- ```
60
- or
61
- ```
62
- pip install stac_fastapi.opensearch
66
+ ```bash
67
+ # For versions 4.0.0a1 and newer (PEP 625 compliant naming):
68
+ pip install stac-fastapi-elasticsearch # Elasticsearch backend
69
+ pip install stac-fastapi-opensearch # Opensearch backend
70
+ pip install stac-fastapi-core # Core library
71
+
72
+ # For versions 4.0.0a0 and older:
73
+ pip install stac-fastapi.elasticsearch # Elasticsearch backend
74
+ pip install stac-fastapi.opensearch # Opensearch backend
75
+ pip install stac-fastapi.core # Core library
63
76
  ```
64
77
 
78
+ > **Important Note:** Starting with version 4.0.0a1, package names have changed from using periods (e.g., `stac-fastapi.core`) to using hyphens (e.g., `stac-fastapi-core`) to comply with PEP 625. The internal package structure uses underscores, but users should install with hyphens as shown above. Please update your requirements files accordingly.
79
+
65
80
  ### To install and run via pre-built Docker Images
66
81
 
67
82
  We provide ready-to-use Docker images through GitHub Container Registry ([ElasticSearch](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pkgs/container/stac-fastapi-es) and [OpenSearch](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pkgs/container/stac-fastapi-os) backends). You can easily pull and run these images:
@@ -76,19 +91,20 @@ docker pull ghcr.io/stac-utils/stac-fastapi-os:latest
76
91
 
77
92
  ## Run Elasticsearch API backend on localhost:8080
78
93
 
79
- You need to ensure [**Docker Compose**](https://docs.docker.com/compose/install/) or [**Podman Compose**](https://podman-desktop.io/docs/compose) installed and running on your machine. In the follwoing command instead of `docker-compose` you can use `podman-compose` as well.
94
+ You need to ensure [**Docker Compose**](https://docs.docker.com/compose/install/) or [**Podman Compose**](https://podman-desktop.io/docs/compose) installed and running on your machine. In the following command instead of `docker compose` you can use `podman-compose` as well.
80
95
 
81
96
  ```shell
82
- docker-compose up elasticsearch app-elasticsearch
97
+ docker compose up elasticsearch app-elasticsearch
83
98
  ```
84
99
 
85
- By default, docker-compose uses Elasticsearch 8.x and OpenSearch 2.11.1.
100
+ By default, Docker Compose uses Elasticsearch 8.x and OpenSearch 2.11.1.
86
101
  If you wish to use a different version, put the following in a
87
- file named `.env` in the same directory you run docker-compose from:
102
+ file named `.env` in the same directory you run Docker Compose from:
88
103
 
89
104
  ```shell
90
- ELASTICSEARCH_VERSION=7.17.1
91
- OPENSEARCH_VERSION=2.11.0
105
+ ELASTICSEARCH_VERSION=8.11.0
106
+ OPENSEARCH_VERSION=2.11.1
107
+ ENABLE_DIRECT_RESPONSE=false
92
108
  ```
93
109
  The most recent Elasticsearch 7.x versions should also work. See the [opensearch-py docs](https://github.com/opensearch-project/opensearch-py/blob/main/COMPATIBILITY.md) for compatibility information.
94
110
 
@@ -113,8 +129,9 @@ You can customize additional settings in your `.env` file:
113
129
  | `RELOAD` | Enable auto-reload for development. | `true` | Optional |
114
130
  | `STAC_FASTAPI_RATE_LIMIT` | API rate limit per client. | `200/minute` | Optional |
115
131
  | `BACKEND` | Tests-related variable | `elasticsearch` or `opensearch` based on the backend | Optional |
116
- | `ELASTICSEARCH_VERSION` | ElasticSearch version | `7.17.1` | Optional |
117
- | `OPENSEARCH_VERSION` | OpenSearch version | `2.11.0` | Optional |
132
+ | `ELASTICSEARCH_VERSION` | Version of Elasticsearch to use. | `8.11.0` | Optional |
133
+ | `ENABLE_DIRECT_RESPONSE` | Enable direct response for maximum performance (disables all FastAPI dependencies, including authentication, custom status codes, and validation) | `false` | Optional |
134
+ | `OPENSEARCH_VERSION` | OpenSearch version | `2.11.1` | Optional |
118
135
 
119
136
  > [!NOTE]
120
137
  > The variables `ES_HOST`, `ES_PORT`, `ES_USE_SSL`, and `ES_VERIFY_CERTS` apply to both Elasticsearch and OpenSearch backends, so there is no need to rename the key names to `OS_` even if you're using OpenSearch.
@@ -184,7 +201,7 @@ These templates will be used implicitly when creating new Collection and Item in
184
201
  This section covers how to create a snapshot repository and then create and restore snapshots with this.
185
202
 
186
203
  Create a snapshot repository. This puts the files in the `elasticsearch/snapshots` in this git repo clone, as
187
- the elasticsearch.yml and docker-compose files create a mapping from that directory to
204
+ the elasticsearch.yml and compose files create a mapping from that directory to
188
205
  `/usr/share/elasticsearch/snapshots` within the Elasticsearch container and grant permissions on using it.
189
206
 
190
207
  ```shell
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
 
11
11
 
12
- [![PyPI version](https://badge.fury.io/py/stac-fastapi.elasticsearch.svg)](https://badge.fury.io/py/stac-fastapi.elasticsearch)
12
+ [![PyPI version](https://badge.fury.io/py/stac-fastapi-elasticsearch.svg)](https://badge.fury.io/py/stac-fastapi-elasticsearch) [![PyPI version](https://badge.fury.io/py/stac-fastapi-opensearch.svg)](https://badge.fury.io/py/stac-fastapi-opensearch)
13
13
  [![Join the chat at https://gitter.im/stac-fastapi-elasticsearch/community](https://badges.gitter.im/stac-fastapi-elasticsearch/community.svg)](https://gitter.im/stac-fastapi-elasticsearch/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
14
14
 
15
15
 
@@ -26,23 +26,39 @@
26
26
 
27
27
  - Our Api core library can be used to create custom backends. See [stac-fastapi-mongo](https://github.com/Healy-Hyperspatial/stac-fastapi-mongo) for a working example.
28
28
  - Reach out on our [Gitter](https://app.gitter.im/#/room/#stac-fastapi-elasticsearch_community:gitter.im) channel or feel free to add to our [Discussions](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/discussions) page here on github.
29
- - There is [Postman](https://documenter.getpostman.com/view/12888943/2s8ZDSdRHA) documentation here for examples on how to run some of the API routes locally - after starting the elasticsearch backend via the docker-compose.yml file.
29
+ - There is [Postman](https://documenter.getpostman.com/view/12888943/2s8ZDSdRHA) documentation here for examples on how to run some of the API routes locally - after starting the elasticsearch backend via the compose.yml file.
30
30
  - The `/examples` folder shows an example of running stac-fastapi-elasticsearch from PyPI in docker without needing any code from the repository. There is also a Postman collection here that you can load into Postman for testing the API routes.
31
31
 
32
- - For changes, see the [Changelog](CHANGELOG.md)
33
- - We are always welcoming contributions. For the development notes: [Contributing](CONTRIBUTING.md)
32
+
33
+ ### Performance Note
34
+
35
+ The `enable_direct_response` option is provided by the stac-fastapi core library (introduced in stac-fastapi 5.2.0) and is available in this project starting from v4.0.0.
36
+
37
+ **You can now control this setting via the `ENABLE_DIRECT_RESPONSE` environment variable.**
38
+
39
+ When enabled (`ENABLE_DIRECT_RESPONSE=true`), endpoints return Starlette Response objects directly, bypassing FastAPI's default serialization for improved performance. **However, all FastAPI dependencies (including authentication, custom status codes, and validation) are disabled for all routes.**
40
+
41
+ This mode is best suited for public or read-only APIs where authentication and custom logic are not required. Default is `false` for safety.
42
+
43
+ See: [issue #347](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/issues/347)
34
44
 
35
45
 
36
46
  ### To install from PyPI:
37
47
 
38
- ```shell
39
- pip install stac_fastapi.elasticsearch
40
- ```
41
- or
42
- ```
43
- pip install stac_fastapi.opensearch
48
+ ```bash
49
+ # For versions 4.0.0a1 and newer (PEP 625 compliant naming):
50
+ pip install stac-fastapi-elasticsearch # Elasticsearch backend
51
+ pip install stac-fastapi-opensearch # Opensearch backend
52
+ pip install stac-fastapi-core # Core library
53
+
54
+ # For versions 4.0.0a0 and older:
55
+ pip install stac-fastapi.elasticsearch # Elasticsearch backend
56
+ pip install stac-fastapi.opensearch # Opensearch backend
57
+ pip install stac-fastapi.core # Core library
44
58
  ```
45
59
 
60
+ > **Important Note:** Starting with version 4.0.0a1, package names have changed from using periods (e.g., `stac-fastapi.core`) to using hyphens (e.g., `stac-fastapi-core`) to comply with PEP 625. The internal package structure uses underscores, but users should install with hyphens as shown above. Please update your requirements files accordingly.
61
+
46
62
  ### To install and run via pre-built Docker Images
47
63
 
48
64
  We provide ready-to-use Docker images through GitHub Container Registry ([ElasticSearch](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pkgs/container/stac-fastapi-es) and [OpenSearch](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pkgs/container/stac-fastapi-os) backends). You can easily pull and run these images:
@@ -57,19 +73,20 @@ docker pull ghcr.io/stac-utils/stac-fastapi-os:latest
57
73
 
58
74
  ## Run Elasticsearch API backend on localhost:8080
59
75
 
60
- You need to ensure [**Docker Compose**](https://docs.docker.com/compose/install/) or [**Podman Compose**](https://podman-desktop.io/docs/compose) installed and running on your machine. In the follwoing command instead of `docker-compose` you can use `podman-compose` as well.
76
+ You need to ensure [**Docker Compose**](https://docs.docker.com/compose/install/) or [**Podman Compose**](https://podman-desktop.io/docs/compose) installed and running on your machine. In the following command instead of `docker compose` you can use `podman-compose` as well.
61
77
 
62
78
  ```shell
63
- docker-compose up elasticsearch app-elasticsearch
79
+ docker compose up elasticsearch app-elasticsearch
64
80
  ```
65
81
 
66
- By default, docker-compose uses Elasticsearch 8.x and OpenSearch 2.11.1.
82
+ By default, Docker Compose uses Elasticsearch 8.x and OpenSearch 2.11.1.
67
83
  If you wish to use a different version, put the following in a
68
- file named `.env` in the same directory you run docker-compose from:
84
+ file named `.env` in the same directory you run Docker Compose from:
69
85
 
70
86
  ```shell
71
- ELASTICSEARCH_VERSION=7.17.1
72
- OPENSEARCH_VERSION=2.11.0
87
+ ELASTICSEARCH_VERSION=8.11.0
88
+ OPENSEARCH_VERSION=2.11.1
89
+ ENABLE_DIRECT_RESPONSE=false
73
90
  ```
74
91
  The most recent Elasticsearch 7.x versions should also work. See the [opensearch-py docs](https://github.com/opensearch-project/opensearch-py/blob/main/COMPATIBILITY.md) for compatibility information.
75
92
 
@@ -94,8 +111,9 @@ You can customize additional settings in your `.env` file:
94
111
  | `RELOAD` | Enable auto-reload for development. | `true` | Optional |
95
112
  | `STAC_FASTAPI_RATE_LIMIT` | API rate limit per client. | `200/minute` | Optional |
96
113
  | `BACKEND` | Tests-related variable | `elasticsearch` or `opensearch` based on the backend | Optional |
97
- | `ELASTICSEARCH_VERSION` | ElasticSearch version | `7.17.1` | Optional |
98
- | `OPENSEARCH_VERSION` | OpenSearch version | `2.11.0` | Optional |
114
+ | `ELASTICSEARCH_VERSION` | Version of Elasticsearch to use. | `8.11.0` | Optional |
115
+ | `ENABLE_DIRECT_RESPONSE` | Enable direct response for maximum performance (disables all FastAPI dependencies, including authentication, custom status codes, and validation) | `false` | Optional |
116
+ | `OPENSEARCH_VERSION` | OpenSearch version | `2.11.1` | Optional |
99
117
 
100
118
  > [!NOTE]
101
119
  > The variables `ES_HOST`, `ES_PORT`, `ES_USE_SSL`, and `ES_VERIFY_CERTS` apply to both Elasticsearch and OpenSearch backends, so there is no need to rename the key names to `OS_` even if you're using OpenSearch.
@@ -165,7 +183,7 @@ These templates will be used implicitly when creating new Collection and Item in
165
183
  This section covers how to create a snapshot repository and then create and restore snapshots with this.
166
184
 
167
185
  Create a snapshot repository. This puts the files in the `elasticsearch/snapshots` in this git repo clone, as
168
- the elasticsearch.yml and docker-compose files create a mapping from that directory to
186
+ the elasticsearch.yml and compose files create a mapping from that directory to
169
187
  `/usr/share/elasticsearch/snapshots` within the Elasticsearch container and grant permissions on using it.
170
188
 
171
189
  ```shell
@@ -6,32 +6,31 @@ with open("README.md") as f:
6
6
  desc = f.read()
7
7
 
8
8
  install_requires = [
9
- "fastapi-slim",
9
+ "fastapi~=0.109.0",
10
10
  "attrs>=23.2.0",
11
- "pydantic",
12
- "stac_pydantic>=3",
13
- "stac-fastapi.types==3.0.0",
14
- "stac-fastapi.api==3.0.0",
15
- "stac-fastapi.extensions==3.0.0",
16
- "orjson",
17
- "overrides",
18
- "geojson-pydantic",
19
- "pygeofilter==0.3.1",
20
- "jsonschema",
21
- "slowapi==0.1.9",
11
+ "pydantic>=2.4.1,<3.0.0",
12
+ "stac_pydantic~=3.1.0",
13
+ "stac-fastapi.api==5.2.0",
14
+ "stac-fastapi.extensions==5.2.0",
15
+ "stac-fastapi.types==5.2.0",
16
+ "orjson~=3.9.0",
17
+ "overrides~=7.4.0",
18
+ "geojson-pydantic~=1.0.0",
19
+ "pygeofilter~=0.3.1",
20
+ "jsonschema~=4.0.0",
21
+ "slowapi~=0.1.9",
22
22
  ]
23
23
 
24
24
  setup(
25
- name="stac_fastapi.core",
25
+ name="stac_fastapi_core",
26
26
  description="Core library for the Elasticsearch and Opensearch stac-fastapi backends.",
27
27
  long_description=desc,
28
28
  long_description_content_type="text/markdown",
29
- python_requires=">=3.8",
29
+ python_requires=">=3.9",
30
30
  classifiers=[
31
31
  "Intended Audience :: Developers",
32
32
  "Intended Audience :: Information Technology",
33
33
  "Intended Audience :: Science/Research",
34
- "Programming Language :: Python :: 3.8",
35
34
  "Programming Language :: Python :: 3.9",
36
35
  "Programming Language :: Python :: 3.10",
37
36
  "Programming Language :: Python :: 3.11",