[Git][debian-gis-team/python-geojson][upstream] New upstream version 3.2.0
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Sun Dec 22 03:38:16 GMT 2024
Bas Couwenberg pushed to branch upstream at Debian GIS Project / python-geojson
Commits:
f7b66c1c by Bas Couwenberg at 2024-12-22T04:29:15+01:00
New upstream version 3.2.0
- - - - -
17 changed files:
- .github/workflows/test.yml
- .pre-commit-config.yaml
- + .readthedocs.yaml
- CHANGELOG.rst
- README.rst
- − docs/index.rst
- + docs/source/conf.py
- + docs/source/index.rst
- + docs/source/theme.toml
- geojson/_version.py
- geojson/base.py
- geojson/codec.py
- geojson/geometry.py
- geojson/utils.py
- setup.py
- tests/__init__.py
- tox.ini
Changes:
=====================================
.github/workflows/test.yml
=====================================
@@ -11,7 +11,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- python-version: ['pypy3.9', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
+ python-version: ['pypy3.9', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
steps:
- uses: actions/checkout at v3
=====================================
.pre-commit-config.yaml
=====================================
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.4.0
+ rev: v5.0.0
hooks:
- id: check-case-conflict
- id: check-merge-conflict
@@ -9,12 +9,12 @@ repos:
- id: trailing-whitespace
- repo: https://github.com/tox-dev/tox-ini-fmt
- rev: 1.3.1
+ rev: 1.4.1
hooks:
- id: tox-ini-fmt
- repo: https://github.com/PyCQA/flake8
- rev: 6.1.0
+ rev: 7.1.1
hooks:
- id: flake8
=====================================
.readthedocs.yaml
=====================================
@@ -0,0 +1,18 @@
+# .readthedocs.yaml
+# Read the Docs configuration file
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+version: 2
+
+build:
+ os: ubuntu-22.04
+ tools:
+ python: "3.10"
+
+sphinx:
+ configuration: docs/source/conf.py
+
+python:
+ install:
+ - method: pip
+ path: .
=====================================
CHANGELOG.rst
=====================================
@@ -1,6 +1,21 @@
Changes
=======
+3.2.0
+----------
+
+- Add support for Python 3.13
+
+ - https://github.com/jazzband/geojson/pull/228
+
+- Code modernization
+
+ - https://github.com/jazzband/geojson/pull/218
+ - https://github.com/jazzband/geojson/pull/229
+
+- RtD bugfix
+
+ - https://github.com/jazzband/geojson/pull/227
3.1.0
----------
=====================================
README.rst
=====================================
@@ -10,6 +10,9 @@ geojson
.. image:: https://jazzband.co/static/img/badge.svg
:target: https://jazzband.co/
:alt: Jazzband
+.. image:: https://img.shields.io/pypi/dm/geojson.svg
+ :target: https://pypi.org/project/geojson/
+ :alt: PyPI
This Python library contains:
@@ -26,7 +29,7 @@ This Python library contains:
Installation
------------
-geojson is compatible with Python 3.7 - 3.12. The recommended way to install is via pip_:
+geojson is compatible with Python 3.7 - 3.13. The recommended way to install is via pip_:
.. code::
=====================================
docs/index.rst deleted
=====================================
@@ -1 +0,0 @@
-.. include:: ../README.rst
=====================================
docs/source/conf.py
=====================================
@@ -0,0 +1,29 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# For the full list of built-in configuration values, see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Project information -----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
+
+project = 'geojson'
+copyright = '2024, Sean Gillies, Matthew Russell, Corey Farwell, Blake Grotewold, \
+ Zsolt Ero, Sergey Romaov, Ray Riga'
+author = 'Sean Gillies, Matthew Russell, Corey Farwell, Blake Grotewold, Zsolt Ero, \
+ Sergey Romaov, Ray Riga'
+release = '3.1.0'
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+extensions = ['sphinxcontrib.jquery']
+
+templates_path = ['_templates']
+exclude_patterns = []
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_theme = 'sphinx_rtd_theme'
+html_theme_path = ['_theme']
+html_static_path = ['_static']
=====================================
docs/source/index.rst
=====================================
@@ -0,0 +1,10 @@
+.. geojson documentation master file, created by
+ sphinx-quickstart on Tue Aug 6 21:00:20 2024.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Contents:
+
+.. include:: ../../README.rst
=====================================
docs/source/theme.toml
=====================================
@@ -0,0 +1,3 @@
+[theme]
+name = "sphinx_rtd_theme"
+base_url = "https://readthedocs.org/projects/sphinx-rtd-theme/"
=====================================
geojson/_version.py
=====================================
@@ -1,2 +1,2 @@
-__version__ = "3.1.0"
+__version__ = "3.2.0"
__version_info__ = tuple(map(int, __version__.split(".")))
=====================================
geojson/base.py
=====================================
@@ -107,15 +107,15 @@ class GeoJSON(dict):
except UnicodeEncodeError:
# If the type contains non-ascii characters, we can assume
# it's not a valid GeoJSON type
- raise AttributeError(
- "{0} is not a GeoJSON type").format(type_)
+ raise AttributeError(f"{type_} is not a GeoJSON type")
geojson_factory = getattr(geojson.factory, type_)
instance = geojson_factory(**d)
except (AttributeError, KeyError) as invalid:
if strict:
- msg = "Cannot coerce %r into a valid GeoJSON structure: %s"
- msg %= (ob, invalid)
- raise ValueError(msg)
+ raise ValueError(
+ f"Cannot coerce {ob!r} into "
+ f"a valid GeoJSON structure: {invalid}"
+ )
instance = ob
return instance
=====================================
geojson/codec.py
=====================================
@@ -19,7 +19,7 @@ class GeoJSONEncoder(json.JSONEncoder):
# Here the defaults are set to only permit valid JSON as per RFC 4267
def _enforce_strict_numbers(obj):
- raise ValueError("Number %r is not JSON compliant" % obj)
+ raise ValueError(f"Number {obj!r} is not JSON compliant")
def dump(obj, fp, cls=GeoJSONEncoder, allow_nan=False, **kwargs):
=====================================
geojson/geometry.py
=====================================
@@ -50,7 +50,7 @@ class Geometry(GeoJSON):
elif isinstance(coord, (Real, Decimal)):
new_coords.append(round(coord, precision))
else:
- raise ValueError("%r is not a JSON compliant number" % coord)
+ raise ValueError(f"{coord!r} is not a JSON compliant number")
return new_coords
=====================================
geojson/utils.py
=====================================
@@ -87,7 +87,7 @@ def map_tuples(func, obj):
elif obj['type'] in ['Feature', 'FeatureCollection', 'GeometryCollection']:
return map_geometries(lambda g: map_tuples(func, g), obj)
else:
- raise ValueError("Invalid geometry object %s" % repr(obj))
+ raise ValueError(f"Invalid geometry object {obj!r}")
return {'type': obj['type'], 'coordinates': coordinates}
@@ -125,7 +125,7 @@ def map_geometries(func, obj):
feats = [map_geometries(func, feat) for feat in obj['features']]
return {'type': obj['type'], 'features': feats}
else:
- raise ValueError("Invalid GeoJSON object %s" % repr(obj))
+ raise ValueError(f"Invalid GeoJSON object {obj!r}")
def generate_random(featureType, numberVertices=3,
@@ -152,79 +152,67 @@ def generate_random(featureType, numberVertices=3,
import random
import math
- lonMin = boundingBox[0]
- lonMax = boundingBox[2]
+ lon_min, lat_min, lon_max, lat_max = boundingBox
- def randomLon():
- return random.uniform(lonMin, lonMax)
+ def random_lon():
+ return random.uniform(lon_min, lon_max)
- latMin = boundingBox[1]
- latMax = boundingBox[3]
+ def random_lat():
+ return random.uniform(lat_min, lat_max)
- def randomLat():
- return random.uniform(latMin, latMax)
+ def create_point():
+ return Point((random_lon(), random_lat()))
- def createPoint():
- return Point((randomLon(), randomLat()))
+ def create_line():
+ return LineString([create_point() for _ in range(numberVertices)])
- def createLine():
- return LineString([createPoint() for unused in range(numberVertices)])
+ def create_poly():
+ ave_radius = 60
+ ctr_x = 0.1
+ ctr_y = 0.2
+ irregularity = clip(0.1, 0, 1) * math.tau / numberVertices
+ spikeyness = clip(0.5, 0, 1) * ave_radius
- def createPoly():
- aveRadius = 60
- ctrX = 0.1
- ctrY = 0.2
- irregularity = clip(0.1, 0, 1) * 2 * math.pi / numberVertices
- spikeyness = clip(0.5, 0, 1) * aveRadius
+ lower = (math.tau / numberVertices) - irregularity
+ upper = (math.tau / numberVertices) + irregularity
+ angle_steps = []
+ for _ in range(numberVertices):
+ angle_steps.append(random.uniform(lower, upper))
+ sum_angle = sum(angle_steps)
- angleSteps = []
- lower = (2 * math.pi / numberVertices) - irregularity
- upper = (2 * math.pi / numberVertices) + irregularity
- sum = 0
- for i in range(numberVertices):
- tmp = random.uniform(lower, upper)
- angleSteps.append(tmp)
- sum = sum + tmp
-
- k = sum / (2 * math.pi)
- for i in range(numberVertices):
- angleSteps[i] = angleSteps[i] / k
+ k = sum_angle / math.tau
+ angle_steps = [x / k for x in angle_steps]
points = []
- angle = random.uniform(0, 2 * math.pi)
-
- for i in range(numberVertices):
- r_i = clip(random.gauss(aveRadius, spikeyness), 0, 2 * aveRadius)
- x = ctrX + r_i * math.cos(angle)
- y = ctrY + r_i * math.sin(angle)
- x = (x + 180.0) * (abs(lonMin-lonMax) / 360.0) + lonMin
- y = (y + 90.0) * (abs(latMin-latMax) / 180.0) + latMin
- x = clip(x, lonMin, lonMax)
- y = clip(y, latMin, latMax)
+ angle = random.uniform(0, math.tau)
+
+ for angle_step in angle_steps:
+ r_i = clip(random.gauss(ave_radius, spikeyness), 0, 2 * ave_radius)
+ x = ctr_x + r_i * math.cos(angle)
+ y = ctr_y + r_i * math.sin(angle)
+ x = (x + 180.0) * (abs(lon_min - lon_max) / 360.0) + lon_min
+ y = (y + 90.0) * (abs(lat_min - lat_max) / 180.0) + lat_min
+ x = clip(x, lon_min, lon_max)
+ y = clip(y, lat_min, lat_max)
points.append((x, y))
- angle = angle + angleSteps[i]
+ angle += angle_step
- firstVal = points[0]
- points.append(firstVal)
+ points.append(points[0]) # append first point to the end
return Polygon([points])
- def clip(x, min, max):
- if min > max:
+ def clip(x, min_val, max_val):
+ if min_val > max_val:
return x
- elif x < min:
- return min
- elif x > max:
- return max
else:
- return x
+ return min(max(min_val, x), max_val)
if featureType == 'Point':
- return createPoint()
+ return create_point()
if featureType == 'LineString':
- return createLine()
+ return create_line()
if featureType == 'Polygon':
- return createPoly()
+ return create_poly()
raise ValueError(f"featureType: {featureType} is not supported.")
=====================================
setup.py
=====================================
@@ -17,8 +17,8 @@ else:
major_version, minor_version = sys.version_info[:2]
-if not (major_version == 3 and 7 <= minor_version <= 12):
- sys.stderr.write("Sorry, only Python 3.7 - 3.12 are "
+if not (major_version == 3 and 7 <= minor_version <= 13):
+ sys.stderr.write("Sorry, only Python 3.7 - 3.13 are "
"supported at this time.\n")
exit(1)
@@ -31,7 +31,7 @@ setup(
author="Sean Gillies",
author_email="sgillies at frii.com",
maintainer="Ray Riga",
- maintainer_email="ray at strongoutput.com",
+ maintainer_email="ray.maintainer at gmail.com",
url="https://github.com/jazzband/geojson",
long_description=readme_text,
packages=["geojson"],
@@ -53,6 +53,7 @@ setup(
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering :: GIS",
]
)
=====================================
tests/__init__.py
=====================================
@@ -7,6 +7,6 @@ optionflags = (doctest.REPORT_ONLY_FIRST_FAILURE |
doctest.ELLIPSIS)
_basedir = os.path.dirname(__file__)
-paths = glob.glob("%s/*.txt" % _basedir)
+paths = glob.glob(f"{_basedir}/*.txt")
test_suite = doctest.DocFileSuite(*paths, **dict(module_relative=False,
optionflags=optionflags))
=====================================
tox.ini
=====================================
@@ -2,7 +2,7 @@
requires =
tox>=4.2
env_list =
- py{py3, 312, 311, 310, 39, 38, 37}
+ py{py3, 313, 312, 311, 310, 39, 38, 37}
[testenv]
deps =
View it on GitLab: https://salsa.debian.org/debian-gis-team/python-geojson/-/commit/f7b66c1cc63622dec2f2a101731c265d0a86afac
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/python-geojson/-/commit/f7b66c1cc63622dec2f2a101731c265d0a86afac
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20241222/6d6b4bdb/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list