Skip to content

Commit

Permalink
Merge pull request #114 from OrdnanceSurvey/upgrade-packages
Browse files Browse the repository at this point in the history
v1.3.0 - Upgrading osdatahub to work with Python 3.12, 3.13.  Depreciating Python 3.7.
  • Loading branch information
jmbraybrook authored Nov 20, 2024
2 parents 72a9853 + 4559b3b commit be08705
Show file tree
Hide file tree
Showing 20 changed files with 184 additions and 153 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: [ "3.7", "3.8", "3.9", "3.10", "3.11" ]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13" ]

env:
## Environment variable
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## [1.3.0] - 2024/11/18
- Removing Support for Python 3.7
- Adding Support for Python 3.12, 3.13

- Resolved issues on installation on later python versions
- Updated Typeguard Version
- Updated Packages to latest versions
- Fixed typing on GeoJson Outputs -> Feature Collection to Dict.

## [1.2.11] - 2024/07/08
- Package Resupported - Supported under new team [jmbraybrook]

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ and will apply to all the osdatahub api requests.

# Contribute

This package is still under active developement and we welcome contributions from the community via issues and pull requests.
This package is still under active development and we welcome contributions from the community via issues and pull requests.

To install osdatahub, along with the tools you need to develop and run tests,
run the following in your environment:
Expand Down
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
author = "OS Rapid Prototyping Team"

# The full version, including alpha/beta/rc tags
release = "1.2.3"
release = "1.3.0"

# -- General configuration ---------------------------------------------------

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[build-system]
requires = ["setuptools>=65.5.1"]
requires = ["setuptools>=75.3.0"]
build-backend = "setuptools.build_meta"

21 changes: 10 additions & 11 deletions recipes/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

{% set name = "osdatahub" %}
{% set version = "1.2.3" %}
{% set version = "1.3.0" %}


package:
Expand All @@ -19,15 +19,14 @@ build:
requirements:
host:
- pip
- python >=3.7
- python >=3.8
run:
- geojson ==2.5.0
- python >=3.7
- requests ==2.25.0
- shapely ==1.8.0
- typeguard ==2.13.0
- tqdm ~=4.62.3

- geojson ~=3.1.0
- python >=3.8
- requests ~=2.32.3
- shapely ~=2.0.6
- typeguard ~=4.4.0
- tqdm ~=4.67.0
test:
imports:
- osdatahub
Expand All @@ -45,6 +44,6 @@ about:
dev_url: https://github.com/OrdnanceSurvey/osdatahub
extra:
recipe-maintainers:
- dchirst
- JEPooley
- FHunt-OS
- FHunt-OS
- jmbraybrook
14 changes: 8 additions & 6 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
geojson~=3.0.1
requests~=2.31.0
typeguard~=2.13.0
shapely~=2.0.0
tqdm~=4.65.0
setuptools~=67.7.2
geojson~=3.1.0
typeguard~=4.4.0
shapely~=2.0.6
tqdm~=4.67.0
setuptools>=75.3.0
requests~=2.32.3
urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability
zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability

21 changes: 12 additions & 9 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
[metadata]
name = osdatahub
version = 1.2.11
version = 1.3.0
author = OS Data Science
author_email = [email protected]
classifiers =
Natural Language :: English
Intended Audience :: Developers
Intended Audience :: Science/Research
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
Programming Language :: Python :: 3.12
Programming Language :: Python :: 3.13
Topic :: Utilities
Topic :: Scientific/Engineering :: GIS
description = osdatahub is Ordnance Survey's (OS) Python API wrapper, designed to make data from the OS Data Hub APIs readily accessible to developers.
Expand All @@ -33,13 +34,15 @@ url = https://github.com/OrdnanceSurvey/osdatahub
[options]
include_package_data = True
install_requires =
geojson~=3.0.1
requests~=2.31.0
typeguard~=2.13.0
shapely~=2.0.0
tqdm~=4.65.0
setuptools~=67.7.2
python_requires = >=3.7
geojson~=3.1.0
requests~=2.32.3
typeguard~=4.4.0
shapely~=2.0.6
tqdm~=4.67.0
setuptools>=75.3.0
urllib3>=2.2.2
zipp>=3.19.1
python_requires = >=3.8
package_dir=
=src
packages=find:
Expand Down
4 changes: 2 additions & 2 deletions src/osdatahub/DownloadsAPI/data_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ def product_list(self, version_id: str, return_downloadobj: bool = False) -> Uni
def download(self,
version_id: str,
output_dir: Union[str, Path] = ".",
file_name: str = None,
file_name: Union[str, None] = None,
overwrite: bool = False,
processes: int = None) -> list:
processes: Union[int, None] = None) -> list:
"""
Downloads Data Package files to your local machine
Expand Down
12 changes: 9 additions & 3 deletions src/osdatahub/DownloadsAPI/downloads_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ def __init__(self, url: str, file_name: str, size: int):
self.file_name = file_name
self.size = size

def download(self, output_dir: Union[str, Path], overwrite: bool = False, pbar: tqdm = None) -> str:
def download(self,
output_dir: Union[str, Path],
overwrite: bool = False,
pbar: Union[tqdm, None] = None) -> str:
"""
Downloads file to given directory
Expand Down Expand Up @@ -179,8 +182,11 @@ def product_list(self):
pass

