MapProxy 1.16.1__py3-none-any.whl
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.
- mapproxy/__init__.py +0 -0
- mapproxy/cache/__init__.py +36 -0
- mapproxy/cache/azureblob.py +145 -0
- mapproxy/cache/base.py +111 -0
- mapproxy/cache/compact.py +664 -0
- mapproxy/cache/couchdb.py +295 -0
- mapproxy/cache/dummy.py +34 -0
- mapproxy/cache/file.py +185 -0
- mapproxy/cache/geopackage.py +609 -0
- mapproxy/cache/legend.py +83 -0
- mapproxy/cache/mbtiles.py +392 -0
- mapproxy/cache/meta.py +78 -0
- mapproxy/cache/path.py +250 -0
- mapproxy/cache/redis.py +88 -0
- mapproxy/cache/renderd.py +95 -0
- mapproxy/cache/riak.py +202 -0
- mapproxy/cache/s3.py +177 -0
- mapproxy/cache/tile.py +699 -0
- mapproxy/client/__init__.py +0 -0
- mapproxy/client/arcgis.py +79 -0
- mapproxy/client/cgi.py +139 -0
- mapproxy/client/http.py +315 -0
- mapproxy/client/log.py +33 -0
- mapproxy/client/tile.py +150 -0
- mapproxy/client/wms.py +254 -0
- mapproxy/compat/__init__.py +46 -0
- mapproxy/compat/image.py +79 -0
- mapproxy/compat/itertools.py +29 -0
- mapproxy/compat/modules.py +13 -0
- mapproxy/config/__init__.py +22 -0
- mapproxy/config/config.py +201 -0
- mapproxy/config/coverage.py +107 -0
- mapproxy/config/defaults.py +98 -0
- mapproxy/config/loader.py +2286 -0
- mapproxy/config/spec.py +644 -0
- mapproxy/config/validator.py +239 -0
- mapproxy/config_template/__init__.py +0 -0
- mapproxy/config_template/base_config/config.wsgi +10 -0
- mapproxy/config_template/base_config/full_example.yaml +593 -0
- mapproxy/config_template/base_config/full_seed_example.yaml +79 -0
- mapproxy/config_template/base_config/log.ini +35 -0
- mapproxy/config_template/base_config/mapproxy.yaml +60 -0
- mapproxy/config_template/base_config/seed.yaml +27 -0
- mapproxy/exception.py +142 -0
- mapproxy/featureinfo.py +252 -0
- mapproxy/grid.py +1170 -0
- mapproxy/image/__init__.py +536 -0
- mapproxy/image/fonts/DejaVuSans.ttf +0 -0
- mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
- mapproxy/image/fonts/LICENSE +99 -0
- mapproxy/image/fonts/__init__.py +0 -0
- mapproxy/image/mask.py +75 -0
- mapproxy/image/merge.py +316 -0
- mapproxy/image/message.py +347 -0
- mapproxy/image/opts.py +182 -0
- mapproxy/image/tile.py +167 -0
- mapproxy/image/transform.py +350 -0
- mapproxy/layer.py +470 -0
- mapproxy/multiapp.py +231 -0
- mapproxy/proj.py +302 -0
- mapproxy/request/__init__.py +18 -0
- mapproxy/request/arcgis.py +259 -0
- mapproxy/request/base.py +476 -0
- mapproxy/request/tile.py +128 -0
- mapproxy/request/wms/__init__.py +793 -0
- mapproxy/request/wms/exception.py +99 -0
- mapproxy/request/wmts.py +436 -0
- mapproxy/response.py +237 -0
- mapproxy/script/__init__.py +0 -0
- mapproxy/script/conf/__init__.py +0 -0
- mapproxy/script/conf/app.py +195 -0
- mapproxy/script/conf/caches.py +45 -0
- mapproxy/script/conf/layers.py +54 -0
- mapproxy/script/conf/seeds.py +37 -0
- mapproxy/script/conf/sources.py +86 -0
- mapproxy/script/conf/utils.py +143 -0
- mapproxy/script/defrag.py +184 -0
- mapproxy/script/export.py +333 -0
- mapproxy/script/grids.py +188 -0
- mapproxy/script/scales.py +126 -0
- mapproxy/script/util.py +406 -0
- mapproxy/script/wms_capabilities.py +152 -0
- mapproxy/seed/__init__.py +0 -0
- mapproxy/seed/cachelock.py +121 -0
- mapproxy/seed/cleanup.py +187 -0
- mapproxy/seed/config.py +469 -0
- mapproxy/seed/script.py +388 -0
- mapproxy/seed/seeder.py +538 -0
- mapproxy/seed/spec.py +64 -0
- mapproxy/seed/util.py +254 -0
- mapproxy/service/__init__.py +14 -0
- mapproxy/service/base.py +46 -0
- mapproxy/service/demo.py +356 -0
- mapproxy/service/kml.py +331 -0
- mapproxy/service/ows.py +38 -0
- mapproxy/service/template_helper.py +53 -0
- mapproxy/service/templates/demo/capabilities_demo.html +16 -0
- mapproxy/service/templates/demo/demo.html +181 -0
- mapproxy/service/templates/demo/openlayers-demo.cfg +16 -0
- mapproxy/service/templates/demo/static/img/blank.gif +0 -0
- mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
- mapproxy/service/templates/demo/static/logo.png +0 -0
- mapproxy/service/templates/demo/static/ol.css +345 -0
- mapproxy/service/templates/demo/static/ol.js +4 -0
- mapproxy/service/templates/demo/static/proj4.min.js +1 -0
- mapproxy/service/templates/demo/static/proj4defs.js +1 -0
- mapproxy/service/templates/demo/static/site.css +137 -0
- mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
- mapproxy/service/templates/demo/static/theme/default/google.css +17 -0
- mapproxy/service/templates/demo/static/theme/default/ie6-style.css +10 -0
- mapproxy/service/templates/demo/static/theme/default/style.css +482 -0
- mapproxy/service/templates/demo/static.html +34 -0
- mapproxy/service/templates/demo/tms_demo.html +103 -0
- mapproxy/service/templates/demo/wms_demo.html +140 -0
- mapproxy/service/templates/demo/wmts_demo.html +110 -0
- mapproxy/service/templates/tms_capabilities.xml +13 -0
- mapproxy/service/templates/tms_exception.xml +4 -0
- mapproxy/service/templates/tms_root_resource.xml +7 -0
- mapproxy/service/templates/tms_tilemap_capabilities.xml +14 -0
- mapproxy/service/templates/wms100capabilities.xml +112 -0
- mapproxy/service/templates/wms100exception.xml +4 -0
- mapproxy/service/templates/wms110capabilities.xml +152 -0
- mapproxy/service/templates/wms110exception.xml +5 -0
- mapproxy/service/templates/wms111capabilities.xml +183 -0
- mapproxy/service/templates/wms111exception.xml +5 -0
- mapproxy/service/templates/wms130capabilities.xml +326 -0
- mapproxy/service/templates/wms130exception.xml +8 -0
- mapproxy/service/templates/wmts100capabilities.xml +155 -0
- mapproxy/service/templates/wmts100exception.xml +9 -0
- mapproxy/service/tile.py +536 -0
- mapproxy/service/wms.py +851 -0
- mapproxy/service/wmts.py +381 -0
- mapproxy/source/__init__.py +75 -0
- mapproxy/source/arcgis.py +39 -0
- mapproxy/source/error.py +39 -0
- mapproxy/source/mapnik.py +259 -0
- mapproxy/source/tile.py +96 -0
- mapproxy/source/wms.py +270 -0
- mapproxy/srs.py +726 -0
- mapproxy/template.py +54 -0
- mapproxy/test/__init__.py +0 -0
- mapproxy/test/conftest.py +7 -0
- mapproxy/test/helper.py +247 -0
- mapproxy/test/http.py +494 -0
- mapproxy/test/image.py +210 -0
- mapproxy/test/mocker.py +2268 -0
- mapproxy/test/schemas/inspire/common/1.0/common.xsd +1461 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +155 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +109 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/network.xsd +521 -0
- mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +19 -0
- mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +14 -0
- mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +66 -0
- mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +1646 -0
- mapproxy/test/schemas/kml/2.2.0/xAL.xsd +1680 -0
- mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +87 -0
- mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +235 -0
- mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +23 -0
- mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +157 -0
- mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +86 -0
- mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +127 -0
- mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +279 -0
- mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +76 -0
- mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +112 -0
- mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +51 -0
- mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +59 -0
- mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +125 -0
- mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +140 -0
- mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +60 -0
- mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +47 -0
- mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +27 -0
- mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +353 -0
- mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +188 -0
- mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +524 -0
- mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +260 -0
- mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +273 -0
- mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +303 -0
- mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +6 -0
- mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +33 -0
- mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +68 -0
- mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +22 -0
- mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +274 -0
- mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +5 -0
- mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +276 -0
- mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +303 -0
- mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +6 -0
- mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +33 -0
- mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +8 -0
- mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +277 -0
- mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +611 -0
- mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +34 -0
- mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +28 -0
- mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +68 -0
- mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +22 -0
- mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +283 -0
- mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +5 -0
- mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +276 -0
- mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +303 -0
- mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +6 -0
- mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +33 -0
- mapproxy/test/schemas/wmts/1.0/ReadMe.txt +32 -0
- mapproxy/test/schemas/wmts/1.0/wmts.xsd +28 -0
- mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +151 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +38 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +564 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +57 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +72 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +91 -0
- mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +76 -0
- mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +70 -0
- mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +6 -0
- mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +122 -0
- mapproxy/test/schemas/xml.xsd +287 -0
- mapproxy/test/system/__init__.py +98 -0
- mapproxy/test/system/fixture/arcgis.yaml +57 -0
- mapproxy/test/system/fixture/auth.yaml +70 -0
- mapproxy/test/system/fixture/cache.mbtiles +0 -0
- mapproxy/test/system/fixture/cache_azureblob.yaml +59 -0
- mapproxy/test/system/fixture/cache_band_merge.yaml +73 -0
- mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +24 -0
- mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
- mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
- mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
- mapproxy/test/system/fixture/cache_geopackage.yaml +56 -0
- mapproxy/test/system/fixture/cache_grid_names.yaml +50 -0
- mapproxy/test/system/fixture/cache_mbtiles.yaml +28 -0
- mapproxy/test/system/fixture/cache_s3.yaml +58 -0
- mapproxy/test/system/fixture/cache_source.yaml +81 -0
- mapproxy/test/system/fixture/combined_sources.yaml +130 -0
- mapproxy/test/system/fixture/coverage.yaml +77 -0
- mapproxy/test/system/fixture/demo.yaml +135 -0
- mapproxy/test/system/fixture/dimension.yaml +59 -0
- mapproxy/test/system/fixture/disable_storage.yaml +25 -0
- mapproxy/test/system/fixture/empty_ogrdata.geojson +1 -0
- mapproxy/test/system/fixture/formats.yaml +72 -0
- mapproxy/test/system/fixture/inspire.yaml +101 -0
- mapproxy/test/system/fixture/inspire_full.yaml +124 -0
- mapproxy/test/system/fixture/kml_layer.yaml +66 -0
- mapproxy/test/system/fixture/layer.yaml +260 -0
- mapproxy/test/system/fixture/layergroups.yaml +57 -0
- mapproxy/test/system/fixture/layergroups_root.yaml +106 -0
- mapproxy/test/system/fixture/legendgraphic.yaml +93 -0
- mapproxy/test/system/fixture/mapnik_source.yaml +66 -0
- mapproxy/test/system/fixture/mapproxy_export.yaml +12 -0
- mapproxy/test/system/fixture/mapserver.yaml +23 -0
- mapproxy/test/system/fixture/minimal_cgi.py +16 -0
- mapproxy/test/system/fixture/mixed_mode.yaml +49 -0
- mapproxy/test/system/fixture/multi_cache_layers.yaml +100 -0
- mapproxy/test/system/fixture/multiapp1.yaml +20 -0
- mapproxy/test/system/fixture/multiapp2.yaml +19 -0
- mapproxy/test/system/fixture/renderd_client.yaml +55 -0
- mapproxy/test/system/fixture/scalehints.yaml +70 -0
- mapproxy/test/system/fixture/seed.yaml +94 -0
- mapproxy/test/system/fixture/seed_mapproxy.yaml +39 -0
- mapproxy/test/system/fixture/seed_old.yaml +12 -0
- mapproxy/test/system/fixture/seed_timeouts.yaml +12 -0
- mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +27 -0
- mapproxy/test/system/fixture/seedonly.yaml +51 -0
- mapproxy/test/system/fixture/sld.yaml +35 -0
- mapproxy/test/system/fixture/source_errors.yaml +84 -0
- mapproxy/test/system/fixture/source_errors_raise.yaml +82 -0
- mapproxy/test/system/fixture/tileservice_origin.yaml +26 -0
- mapproxy/test/system/fixture/tileservice_refresh.yaml +59 -0
- mapproxy/test/system/fixture/tilesource_minmax_res.yaml +22 -0
- mapproxy/test/system/fixture/util-conf-base-grids.yaml +5 -0
- mapproxy/test/system/fixture/util-conf-overwrite.yaml +13 -0
- mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +90 -0
- mapproxy/test/system/fixture/util_grids.yaml +30 -0
- mapproxy/test/system/fixture/util_wms_capabilities111.xml +130 -0
- mapproxy/test/system/fixture/util_wms_capabilities130.xml +100 -0
- mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +5 -0
- mapproxy/test/system/fixture/watermark.yaml +50 -0
- mapproxy/test/system/fixture/wms_srs_extent.yaml +39 -0
- mapproxy/test/system/fixture/wms_versions.yaml +38 -0
- mapproxy/test/system/fixture/wmts.yaml +134 -0
- mapproxy/test/system/fixture/wmts_dimensions.yaml +57 -0
- mapproxy/test/system/fixture/xslt_featureinfo.yaml +54 -0
- mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +51 -0
- mapproxy/test/system/test_arcgis.py +156 -0
- mapproxy/test/system/test_auth.py +1134 -0
- mapproxy/test/system/test_behind_proxy.py +75 -0
- mapproxy/test/system/test_bulk_meta_tiles.py +106 -0
- mapproxy/test/system/test_cache_azureblob.py +127 -0
- mapproxy/test/system/test_cache_band_merge.py +103 -0
- mapproxy/test/system/test_cache_geopackage.py +144 -0
- mapproxy/test/system/test_cache_grid_names.py +89 -0
- mapproxy/test/system/test_cache_mbtiles.py +85 -0
- mapproxy/test/system/test_cache_s3.py +115 -0
- mapproxy/test/system/test_cache_source.py +146 -0
- mapproxy/test/system/test_combined_sources.py +335 -0
- mapproxy/test/system/test_coverage.py +140 -0
- mapproxy/test/system/test_decorate_img.py +214 -0
- mapproxy/test/system/test_demo.py +106 -0
- mapproxy/test/system/test_demo_with_extra_service.py +53 -0
- mapproxy/test/system/test_dimensions.py +278 -0
- mapproxy/test/system/test_disable_storage.py +42 -0
- mapproxy/test/system/test_formats.py +219 -0
- mapproxy/test/system/test_inspire_vs.py +173 -0
- mapproxy/test/system/test_kml.py +262 -0
- mapproxy/test/system/test_layergroups.py +160 -0
- mapproxy/test/system/test_legendgraphic.py +308 -0
- mapproxy/test/system/test_mapnik.py +161 -0
- mapproxy/test/system/test_mapserver.py +81 -0
- mapproxy/test/system/test_mixed_mode_format.py +195 -0
- mapproxy/test/system/test_multi_cache_layers.py +167 -0
- mapproxy/test/system/test_multiapp.py +92 -0
- mapproxy/test/system/test_refresh.py +207 -0
- mapproxy/test/system/test_renderd_client.py +304 -0
- mapproxy/test/system/test_response_headers.py +54 -0
- mapproxy/test/system/test_scalehints.py +140 -0
- mapproxy/test/system/test_seed.py +422 -0
- mapproxy/test/system/test_seed_only.py +93 -0
- mapproxy/test/system/test_sld.py +120 -0
- mapproxy/test/system/test_source_errors.py +377 -0
- mapproxy/test/system/test_tilesource_minmax_res.py +54 -0
- mapproxy/test/system/test_tms.py +276 -0
- mapproxy/test/system/test_tms_origin.py +46 -0
- mapproxy/test/system/test_util_conf.py +304 -0
- mapproxy/test/system/test_util_export.py +210 -0
- mapproxy/test/system/test_util_grids.py +88 -0
- mapproxy/test/system/test_util_wms_capabilities.py +182 -0
- mapproxy/test/system/test_watermark.py +91 -0
- mapproxy/test/system/test_wms.py +1611 -0
- mapproxy/test/system/test_wms_srs_extent.py +165 -0
- mapproxy/test/system/test_wms_version.py +85 -0
- mapproxy/test/system/test_wmsc.py +116 -0
- mapproxy/test/system/test_wmts.py +334 -0
- mapproxy/test/system/test_wmts_dimensions.py +206 -0
- mapproxy/test/system/test_wmts_restful.py +198 -0
- mapproxy/test/system/test_xslt_featureinfo.py +425 -0
- mapproxy/test/test_http_helper.py +219 -0
- mapproxy/test/unit/__init__.py +0 -0
- mapproxy/test/unit/epsg +2 -0
- mapproxy/test/unit/polygons/polygons.dbf +0 -0
- mapproxy/test/unit/polygons/polygons.shp +0 -0
- mapproxy/test/unit/polygons/polygons.shx +0 -0
- mapproxy/test/unit/test_async.py +245 -0
- mapproxy/test/unit/test_auth.py +419 -0
- mapproxy/test/unit/test_cache.py +1193 -0
- mapproxy/test/unit/test_cache_azureblob.py +94 -0
- mapproxy/test/unit/test_cache_compact.py +319 -0
- mapproxy/test/unit/test_cache_couchdb.py +114 -0
- mapproxy/test/unit/test_cache_geopackage.py +221 -0
- mapproxy/test/unit/test_cache_redis.py +67 -0
- mapproxy/test/unit/test_cache_riak.py +76 -0
- mapproxy/test/unit/test_cache_s3.py +84 -0
- mapproxy/test/unit/test_cache_tile.py +427 -0
- mapproxy/test/unit/test_client.py +479 -0
- mapproxy/test/unit/test_client_arcgis.py +73 -0
- mapproxy/test/unit/test_client_cgi.py +136 -0
- mapproxy/test/unit/test_collections.py +116 -0
- mapproxy/test/unit/test_concat_legends.py +37 -0
- mapproxy/test/unit/test_conf_loader.py +1061 -0
- mapproxy/test/unit/test_conf_validator.py +416 -0
- mapproxy/test/unit/test_config.py +117 -0
- mapproxy/test/unit/test_decorate_img.py +185 -0
- mapproxy/test/unit/test_exceptions.py +258 -0
- mapproxy/test/unit/test_featureinfo.py +291 -0
- mapproxy/test/unit/test_file_lock_load.py +49 -0
- mapproxy/test/unit/test_geom.py +503 -0
- mapproxy/test/unit/test_grid.py +1258 -0
- mapproxy/test/unit/test_image.py +1053 -0
- mapproxy/test/unit/test_image_mask.py +181 -0
- mapproxy/test/unit/test_image_messages.py +197 -0
- mapproxy/test/unit/test_image_options.py +160 -0
- mapproxy/test/unit/test_isodate.py +122 -0
- mapproxy/test/unit/test_multiapp.py +163 -0
- mapproxy/test/unit/test_ogr_reader.py +50 -0
- mapproxy/test/unit/test_request.py +745 -0
- mapproxy/test/unit/test_request_wmts.py +178 -0
- mapproxy/test/unit/test_response.py +79 -0
- mapproxy/test/unit/test_seed.py +365 -0
- mapproxy/test/unit/test_seed_cachelock.py +90 -0
- mapproxy/test/unit/test_srs.py +215 -0
- mapproxy/test/unit/test_tiled_source.py +122 -0
- mapproxy/test/unit/test_tilefilter.py +31 -0
- mapproxy/test/unit/test_times.py +25 -0
- mapproxy/test/unit/test_timeutils.py +50 -0
- mapproxy/test/unit/test_util_conf_utils.py +75 -0
- mapproxy/test/unit/test_utils.py +476 -0
- mapproxy/test/unit/test_wms_capabilities.py +44 -0
- mapproxy/test/unit/test_wms_layer.py +113 -0
- mapproxy/test/unit/test_yaml.py +69 -0
- mapproxy/tilefilter.py +59 -0
- mapproxy/util/__init__.py +0 -0
- mapproxy/util/async_.py +227 -0
- mapproxy/util/collections.py +132 -0
- mapproxy/util/coverage.py +329 -0
- mapproxy/util/escape.py +10 -0
- mapproxy/util/ext/__init__.py +14 -0
- mapproxy/util/ext/dictspec/__init__.py +1 -0
- mapproxy/util/ext/dictspec/spec.py +124 -0
- mapproxy/util/ext/dictspec/test/__init__.py +0 -0
- mapproxy/util/ext/dictspec/test/test_validator.py +274 -0
- mapproxy/util/ext/dictspec/validator.py +189 -0
- mapproxy/util/ext/local.py +196 -0
- mapproxy/util/ext/lockfile.py +138 -0
- mapproxy/util/ext/odict.py +330 -0
- mapproxy/util/ext/serving.py +508 -0
- mapproxy/util/ext/tempita/__init__.py +1174 -0
- mapproxy/util/ext/tempita/_looper.py +163 -0
- mapproxy/util/ext/tempita/compat3.py +46 -0
- mapproxy/util/ext/wmsparse/__init__.py +3 -0
- mapproxy/util/ext/wmsparse/duration.py +597 -0
- mapproxy/util/ext/wmsparse/parse.py +305 -0
- mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
- mapproxy/util/ext/wmsparse/test/test_parse.py +162 -0
- mapproxy/util/ext/wmsparse/test/test_util.py +23 -0
- mapproxy/util/ext/wmsparse/test/wms-large-111.xml +2114 -0
- mapproxy/util/ext/wmsparse/test/wms-omniscale-111.xml +90 -0
- mapproxy/util/ext/wmsparse/test/wms-omniscale-130.xml +120 -0
- mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +386 -0
- mapproxy/util/ext/wmsparse/util.py +187 -0
- mapproxy/util/fs.py +156 -0
- mapproxy/util/geom.py +295 -0
- mapproxy/util/lib.py +115 -0
- mapproxy/util/lock.py +163 -0
- mapproxy/util/ogr.py +231 -0
- mapproxy/util/py.py +81 -0
- mapproxy/util/times.py +75 -0
- mapproxy/util/yaml.py +56 -0
- mapproxy/version.py +31 -0
- mapproxy/wsgiapp.py +164 -0
- mapproxy-1.16.1.dist-info/METADATA +151 -0
- mapproxy-1.16.1.dist-info/RECORD +458 -0
- mapproxy-1.16.1.dist-info/WHEEL +5 -0
- mapproxy-1.16.1.dist-info/entry_points.txt +3 -0
- mapproxy-1.16.1.dist-info/licenses/AUTHORS.txt +33 -0
- mapproxy-1.16.1.dist-info/licenses/COPYING.txt +60 -0
- mapproxy-1.16.1.dist-info/licenses/LICENSE.txt +202 -0
- mapproxy-1.16.1.dist-info/top_level.txt +1 -0
mapproxy/script/grids.py
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2011 Omniscale <http://omniscale.de>
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
from __future__ import print_function, division
|
|
17
|
+
|
|
18
|
+
import math
|
|
19
|
+
import sys
|
|
20
|
+
import optparse
|
|
21
|
+
|
|
22
|
+
from mapproxy.compat import iteritems
|
|
23
|
+
from mapproxy.config import local_base_config
|
|
24
|
+
from mapproxy.config.loader import load_configuration, ConfigurationError
|
|
25
|
+
from mapproxy.seed.config import (
|
|
26
|
+
load_seed_tasks_conf, SeedConfigurationError, SeedingConfiguration
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
def format_conf_value(value):
|
|
30
|
+
if isinstance(value, tuple):
|
|
31
|
+
# YAMl only supports lists, convert for clarity
|
|
32
|
+
value = list(value)
|
|
33
|
+
return repr(value)
|
|
34
|
+
|
|
35
|
+
def _area_from_bbox(bbox):
|
|
36
|
+
width = bbox[2] - bbox[0]
|
|
37
|
+
height = bbox[3] - bbox[1]
|
|
38
|
+
return width * height
|
|
39
|
+
|
|
40
|
+
def grid_coverage_ratio(bbox, srs, coverage):
|
|
41
|
+
coverage = coverage.transform_to(srs)
|
|
42
|
+
grid_area = _area_from_bbox(bbox)
|
|
43
|
+
|
|
44
|
+
if coverage.geom:
|
|
45
|
+
coverage_area = coverage.geom.area
|
|
46
|
+
else:
|
|
47
|
+
coverage_area = _area_from_bbox(coverage.bbox)
|
|
48
|
+
|
|
49
|
+
return coverage_area / grid_area
|
|
50
|
+
|
|
51
|
+
def display_grid(grid_conf, coverage=None):
|
|
52
|
+
print('%s:' % (grid_conf.conf['name'],))
|
|
53
|
+
print(' Configuration:')
|
|
54
|
+
conf_dict = grid_conf.conf.copy()
|
|
55
|
+
|
|
56
|
+
tile_grid = grid_conf.tile_grid()
|
|
57
|
+
if 'tile_size' not in conf_dict:
|
|
58
|
+
conf_dict['tile_size*'] = tile_grid.tile_size
|
|
59
|
+
if 'bbox' not in conf_dict:
|
|
60
|
+
conf_dict['bbox*'] = tile_grid.bbox
|
|
61
|
+
if 'origin' not in conf_dict:
|
|
62
|
+
conf_dict['origin*'] = tile_grid.origin or 'sw'
|
|
63
|
+
area_ratio = None
|
|
64
|
+
if coverage:
|
|
65
|
+
bbox = tile_grid.bbox
|
|
66
|
+
area_ratio = grid_coverage_ratio(bbox, tile_grid.srs, coverage)
|
|
67
|
+
|
|
68
|
+
for key in sorted(conf_dict):
|
|
69
|
+
if key == 'name':
|
|
70
|
+
continue
|
|
71
|
+
print(' %s: %s' % (key, format_conf_value(conf_dict[key])))
|
|
72
|
+
if coverage:
|
|
73
|
+
print(' Coverage: %s covers approx. %.4f%% of the grid BBOX' % (coverage.name, area_ratio * 100))
|
|
74
|
+
print(' Levels: Resolutions, # x * y = total tiles (approx. tiles within coverage)')
|
|
75
|
+
else:
|
|
76
|
+
print(' Levels: Resolutions, # x * y = total tiles')
|
|
77
|
+
max_digits = max([len("%r" % (res,)) for level, res in enumerate(tile_grid.resolutions)])
|
|
78
|
+
for level, res in enumerate(tile_grid.resolutions):
|
|
79
|
+
tiles_in_x, tiles_in_y = tile_grid.grid_sizes[level]
|
|
80
|
+
total_tiles = tiles_in_x * tiles_in_y
|
|
81
|
+
spaces = max_digits - len("%r" % (res,)) + 1
|
|
82
|
+
|
|
83
|
+
if coverage:
|
|
84
|
+
coverage_tiles = total_tiles * area_ratio
|
|
85
|
+
print(" %.2d: %r,%s# %6d * %-6d = %10s (%s)" % (level, res, ' '*spaces, tiles_in_x, tiles_in_y, human_readable_number(total_tiles), human_readable_number(coverage_tiles)))
|
|
86
|
+
else:
|
|
87
|
+
print(" %.2d: %r,%s# %6d * %-6d = %10s" % (level, res, ' '*spaces, tiles_in_x, tiles_in_y, human_readable_number(total_tiles)))
|
|
88
|
+
|
|
89
|
+
def human_readable_number(num):
|
|
90
|
+
if num > 10**6:
|
|
91
|
+
return '%7.2fM' % (num/10**6)
|
|
92
|
+
if math.isnan(num):
|
|
93
|
+
return '?'
|
|
94
|
+
return '%d' % int(num)
|
|
95
|
+
|
|
96
|
+
def display_grids_list(grids):
|
|
97
|
+
for grid_name in sorted(grids.keys()):
|
|
98
|
+
print(grid_name)
|
|
99
|
+
|
|
100
|
+
def display_grids(grids, coverage=None):
|
|
101
|
+
for i, grid_name in enumerate(sorted(grids.keys())):
|
|
102
|
+
if i != 0:
|
|
103
|
+
print()
|
|
104
|
+
display_grid(grids[grid_name], coverage=coverage)
|
|
105
|
+
|
|
106
|
+
def grids_command(args=None):
|
|
107
|
+
parser = optparse.OptionParser("%prog grids [options] mapproxy_conf")
|
|
108
|
+
parser.add_option("-f", "--mapproxy-conf", dest="mapproxy_conf",
|
|
109
|
+
help="MapProxy configuration.")
|
|
110
|
+
parser.add_option("-g", "--grid", dest="grid_name",
|
|
111
|
+
help="Display only information about the specified grid.")
|
|
112
|
+
parser.add_option("--all", dest="show_all", action="store_true", default=False,
|
|
113
|
+
help="Show also grids that are not referenced by any cache.")
|
|
114
|
+
parser.add_option("-l", "--list", dest="list_grids", action="store_true", default=False, help="List names of configured grids, which are used by any cache")
|
|
115
|
+
coverage_group = parser.add_option_group("Approximate the number of tiles within a given coverage")
|
|
116
|
+
coverage_group.add_option("-s", "--seed-conf", dest="seed_config", help="Seed configuration, where the coverage is defined")
|
|
117
|
+
coverage_group.add_option("-c", "--coverage-name", dest="coverage", help="Calculate number of tiles when a coverage is given")
|
|
118
|
+
|
|
119
|
+
from mapproxy.script.util import setup_logging
|
|
120
|
+
import logging
|
|
121
|
+
setup_logging(logging.WARN)
|
|
122
|
+
|
|
123
|
+
if args:
|
|
124
|
+
args = args[1:] # remove script name
|
|
125
|
+
|
|
126
|
+
(options, args) = parser.parse_args(args)
|
|
127
|
+
if not options.mapproxy_conf:
|
|
128
|
+
if len(args) != 1:
|
|
129
|
+
parser.print_help()
|
|
130
|
+
sys.exit(1)
|
|
131
|
+
else:
|
|
132
|
+
options.mapproxy_conf = args[0]
|
|
133
|
+
try:
|
|
134
|
+
proxy_configuration = load_configuration(options.mapproxy_conf)
|
|
135
|
+
except IOError as e:
|
|
136
|
+
print('ERROR: ', "%s: '%s'" % (e.strerror, e.filename), file=sys.stderr)
|
|
137
|
+
sys.exit(2)
|
|
138
|
+
except ConfigurationError as e:
|
|
139
|
+
print(e, file=sys.stderr)
|
|
140
|
+
print('ERROR: invalid configuration (see above)', file=sys.stderr)
|
|
141
|
+
sys.exit(2)
|
|
142
|
+
|
|
143
|
+
with local_base_config(proxy_configuration.base_config):
|
|
144
|
+
if options.show_all or options.grid_name:
|
|
145
|
+
grids = proxy_configuration.grids
|
|
146
|
+
else:
|
|
147
|
+
caches = proxy_configuration.caches
|
|
148
|
+
grids = {}
|
|
149
|
+
for cache in caches.values():
|
|
150
|
+
grids.update(cache.grid_confs())
|
|
151
|
+
grids = dict(grids)
|
|
152
|
+
|
|
153
|
+
if options.grid_name:
|
|
154
|
+
options.grid_name = options.grid_name.lower()
|
|
155
|
+
# ignore case for keys
|
|
156
|
+
grids = dict((key.lower(), value) for (key, value) in iteritems(grids))
|
|
157
|
+
if not grids.get(options.grid_name, False):
|
|
158
|
+
print('grid not found: %s' % (options.grid_name,))
|
|
159
|
+
sys.exit(1)
|
|
160
|
+
|
|
161
|
+
coverage = None
|
|
162
|
+
if options.coverage and options.seed_config:
|
|
163
|
+
try:
|
|
164
|
+
seed_conf = load_seed_tasks_conf(options.seed_config, proxy_configuration)
|
|
165
|
+
except SeedConfigurationError as e:
|
|
166
|
+
print('ERROR: invalid configuration (see above)', file=sys.stderr)
|
|
167
|
+
sys.exit(2)
|
|
168
|
+
|
|
169
|
+
if not isinstance(seed_conf, SeedingConfiguration):
|
|
170
|
+
print('Old seed configuration format not supported')
|
|
171
|
+
sys.exit(1)
|
|
172
|
+
|
|
173
|
+
coverage = seed_conf.coverage(options.coverage)
|
|
174
|
+
coverage.name = options.coverage
|
|
175
|
+
|
|
176
|
+
elif (options.coverage and not options.seed_config) or (not options.coverage and options.seed_config):
|
|
177
|
+
print('--coverage and --seed-conf can only be used together')
|
|
178
|
+
sys.exit(1)
|
|
179
|
+
|
|
180
|
+
if options.list_grids:
|
|
181
|
+
display_grids_list(grids)
|
|
182
|
+
elif options.grid_name:
|
|
183
|
+
display_grids({options.grid_name: grids[options.grid_name]}, coverage=coverage)
|
|
184
|
+
else:
|
|
185
|
+
display_grids(grids, coverage=coverage)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2011 Omniscale <http://omniscale.de>
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
from __future__ import division, print_function
|
|
17
|
+
|
|
18
|
+
import sys
|
|
19
|
+
import optparse
|
|
20
|
+
from mapproxy.compat import itertools
|
|
21
|
+
|
|
22
|
+
DEFAULT_DPIS = {
|
|
23
|
+
'OGC': 2.54/(0.00028 * 100),
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
def values_from_stdin():
|
|
27
|
+
values = []
|
|
28
|
+
for line in sys.stdin:
|
|
29
|
+
line = line.split('#', 1)[0]
|
|
30
|
+
if not line.strip():
|
|
31
|
+
break
|
|
32
|
+
values.append(float(line))
|
|
33
|
+
return values
|
|
34
|
+
|
|
35
|
+
def scale_to_res(scale_denom, dpi, unit_factor):
|
|
36
|
+
m_per_px = 2.54 / (dpi * 100)
|
|
37
|
+
return scale_denom * m_per_px / unit_factor
|
|
38
|
+
|
|
39
|
+
def res_to_scale(res, dpi, unit_factor):
|
|
40
|
+
m_per_px = 2.54 / (dpi * 100)
|
|
41
|
+
return res / m_per_px * unit_factor
|
|
42
|
+
|
|
43
|
+
def format_simple(i, scale, res):
|
|
44
|
+
return '%20.10f # %2d %20.8f' % (res, i, scale)
|
|
45
|
+
|
|
46
|
+
def format_list(i, scale, res):
|
|
47
|
+
return ' %20.10f, # %2d %20.8f' % (res, i, scale)
|
|
48
|
+
|
|
49
|
+
def repeated_values(values, n):
|
|
50
|
+
current_factor = 1
|
|
51
|
+
step_factor = 10
|
|
52
|
+
result = []
|
|
53
|
+
for i, value in enumerate(itertools.islice(itertools.cycle(values), n)):
|
|
54
|
+
if i != 0 and i % len(values) == 0:
|
|
55
|
+
current_factor *= step_factor
|
|
56
|
+
result.append(value/current_factor)
|
|
57
|
+
return result
|
|
58
|
+
|
|
59
|
+
def fill_values(values, n):
|
|
60
|
+
return values + [values[-1]/(2**x) for x in range(1, n)]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def scales_command(args=None):
|
|
64
|
+
parser = optparse.OptionParser("%prog scales [options] scale/resolution[, ...]")
|
|
65
|
+
parser.add_option("-l", "--levels", default=1, type=int, metavar='1',
|
|
66
|
+
help="number of resolutions/scales to calculate")
|
|
67
|
+
parser.add_option("-d", "--dpi", default='OGC',
|
|
68
|
+
help="DPI to convert scales (use OGC for .28mm based DPI)")
|
|
69
|
+
parser.add_option("--unit", default='m', metavar='m',
|
|
70
|
+
help="use resolutions in meter (m) or degrees (d)")
|
|
71
|
+
parser.add_option("--eval", default=False, action='store_true',
|
|
72
|
+
help="evaluate args as Python expression. For example: 360/256")
|
|
73
|
+
parser.add_option("--repeat", default=False, action='store_true',
|
|
74
|
+
help="repeat all values, each time /10. For example: 1000 500 250 results in 1000 500 250 100 50 25 10...")
|
|
75
|
+
parser.add_option("--res-to-scale", default=False, action='store_true',
|
|
76
|
+
help="convert resolutions to scale")
|
|
77
|
+
parser.add_option("--as-res-config", default=False, action='store_true',
|
|
78
|
+
help="output as resolution list for MapProxy grid configuration")
|
|
79
|
+
|
|
80
|
+
if args:
|
|
81
|
+
args = args[1:] # remove script name
|
|
82
|
+
(options, args) = parser.parse_args(args)
|
|
83
|
+
options.levels = max(options.levels, len(args))
|
|
84
|
+
|
|
85
|
+
dpi = float(DEFAULT_DPIS.get(options.dpi, options.dpi))
|
|
86
|
+
|
|
87
|
+
if not args:
|
|
88
|
+
parser.print_help()
|
|
89
|
+
sys.exit(1)
|
|
90
|
+
|
|
91
|
+
if args[0] == '-':
|
|
92
|
+
values = values_from_stdin()
|
|
93
|
+
elif options.eval:
|
|
94
|
+
values = [eval(a) for a in args]
|
|
95
|
+
else:
|
|
96
|
+
values = [float(a) for a in args]
|
|
97
|
+
|
|
98
|
+
values.sort(reverse=True)
|
|
99
|
+
|
|
100
|
+
if options.repeat:
|
|
101
|
+
values = repeated_values(values, options.levels)
|
|
102
|
+
|
|
103
|
+
if len(values) < options.levels:
|
|
104
|
+
values = fill_values(values, options.levels)
|
|
105
|
+
|
|
106
|
+
unit_factor = 1
|
|
107
|
+
if options.unit == 'd':
|
|
108
|
+
# calculated from well-known scale set GoogleCRS84Quad
|
|
109
|
+
unit_factor = 111319.4907932736
|
|
110
|
+
|
|
111
|
+
calc = scale_to_res
|
|
112
|
+
if options.res_to_scale:
|
|
113
|
+
calc = res_to_scale
|
|
114
|
+
|
|
115
|
+
if options.as_res_config:
|
|
116
|
+
print(' res: [')
|
|
117
|
+
print(' # res level scale @%.1f DPI' % dpi)
|
|
118
|
+
format = format_list
|
|
119
|
+
else:
|
|
120
|
+
format = format_simple
|
|
121
|
+
|
|
122
|
+
for i, value in enumerate(values):
|
|
123
|
+
print(format(i, value, calc(value, dpi, unit_factor)))
|
|
124
|
+
|
|
125
|
+
if options.as_res_config:
|
|
126
|
+
print(' ]')
|