[Git][debian-gis-team/mapproxy][upstream] New upstream version 5.1.0+dfsg
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Tue Sep 30 14:26:54 BST 2025
Bas Couwenberg pushed to branch upstream at Debian GIS Project / mapproxy
Commits:
8ff9c20d by Bas Couwenberg at 2025-09-30T15:10:45+02:00
New upstream version 5.1.0+dfsg
- - - - -
20 changed files:
- + .github/workflows/docker-update.yml
- .github/workflows/dockerbuild.yml
- .github/workflows/ghpages.yml
- .github/workflows/lint.yml
- .github/workflows/release.yml
- .github/workflows/test.yml
- CHANGES.txt
- doc/sources.rst
- mapproxy/cache/mbtiles.py
- mapproxy/client/wms.py
- mapproxy/config/config-schema.json
- mapproxy/config/loader.py
- mapproxy/config/spec.py
- mapproxy/request/wms/__init__.py
- mapproxy/test/system/fixture/layer.yaml
- mapproxy/test/system/test_wms.py
- mapproxy/test/unit/test_conf_loader.py
- mapproxy/test/unit/test_conf_validator.py
- requirements-tests.txt
- setup.py
Changes:
=====================================
.github/workflows/docker-update.yml
=====================================
@@ -0,0 +1,137 @@
+name: Dependabot Dockerfile Update
+
+permissions:
+ packages: write
+ security-events: write
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - master
+ paths:
+ - 'Dockerfile'
+ - 'Dockerfile-alpine'
+
+jobs:
+ update-and-publish-ubuntu:
+ runs-on: ubuntu-latest
+
+ # Only run if the push was made by dependabot
+ if: github.actor == 'dependabot[bot]'
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout at v5
+ with:
+ fetch-depth: 0
+
+ - name: Get latest release tag
+ run: |
+ LATEST_TAG=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r '.tag_name')
+ echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV
+ echo "Latest release tag: $LATEST_TAG"
+
+ - name: Use the tag in subsequent steps
+ run: |
+ echo "Using tag: ${{ env.LATEST_TAG }}"
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action at v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action at v3
+
+ - name: Login to ghcr.io
+ uses: docker/login-action at v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Build and push base image
+ uses: docker/build-push-action at v6
+ with:
+ file: ./Dockerfile
+ push: true
+ target: base
+ tags: ${{ env.LATEST_TAG }}
+ platforms: linux/amd64,linux/arm64
+
+ - name: Build and push development image
+ uses: docker/build-push-action at v6
+ with:
+ file: ./Dockerfile
+ push: true
+ target: development
+ tags: ${{ env.LATEST_TAG }}-dev
+ platforms: linux/amd64,linux/arm64
+
+ - name: Build and push nginx image
+ uses: docker/build-push-action at v6
+ with:
+ file: ./Dockerfile
+ push: true
+ target: nginx
+ tags: ${{ env.LATEST_TAG }}-nginx
+ platforms: linux/amd64,linux/arm64
+
+ build-and-publish-alpine:
+ # Only run if the push was made by dependabot
+ if: github.actor == 'dependabot[bot]'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout at v5
+ with:
+ fetch-depth: 0
+
+ - name: Get latest release tag
+ run: |
+ LATEST_TAG=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r '.tag_name')
+ echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV
+ echo "Latest release tag: $LATEST_TAG"
+
+ - name: Use the tag in subsequent steps
+ run: |
+ echo "Using tag: ${{ env.LATEST_TAG }}"
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action at v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action at v3
+
+ - name: Login to ghcr.io
+ uses: docker/login-action at v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Build and push base alpine image
+ uses: docker/build-push-action at v6
+ with:
+ file: ./Dockerfile-alpine
+ push: true
+ target: base
+ tags: ${{ env.LATEST_TAG }}-alpine
+ platforms: linux/amd64,linux/arm64
+
+ - name: Build and push alpine development image
+ uses: docker/build-push-action at v6
+ with:
+ file: ./Dockerfile-alpine
+ push: true
+ target: development
+ tags: ${{ env.LATEST_TAG }}-alpine-dev
+ platforms: linux/amd64,linux/arm64
+
+ - name: Build and push alpine based nginx image
+ uses: docker/build-push-action at v6
+ with:
+ file: ./Dockerfile-alpine
+ push: true
+ target: nginx
+ tags: ${{ env.LATEST_TAG }}-alpine-nginx
+ platforms: linux/amd64,linux/arm64
=====================================
.github/workflows/dockerbuild.yml
=====================================
@@ -15,7 +15,7 @@ jobs:
version: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
steps:
- name: Checkout
- uses: actions/checkout at v4
+ uses: actions/checkout at v5
- name: Docker meta
id: meta
@@ -33,7 +33,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout at v4
+ uses: actions/checkout at v5
- name: Set up QEMU
uses: docker/setup-qemu-action at v3
@@ -80,7 +80,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout at v4
+ uses: actions/checkout at v5
- name: Set up QEMU
uses: docker/setup-qemu-action at v3
@@ -129,7 +129,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Run trivy
- uses: aquasecurity/trivy-action at 0.30.0
+ uses: aquasecurity/trivy-action at 0.33.1
with:
format: 'sarif'
ignore-unfixed: true
=====================================
.github/workflows/ghpages.yml
=====================================
@@ -14,7 +14,7 @@ jobs:
steps:
- name: Checkout sources
- uses: actions/checkout at v4
+ uses: actions/checkout at v5
- name: Install dependencies ⏬
run: pip install sphinx sphinx-book-theme sphinx-copybutton
=====================================
.github/workflows/lint.yml
=====================================
@@ -15,10 +15,10 @@ jobs:
steps:
- name: Checkout sources
- uses: actions/checkout at v4
+ uses: actions/checkout at v5
- name: Use python 3.12
- uses: actions/setup-python at v5
+ uses: actions/setup-python at v6
with:
python-version: 3.12
=====================================
.github/workflows/release.yml
=====================================
@@ -21,10 +21,10 @@ jobs:
sudo apt -y install --no-install-recommends python3-pil python3-yaml python3-pyproj libgeos-dev python3-lxml libgdal-dev python3-shapely libxml2-dev libxslt-dev
- name: Checkout
- uses: actions/checkout at v4
+ uses: actions/checkout at v5
- name: Setup python
- uses: actions/setup-python at v5
+ uses: actions/setup-python at v6
- name: Make wheel
run: |
=====================================
.github/workflows/test.yml
=====================================
@@ -29,7 +29,7 @@ jobs:
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
- pillow-version: ["11.2.1"]
+ pillow-version: ["11.3.0"]
include:
- python-version: "3.9"
pillow-version: "8.1.2"
@@ -49,10 +49,10 @@ jobs:
sudo apt install proj-bin libgeos-dev libgdal-dev libxslt-dev libxml2-dev build-essential libjpeg-dev zlib1g-dev libfreetype6-dev protobuf-compiler libprotoc-dev -y
- name: Checkout sources
- uses: actions/checkout at v4
+ uses: actions/checkout at v5
- name: Use python ${{ matrix.python-version }}
- uses: actions/setup-python at v5
+ uses: actions/setup-python at v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
=====================================
CHANGES.txt
=====================================
@@ -1,3 +1,22 @@
+5.1.0 2025-09-30
+~~~~~~~~~~~~~~~~
+
+Improvements:
+
+ - Added `query_layers` option to `wms_opts` to be able to configure the `QUERY_LAYERS` of the wms request
+ - Added workflow to republish docker images if the base image changed, i.e. for security updates
+
+Maintenance:
+
+ - Fixed some spelling and debug output
+ - Updated various dependencies
+
+Fixes:
+
+ - Fixes some errors in the json schema regarding `use_direct_level_from` and `use_direct_res_from`
+ - Fixes an error with merging resolutions of grids
+
+
5.0.0 2025-06-18
~~~~~~~~~~~~~~~~
=====================================
doc/sources.rst
=====================================
@@ -93,6 +93,9 @@ This option affects what request MapProxy sends to the source WMS server.
``featureinfo_out_format``
Output format returned by the XSLT script. By default MapProxy will use ``featureinfo_format``.
+``query_layers``
+ The ``QUERY_LAYERS`` for FeatureInfo requests. By default MapProxy will use the same as the LAYERS param.
+
.. versionadded:: 1.12.0
``featureinfo_out_format``
@@ -120,7 +123,7 @@ Disable this source in regular mode. If set to ``true``, this source will always
Limit the source to the given min and max resolution or scale. MapProxy will return a blank image for requests outside of these boundaries (``min_res`` is inclusive, ``max_res`` exclusive). You can use either the resolution or the scale values, missing values will be interpreted as `unlimited`. Resolutions should be in meters per pixel.
-The values will also apear in the capabilities documents (i.e. WMS ScaleHint and Min/MaxScaleDenominator). The boundaries will be regarded for each source, but the values in the capabilities might differ if you combine multiple sources or if the MapProxy layer already has a ``min/max_res`` configuration.
+The values will also appear in the capabilities documents (i.e. WMS ScaleHint and Min/MaxScaleDenominator). The boundaries will be regarded for each source, but the values in the capabilities might differ if you combine multiple sources or if the MapProxy layer already has a ``min/max_res`` configuration.
Please read :ref:`scale vs. resolution <scale_resolution>` for some notes on `scale`.
@@ -133,7 +136,7 @@ A list with SRSs that the WMS source supports. MapProxy will only query the sour
You don't need to configure this if you only use this WMS as a cache source and the WMS supports all SRS of the cache.
-If MapProxy needs to reproject and the source has multiple ``supported_srs``, then it will use the first projected SRS for requests in a projected SRS, or the first geographic SRS for requests in a geographic SRS. E.g when ``supported_srs`` is ``['EPSG:4326', 'EPSG:31467']`` caches with EPSG:3857 (projected, meter) will use EPSG:31467 (projected, meter) and not EPSG:4326 (geographic, lat/long).
+If MapProxy needs to reproject and the source has multiple ``supported_srs``, then it will use the first projected SRS for requests in a projected SRS, or the first geographic SRS for requests in a geographic SRS e.g. when ``supported_srs`` is ``['EPSG:4326', 'EPSG:31467']`` caches with EPSG:3857 (projected, meter) will use EPSG:31467 (projected, meter) and not EPSG:4326 (geographic, lat/long).
.. .. note:: For the configuration of SRS for MapProxy see `srs_configuration`_.
@@ -162,7 +165,7 @@ See :ref:`image_options` for other options.
``transparent_color_tolerance``
- Tolerance for the ``transparent_color`` substitution. The value defines the tolerance in each direction. E.g. a tolerance of 5 and a color value of 100 will convert colors in the range of 95 to 105.
+ Tolerance for the ``transparent_color`` substitution. The value defines the tolerance in each direction e.g. a tolerance of 5 and a color value of 100 will convert colors in the range of 95 to 105.
.. code-block:: yaml
@@ -250,7 +253,7 @@ You need to enable ``transparent`` for your source, if you use ``on_error`` resp
``authorize_stale``
- Set this to ``True`` if MapProxy should serve in priority stale tiles present in cache. If the specified source error occurs, MapProxy will serve a stale tile which is still in cache instead of the error reponse, even if the tile in cache should be refreshed according to refresh_before date. Otherwise (``False``) MapProxy will serve the unicolor error response defined by the error handler if the source is faulty and the tile is not in cache, or is stale.
+ Set this to ``True`` if MapProxy should serve in priority stale tiles present in cache. If the specified source error occurs, MapProxy will serve a stale tile which is still in cache instead of the error response, even if the tile in cache should be refreshed according to refresh_before date. Otherwise (``False``) MapProxy will serve the unicolor error response defined by the error handler if the source is faulty and the tile is not in cache, or is stale.
You need to enable ``transparent`` for your source, if you use ``on_error`` responses with transparency.
@@ -398,7 +401,7 @@ ImageServer example:
Tiles
"""""
-Use the type ``tile`` to request data from from existing tile servers like TileCache and GeoWebCache. You can also use this source cascade MapProxy installations.
+Use the type ``tile`` to request data from existing tile servers like TileCache and GeoWebCache. You can also use this source cascade MapProxy installations.
``url``
^^^^^^^
=====================================
mapproxy/cache/mbtiles.py
=====================================
@@ -117,7 +117,7 @@ class MBTilesCache(TileCacheBase):
if self.file_permissions:
permission = int(self.file_permissions, base=8)
- log.info("setting file permissions on MBTile file: ", permission)
+ log.info("setting file permissions on MBTile file: %s", permission)
os.chmod(self.mbtile_file, permission)
def update_metadata(self, name='', description='', version=1, overlay=True, format='png'):
=====================================
mapproxy/client/wms.py
=====================================
@@ -180,7 +180,8 @@ class WMSInfoClient(object):
req.params.pos = query.pos
if query.feature_count:
req.params['feature_count'] = query.feature_count
- req.params['query_layers'] = req.params['layers']
+ if 'query_layers' not in req.params:
+ req.params['query_layers'] = req.params['layers']
if 'info_format' not in req.params and query.info_format:
req.params['info_format'] = query.info_format
if not req.params.format:
=====================================
mapproxy/config/config-schema.json
=====================================
@@ -578,11 +578,11 @@
},
"use_direct_from_level": {
"description": "Requests below this level will not be stored",
- "type": "boolean"
+ "type": "integer"
},
"use_direct_from_res": {
"description": "Requests below this resolution will not be stored",
- "type": "boolean"
+ "type": "number"
},
"upscale_tiles": {
"description": "Upscale tiles by this many zoom levels if not available in cache",
@@ -674,8 +674,20 @@
"req": {
"title": "req",
"type": "object"
+ },
+ "wms_opts": {
+ "title": "wms_opts",
+ "type": "object",
+ "properties": {
+ "featureinfo": {
+ "type": "boolean"
+ },
+ "query_layers": {
+ "type": "string"
+ }
+ }
}
- },
+ },
"required": ["req"]
}
]
=====================================
mapproxy/config/loader.py
=====================================
@@ -17,6 +17,9 @@
Configuration loading and system initializing.
"""
from __future__ import division
+
+import json
+
from mapproxy.util.fs import find_exec
from mapproxy.util.yaml import load_yaml_file, YAMLError
from mapproxy.util.py import memoize
@@ -862,6 +865,8 @@ class WMSSourceConfiguration(SourceConfiguration):
version = wms_opts.get('version', '1.1.1')
if 'featureinfo_format' in wms_opts:
params['info_format'] = wms_opts['featureinfo_format']
+ if 'query_layers' in wms_opts:
+ params['query_layers'] = wms_opts['query_layers']
fi_request = create_request(self.conf['req'], params,
req_type='featureinfo', version=version,
abspath=self.context.globals.abspath)
@@ -2400,6 +2405,7 @@ def load_configuration(mapproxy_conf, seed=False, ignore_warnings=True, renderd=
try:
conf_dict = load_configuration_file([os.path.basename(mapproxy_conf)], conf_base_dir)
+ log.debug('Loaded configuration file', json.dumps(conf_dict, indent=2, sort_keys=True, default=str))
except YAMLError as ex:
raise ConfigurationError(ex)
errors, informal_only = validate_options(conf_dict)
@@ -2455,7 +2461,7 @@ def merge_dict(conf, base):
base[k] = merge_dict(v, base[k])
elif isinstance(base[k], list):
if v is not None:
- if k in ['bbox', 'tile_size', 'max_output_pixels', 'sources', 'grids']:
+ if k in ['bbox', 'tile_size', 'max_output_pixels', 'sources', 'grids', 'res']:
base[k] = v
elif k in ['layers']:
base[k] = merge_layers(v, base[k])
=====================================
mapproxy/config/spec.py
=====================================
@@ -515,6 +515,7 @@ mapproxy_yaml_spec = {
'featureinfo_format': str(),
'featureinfo_xslt': str(),
'featureinfo_out_format': str(),
+ 'query_layers': str(),
},
'image': combined(image_opts, {
'opacity': number(),
=====================================
mapproxy/request/wms/__init__.py
=====================================
@@ -779,6 +779,9 @@ def create_request(req_data, param, req_type='map', version='1.1.1', abspath=Non
if 'info_format' in param:
req_data['info_format'] = param['info_format']
+ if 'query_layers' in param:
+ req_data['query_layers'] = param['query_layers']
+
if 'transparent' in req_data:
# we don't want a boolean
req_data['transparent'] = str(req_data['transparent'])
=====================================
mapproxy/test/system/fixture/layer.yaml
=====================================
@@ -129,6 +129,9 @@ layers:
- name: wms_managed_cookies_cache
title: WMS with cookies management
sources: [wms_managed_cookies]
+ - name: wms_fi_ql_cache
+ title: WMS with query_layers source
+ sources: [wms_fi_ql]
caches:
wms_cache:
@@ -169,6 +172,8 @@ caches:
text: '@ Omniscale'
wms_managed_cookies_cache:
sources: [wms_managed_cookies]
+ wms_fi_ql_cache:
+ sources: [wms_fi_ql]
sources:
direct:
@@ -258,3 +263,11 @@ sources:
layers: layer1
http:
manage_cookies: True
+ wms_fi_ql:
+ type: wms
+ wms_opts:
+ featureinfo: True
+ query_layers: foo
+ req:
+ url: http://localhost:42423/service
+ layers: foo,bar
=====================================
mapproxy/test/system/test_wms.py
=====================================
@@ -183,7 +183,8 @@ class TestWMS111(SysTest):
layer_names = set(xml.xpath("//Layer/Layer/Name/text()"))
expected_names = {"direct_fwd_params", "direct", "wms_cache", "wms_cache_100", "wms_cache_130",
"wms_cache_transparent", "wms_merge", "tms_cache", "tms_fi_cache", "wms_cache_multi",
- "wms_cache_link_single", "wms_cache_110", "watermark_cache", "wms_managed_cookies_cache"}
+ "wms_cache_link_single", "wms_cache_110", "watermark_cache", "wms_managed_cookies_cache",
+ "wms_fi_ql_cache"}
assert layer_names == expected_names
assert set(xml.xpath("//Layer/Layer[3]/Abstract/text()")) == {"Some abstract"}
@@ -836,6 +837,24 @@ class TestWMS111(SysTest):
assert "tms_cache is not queryable" in xml.xpath("//ServiceException/text()")[0]
assert validate_with_dtd(xml, "wms/1.1.1/exception_1_1_1.dtd")
+ def test_get_featureinfo_query_layers(self, app):
+ expected_req = (
+ {
+ "path": r"/service?LAYERs=foo,bar&SERVICE=WMS&FORMAT=image%2Fpng"
+ "&REQUEST=GetFeatureInfo&HEIGHT=200&SRS=EPSG%3A900913"
+ "&VERSION=1.1.1&BBOX=1000.0,400.0,2000.0,1400.0&styles="
+ "&WIDTH=200&QUERY_LAYERS=foo&X=10&Y=20"
+ },
+ {"body": b"info", "headers": {"content-type": "text/plain"}},
+ )
+ with mock_httpd(("localhost", 42423), [expected_req]):
+ self.common_fi_req.params["layers"] = "wms_fi_ql_cache"
+ self.common_fi_req.params["query_layers"] = "wms_fi_ql_cache"
+ resp = app.get(self.common_fi_req)
+ assert resp.content_type == "text/plain"
+ assert resp.body == b"info"
+ assert resp.headers['Content-Type'] == 'text/plain; charset=utf-8'
+
class TestWMS110(SysTest):
config_file = "layer.yaml"
@@ -901,7 +920,8 @@ class TestWMS110(SysTest):
layer_names = set(xml.xpath("//Layer/Layer/Name/text()"))
expected_names = {"direct_fwd_params", "direct", "wms_cache", "wms_cache_100", "wms_cache_130",
"wms_cache_transparent", "wms_merge", "tms_cache", "tms_fi_cache", "wms_cache_multi",
- "wms_cache_link_single", "wms_cache_110", "watermark_cache", "wms_managed_cookies_cache"}
+ "wms_cache_link_single", "wms_cache_110", "watermark_cache", "wms_managed_cookies_cache",
+ "wms_fi_ql_cache"}
assert layer_names == expected_names
assert validate_with_dtd(xml, dtd_name="wms/1.1.0/capabilities_1_1_0.dtd")
@@ -1140,7 +1160,8 @@ class TestWMS100(SysTest):
layer_names = set(xml.xpath("//Layer/Layer/Name/text()"))
expected_names = {"direct_fwd_params", "direct", "wms_cache", "wms_cache_100", "wms_cache_130",
"wms_cache_transparent", "wms_merge", "tms_cache", "tms_fi_cache", "wms_cache_multi",
- "wms_cache_link_single", "wms_cache_110", "watermark_cache", "wms_managed_cookies_cache"}
+ "wms_cache_link_single", "wms_cache_110", "watermark_cache", "wms_managed_cookies_cache",
+ "wms_fi_ql_cache"}
assert layer_names == expected_names
# TODO srs
assert validate_with_dtd(xml, dtd_name="wms/1.0.0/capabilities_1_0_0.dtd")
@@ -1342,7 +1363,8 @@ class TestWMS130(SysTest):
)
expected_names = {"direct_fwd_params", "direct", "wms_cache", "wms_cache_100", "wms_cache_130",
"wms_cache_transparent", "wms_merge", "tms_cache", "tms_fi_cache", "wms_cache_multi",
- "wms_cache_link_single", "wms_cache_110", "watermark_cache", "wms_managed_cookies_cache"}
+ "wms_cache_link_single", "wms_cache_110", "watermark_cache", "wms_managed_cookies_cache",
+ "wms_fi_ql_cache"}
assert layer_names == expected_names
assert is_130_capa(xml)
=====================================
mapproxy/test/unit/test_conf_loader.py
=====================================
@@ -779,6 +779,9 @@ grids:
# ======= overwritten bbox:
bbox: [-180, 60, -100, 70]
+ grid_custom:
+ res: [4,2,1]
+
globals:
http:
client_timeout: 2
@@ -833,6 +836,9 @@ grids:
bbox: [-167, 53, -141, 67]
bbox_srs: 'EPSG:4326'
+ grid_custom:
+ res: [4,2,1]
+
globals:
http:
client_timeout: 3
@@ -883,6 +889,10 @@ base: [%s]
assert grid_alaska.conf['bbox_srs'] == 'EPSG:4326'
assert grid_alaska.conf['origin'] == 'sw'
+ grid_custom = config.grids['grid_custom']
+ assert grid_custom is not None
+ assert grid_custom.conf['res'] == [4, 2, 1]
+
wms = config.services.conf['wms']
assert wms is not None
assert wms['max_output_pixels'] == [4000, 4000]
=====================================
mapproxy/test/unit/test_conf_validator.py
=====================================
@@ -80,8 +80,13 @@ class TestValidator(object):
''')
errors = validate(conf)
- assert errors == [
- "[] is too short in root.layers[0].sources"
+ assert errors in [
+ [
+ "[] is too short in root.layers[0].sources"
+ ],
+ [
+ "[] should be non-empty in root.layers[0].sources"
+ ]
]
def test_missing_cache_source(self):
=====================================
requirements-tests.txt
=====================================
@@ -8,11 +8,11 @@ boto3==1.35.6
boto==2.49.0
botocore==1.35.6
certifi==2025.4.26
-cffi==1.17.1;
+cffi==2.0.0;
cfn-lint==0.80.3
chardet==5.2.0
cryptography==44.0.2
-decorator==5.1.1
+decorator==5.2.1
docker==7.1.0
docutils==0.20.1;python_version<"3.9"
docutils==0.21.2;python_version>="3.9"
@@ -24,7 +24,7 @@ Jinja2==2.11.3
jmespath==1.0.1
jsondiff==1.3.1
jsonpatch==1.33
-jsonpickle==3.0.2
+jsonpickle==4.1.1
jsonpointer==2.4
jsonschema==4.17;python_version<"3.10"
jsonschema==4.20;python_version>="3.10"
@@ -38,7 +38,7 @@ networkx==3.1;python_version<"3.10"
networkx==3.4.2;python_version>="3.10"
numpy==1.26.4
packaging==24.2
-Pillow==11.2.1 # This version is overwritten in the test workflow, please adjust there as well
+Pillow==11.3.0 # This version is overwritten in the test workflow, please adjust there as well
pluggy==1.5.0
py==1.11.0
pyasn1==0.5.1
@@ -47,19 +47,19 @@ pyparsing==3.2.3
pyproj==3.6.1;python_version<"3.10"
pyproj==3.7.1;python_version>="3.10"
pyrsistent==0.20.0
-pytest-rerunfailures==13.0
+pytest-rerunfailures==16.0.1
pytest==8.3.2
python-dateutil==2.9.0.post0
-python-jose==3.3.0
+python-jose==3.5.0
pytz==2024.2
redis==5.0.1
-requests==2.32.3
-responses==0.25.3
+requests==2.32.5
+responses==0.25.8
rsa==4.9.1
s3transfer==0.10.2
Shapely==2.0.1;python_version<"3.10"
Shapely==2.1.0;python_version>="3.10"
-soupsieve==2.6
+soupsieve==2.8
sshpubkeys==3.3.1
toml==0.10.2
urllib3==1.26.20
@@ -70,4 +70,4 @@ websocket-client==1.8.0
WebTest==3.0.0
wrapt==1.17.2
xmltodict==0.13.0
-zipp==3.20.1
+zipp==3.23.0
=====================================
setup.py
=====================================
@@ -41,7 +41,7 @@ def long_description(changelog_releases=10):
setup(
name='MapProxy',
- version="5.0.0",
+ version="5.1.0",
description='An accelerating proxy for tile and web map services',
long_description=long_description(7),
long_description_content_type='text/x-rst',
View it on GitLab: https://salsa.debian.org/debian-gis-team/mapproxy/-/commit/8ff9c20d8a7a6cc4851728c0a39cd0e2ec30b6b7
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/mapproxy/-/commit/8ff9c20d8a7a6cc4851728c0a39cd0e2ec30b6b7
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/20250930/4db973a3/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list