@staticmethod
def _download(download_list: Union[list, _DownloadObj], output_dir: Union[str, Path], overwrite: bool = False,
download_multiple: bool = False, processes: int = None) -> list:
def _download(download_list: Union[list, _DownloadObj],
output_dir: Union[str, Path],
overwrite: bool = False,
download_multiple: bool = False,
processes: Union[int, None] = None) -> list:
"""
Downloads product/datapackage to the given directory. Can download a single format or can download multiple
formats in parallel
Expand Down
21 changes: 13 additions & 8 deletions src/osdatahub/DownloadsAPI/opendata.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ class OpenDataDownload(_DownloadsAPIBase):

# TODO: change name
@typechecked
def product_list(self, file_name: str = None, file_format: str = None, file_subformat: str = None,
area: str = None, return_downloadobj: bool = False) -> Union[list, dict]:
def product_list(self,
file_name: Union[str, None] = None,
file_format: Union[str, None] = None,
file_subformat: Union[str, None] = None,
area: Union[str, None] = None,
return_downloadobj: bool = False) -> Union[list, dict]:
"""
Returns a list of possible downloads for a specific OS OpenData Product based on given filters
Expand Down Expand Up @@ -60,14 +64,15 @@ def product_list(self, file_name: str = None, file_format: str = None, file_subf
else:
return response.json()

def download(self, output_dir: Union[str, Path] = ".",
file_name: str = None,
file_format: str = None,
file_subformat: str = None,
area: str = None,
def download(self,
output_dir: Union[str, Path] = ".",
file_name: Union[str, None] = None,
file_format: Union[str, None] = None,
file_subformat: Union[str, None] = None,
area: Union[str, None] = None,
download_multiple: bool = False,
overwrite: bool = False,
processes: int = None) -> list:
processes: Union[int, None] = None) -> list:
"""
Downloads Product files to your local machine
Expand Down
10 changes: 6 additions & 4 deletions src/osdatahub/FeaturesAPI/features_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import requests
from geojson import FeatureCollection
from typeguard import check_argument_types
from typeguard import typechecked

import osdatahub
from osdatahub.extent import Extent
Expand Down Expand Up @@ -82,6 +82,7 @@ def product(self, product_name: str):
def xml_filter(self):
return self.__construct_filter()

@typechecked
def query(self, limit: int = 100) -> FeatureCollection:
"""Run a query of the OS Features API
Expand All @@ -92,7 +93,7 @@ def query(self, limit: int = 100) -> FeatureCollection:
Returns:
FeatureCollection: The results of the query in GeoJSON format
"""
assert check_argument_types()

params = self.__params
data = GrowList()
n_required = min(limit, 100)
Expand Down Expand Up @@ -138,14 +139,15 @@ def __params(self) -> dict:
"typeName": self.product.name,
"filter": self.__construct_filter(),
}


@typechecked
def add_filters(self, *xml_filters: Filter) -> None:
"""Add XML filter strings to the final query
Args:
xml_filters (str): Valid OGC XML filter objects
"""
assert check_argument_types()

self.filters.extend(xml_filters)


Expand Down
26 changes: 12 additions & 14 deletions src/osdatahub/NGD/ngd_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@
from typing import Union

import requests
from geojson import Feature, FeatureCollection
from typeguard import check_argument_types
from typeguard import typechecked

import osdatahub
from osdatahub import Extent
from osdatahub.NGD.crs import get_crs


def _merge_geojsons(gj1: FeatureCollection, gj2: FeatureCollection) -> FeatureCollection:
def _merge_geojsons(gj1: Union[dict], gj2: Union[dict]) -> Union[dict]:
"""
Combines 2 geojsons from NGD api into a single valid geojson
Expand Down Expand Up @@ -84,16 +83,17 @@ def get_collections(cls) -> dict:
response = osdatahub.get(cls.__ENDPOINT, proxies=osdatahub.get_proxies())
response.raise_for_status()
return response.json()


@typechecked
def query(self,
extent: Extent = None,
crs: Union[str, int] = None,
start_datetime: datetime = None,
end_datetime: datetime = None,
cql_filter: str = None,
filter_crs: Union[str, int] = None,
extent: Union[Extent, None] = None,
crs: Union[str, int, None] = None,
start_datetime: Union[datetime, None] = None,
end_datetime: Union[datetime, None] = None,
cql_filter: Union[str, None] = None,
filter_crs: Union[str, int, None] = None,
max_results: int = 100,
offset: int = 0) -> FeatureCollection:
offset: int = 0) -> Union[dict]:
"""
Retrieves features from a Collection
Expand Down Expand Up @@ -123,7 +123,6 @@ def query(self,
FeatureCollection: The results of the query in GeoJSON format
"""

assert check_argument_types()
assert max_results > 0, f"Argument max_results must be greater than 0 but was {max_results}"
assert offset >= 0, f"Argument offset must be greater than 0 but was {offset}"
params = {}
Expand Down Expand Up @@ -183,7 +182,6 @@ def query(self,
raise e

resp_json = response.json()

data = _merge_geojsons(data, resp_json)

if resp_json["numberReturned"] < limit:
Expand All @@ -193,7 +191,7 @@ def query(self,

return data

def query_feature(self, feature_id: str, crs: Union[str, int] = None) -> Feature:
def query_feature(self, feature_id: str, crs: Union[str, int] = None) -> dict:
"""
Retrieves a single feature from a collection
Expand Down
Loading

0 comments on commit be08705

Please sign in to comment.