From e0def51b1808b266abec138d19dc422fd342cfe5 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Fri, 26 Dec 2014 15:48:39 +0800 Subject: [PATCH 001/179] add packaging and testing skeleton --- .gitignore | 3 ++ README.md | 31 +++++++++++++-- requirements.txt | 2 + res/placeholder | 0 scripts/placeholder | 0 setup.cfg | 10 +++++ setup.py | 83 ++++++++++++++++++++++++++++++++++++++++ static/placeholder | 0 stonemason/__init__.py | 10 +++++ tests/__init__.py | 6 +++ tests/test_stonemason.py | 19 +++++++++ tox.ini | 14 +++++++ 12 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 requirements.txt create mode 100644 res/placeholder create mode 100644 scripts/placeholder create mode 100644 setup.cfg create mode 100644 setup.py create mode 100644 static/placeholder create mode 100644 stonemason/__init__.py create mode 100644 tests/__init__.py create mode 100644 tests/test_stonemason.py create mode 100644 tox.ini diff --git a/.gitignore b/.gitignore index db4561e..d1eadd9 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,6 @@ docs/_build/ # PyBuilder target/ + +# PyCharm +.idea/ diff --git a/README.md b/README.md index 6b0b242..afe4530 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,35 @@ # Stonemason +**Stonemason** is a complete rewrite of the unpopular [mason](https://github.com/Kotaimen/mason) tile map toolkit. -Tile Map Service Toolkit, Mason Reloaded. +Similar solutions: +- [TileScache](http://tilestache.org) +- [TileCache](http://tilecache.org) +- [Windshaft](https://github.com/CartoDB/Windshaft) -## Features -TBD. +## Features (planned) +- Tile map service +- Render pipeline +- Mass tile storage +- Debug and design server +- [mapnik](http://mapnik.org) as raster render engine +- Homebrew high quality DEM terrain relief renderer +- Supports both zero configuration and distributed deployment + +## Dependencies + +> Geospatial related modules only supports py27 + +- Python2>=2.7 +- flask>=0.10 +- pillow>=2.6 +- numpy>=1.9, scipy>=0.10.0 (Optional) +- mapnik>=2.2 (Optional) +- geos>=3.3, gdal>=1.10 (Optional) +- imagemagick>=6.0 (Optional) +- PostgreSQL>=9.1, PostGIS>=2.1 (Optional) +- redis>=2.8 (Optional) +- memcached>=1.4 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5475558 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +# Please update requirements in setup.py +--editable=. diff --git a/res/placeholder b/res/placeholder new file mode 100644 index 0000000..e69de29 diff --git a/scripts/placeholder b/scripts/placeholder new file mode 100644 index 0000000..e69de29 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..fa166b9 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,10 @@ +[bdist_wheel] +universal=1 + +[nosetests] +tests=tests +with-coverage=1 +cover-min-percentage=80 +cover-package=stonemason +cover-html=1 +cover-html-dir=htmlcov diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..42df0c5 --- /dev/null +++ b/setup.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python + + +import re +import codecs +import os + +from setuptools import setup, find_packages + + +where_am_i = os.path.abspath(os.path.dirname(__file__)) + + +def read(*parts): + return codecs.open(os.path.join(where_am_i, *parts), 'r').read() + + +def find_version(*file_paths): + version_file = read(*file_paths) + version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", + version_file, re.M) + if version_match: + return version_match.group(1) + raise RuntimeError('Unable to find version string.') + + +long_description = read('README.md') + +install_requires = [ + 'six>=1.8.0', + 'Flask>=0.9', + 'python-memcached>=1.53', +] + +tests_require = [ + 'nose', + 'coverage', + 'virtualenv>=1.10', + 'mock', +] + +find_excludes = [ + 'res', + 'tests', +] + +py_modules = [] + +package_data = {} + +setup( + name='stonemason', + version=find_version('stonemason', '__init__.py'), + description='Map tile service toolkit.', + long_description=long_description, + classifiers=[ + 'Development Status :: 1 - Planning', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'Operating System :: POSIX', + 'License :: OSI Approved :: MIT License', + 'Topic :: Scientific/Engineering :: GIS', + 'Topic :: Multimedia :: Graphics', + 'Topic :: Internet :: WWW/HTTP :: WSGI :: Server', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + ], + keywords='map tile mapnik gdal tms', + author='The Stonemasons', + author_email='kotaimen.c@gmail.com, gliese.q@gmail.com', + url='http://github.com/kotaimen/stonemason', + license='MIT', + py_modules=py_modules, + packages=find_packages(exclude=find_excludes), + package_data=package_data, + install_requires=install_requires, + tests_require=tests_require, + test_suite='tests', + zip_safe=False, + extras_require={ + 'testing': tests_require, + } +) diff --git a/static/placeholder b/static/placeholder new file mode 100644 index 0000000..e69de29 diff --git a/stonemason/__init__.py b/stonemason/__init__.py new file mode 100644 index 0000000..d8a7e5d --- /dev/null +++ b/stonemason/__init__.py @@ -0,0 +1,10 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '12/22/14' + +# Version used in the setup.py +__version__ = '0.0.1.dev0' + +# Prevent nosetests peek into this package +__test__ = False diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..bace2c1 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '12/25/14' + + diff --git a/tests/test_stonemason.py b/tests/test_stonemason.py new file mode 100644 index 0000000..516f42f --- /dev/null +++ b/tests/test_stonemason.py @@ -0,0 +1,19 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '12/26/14' + +import unittest +from distutils.version import LooseVersion + +import stonemason + + +class TestStonemason(unittest.TestCase): + def test_something(self): + self.assertGreaterEqual(LooseVersion(stonemason.__version__), + LooseVersion('0')) + + +if __name__ == '__main__': + unittest.main() diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..42c3812 --- /dev/null +++ b/tox.ini @@ -0,0 +1,14 @@ +# Tox (http://tox.testrun.org/) is a tool for running tests +# in multiple virtualenvs. This configuration file will run the +# test suite on all supported python versions. To use it, "pip install tox" +# and then run "tox" from this directory. + +[tox] +envlist = py27 + +[testenv] +commands = nosetests +deps = + nose + coverage + -rrequirements.txt From 0defc1c08b0a4e98b1b5363526dba475d0d10e8c Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Mon, 5 Jan 2015 11:29:29 +0800 Subject: [PATCH 002/179] Misc: Created package structure --- stonemason/mason/__init__.py | 6 ++++++ stonemason/mason/config/__init__.py | 6 ++++++ stonemason/mason/theme/__init__.py | 6 ++++++ stonemason/provider/__init__.py | 6 ++++++ stonemason/provider/pyramid/__init__.py | 6 ++++++ stonemason/provider/tilecache/__init__.py | 6 ++++++ stonemason/provider/tileprovider/__init__.py | 6 ++++++ stonemason/provider/tilestorage/__init__.py | 6 ++++++ stonemason/renderer/__init__.py | 6 ++++++ stonemason/renderer/cartographer/__init__.py | 6 ++++++ stonemason/renderer/mapsource/__init__.py | 6 ++++++ stonemason/renderer/renderman/__init__.py | 6 ++++++ stonemason/renderer/tilerenderer/__init__.py | 6 ++++++ stonemason/renderer/tilerenderer/cartographer/__init__.py | 6 ++++++ stonemason/service/__init__.py | 6 ++++++ stonemason/service/tilepipe/__init__.py | 6 ++++++ stonemason/service/tilepipe/rendered/__init__.py | 6 ++++++ stonemason/service/tileserver/__init__.py | 6 ++++++ stonemason/util/__init__.py | 6 ++++++ stonemason/util/geo/__init__.py | 6 ++++++ stonemason/util/postprocessing/__init__.py | 6 ++++++ 21 files changed, 126 insertions(+) create mode 100644 stonemason/mason/__init__.py create mode 100644 stonemason/mason/config/__init__.py create mode 100644 stonemason/mason/theme/__init__.py create mode 100644 stonemason/provider/__init__.py create mode 100644 stonemason/provider/pyramid/__init__.py create mode 100644 stonemason/provider/tilecache/__init__.py create mode 100644 stonemason/provider/tileprovider/__init__.py create mode 100644 stonemason/provider/tilestorage/__init__.py create mode 100644 stonemason/renderer/__init__.py create mode 100644 stonemason/renderer/cartographer/__init__.py create mode 100644 stonemason/renderer/mapsource/__init__.py create mode 100644 stonemason/renderer/renderman/__init__.py create mode 100644 stonemason/renderer/tilerenderer/__init__.py create mode 100644 stonemason/renderer/tilerenderer/cartographer/__init__.py create mode 100644 stonemason/service/__init__.py create mode 100644 stonemason/service/tilepipe/__init__.py create mode 100644 stonemason/service/tilepipe/rendered/__init__.py create mode 100644 stonemason/service/tileserver/__init__.py create mode 100644 stonemason/util/__init__.py create mode 100644 stonemason/util/geo/__init__.py create mode 100644 stonemason/util/postprocessing/__init__.py diff --git a/stonemason/mason/__init__.py b/stonemason/mason/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/mason/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/mason/config/__init__.py b/stonemason/mason/config/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/mason/config/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/mason/theme/__init__.py b/stonemason/mason/theme/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/mason/theme/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/provider/__init__.py b/stonemason/provider/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/provider/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/provider/pyramid/__init__.py b/stonemason/provider/pyramid/__init__.py new file mode 100644 index 0000000..5e4d831 --- /dev/null +++ b/stonemason/provider/pyramid/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '12/26/14' + + diff --git a/stonemason/provider/tilecache/__init__.py b/stonemason/provider/tilecache/__init__.py new file mode 100644 index 0000000..5e4d831 --- /dev/null +++ b/stonemason/provider/tilecache/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '12/26/14' + + diff --git a/stonemason/provider/tileprovider/__init__.py b/stonemason/provider/tileprovider/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/provider/tileprovider/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/provider/tilestorage/__init__.py b/stonemason/provider/tilestorage/__init__.py new file mode 100644 index 0000000..5e4d831 --- /dev/null +++ b/stonemason/provider/tilestorage/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '12/26/14' + + diff --git a/stonemason/renderer/__init__.py b/stonemason/renderer/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/renderer/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/renderer/cartographer/__init__.py b/stonemason/renderer/cartographer/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/renderer/cartographer/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/renderer/mapsource/__init__.py b/stonemason/renderer/mapsource/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/renderer/mapsource/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/renderer/renderman/__init__.py b/stonemason/renderer/renderman/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/renderer/renderman/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/renderer/tilerenderer/__init__.py b/stonemason/renderer/tilerenderer/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/renderer/tilerenderer/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/renderer/tilerenderer/cartographer/__init__.py b/stonemason/renderer/tilerenderer/cartographer/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/renderer/tilerenderer/cartographer/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/service/__init__.py b/stonemason/service/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/service/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/service/tilepipe/__init__.py b/stonemason/service/tilepipe/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/service/tilepipe/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/service/tilepipe/rendered/__init__.py b/stonemason/service/tilepipe/rendered/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/service/tilepipe/rendered/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/service/tileserver/__init__.py b/stonemason/service/tileserver/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/service/tileserver/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/util/__init__.py b/stonemason/util/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/util/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/util/geo/__init__.py b/stonemason/util/geo/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/util/geo/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + diff --git a/stonemason/util/postprocessing/__init__.py b/stonemason/util/postprocessing/__init__.py new file mode 100644 index 0000000..275af68 --- /dev/null +++ b/stonemason/util/postprocessing/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + + From f8f3c938483b33386b15b8b2b484f8692a035820 Mon Sep 17 00:00:00 2001 From: ray Date: Tue, 6 Jan 2015 16:17:18 +0800 Subject: [PATCH 003/179] Misc: Add example flask app --- instance/settings.py | 6 ++++ scripts/placeholder | 0 scripts/stonemason-tileserver.py | 9 +++++ stonemason/service/tileserver/__init__.py | 1 + .../service/tileserver/default_settings.py | 6 ++++ stonemason/service/tileserver/tileserver.py | 36 +++++++++++++++++++ tests/stonemason/__init__.py | 1 + tests/stonemason/service/__init__.py | 1 + .../stonemason/service/tileserver/__init__.py | 1 + .../service/tileserver/test_tileserver.py | 17 +++++++++ 10 files changed, 78 insertions(+) create mode 100644 instance/settings.py delete mode 100644 scripts/placeholder create mode 100755 scripts/stonemason-tileserver.py create mode 100644 stonemason/service/tileserver/default_settings.py create mode 100644 stonemason/service/tileserver/tileserver.py create mode 100644 tests/stonemason/__init__.py create mode 100644 tests/stonemason/service/__init__.py create mode 100644 tests/stonemason/service/tileserver/__init__.py create mode 100644 tests/stonemason/service/tileserver/test_tileserver.py diff --git a/instance/settings.py b/instance/settings.py new file mode 100644 index 0000000..6ce3e97 --- /dev/null +++ b/instance/settings.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +# Recommended Configurations + +# Application Mode ('production', 'development') +# EXAMPLE_APP_MODE = 'development' diff --git a/scripts/placeholder b/scripts/placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/stonemason-tileserver.py b/scripts/stonemason-tileserver.py new file mode 100755 index 0000000..2f8dbe6 --- /dev/null +++ b/scripts/stonemason-tileserver.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from stonemason.service.tileserver import AppBuilder + +application = app = AppBuilder().build('settings.py') + +if __name__ == "__main__": + application.run(host='0.0.0.0', port=8080) diff --git a/stonemason/service/tileserver/__init__.py b/stonemason/service/tileserver/__init__.py index 275af68..7413290 100644 --- a/stonemason/service/tileserver/__init__.py +++ b/stonemason/service/tileserver/__init__.py @@ -3,4 +3,5 @@ __author__ = 'kotaimen' __date__ = '1/5/15' +from .tileserver import AppBuilder diff --git a/stonemason/service/tileserver/default_settings.py b/stonemason/service/tileserver/default_settings.py new file mode 100644 index 0000000..beb9e47 --- /dev/null +++ b/stonemason/service/tileserver/default_settings.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +# Application Mode +# 'production', 'development' +EXAMPLE_APP_MODE = 'production' + diff --git a/stonemason/service/tileserver/tileserver.py b/stonemason/service/tileserver/tileserver.py new file mode 100644 index 0000000..dedf113 --- /dev/null +++ b/stonemason/service/tileserver/tileserver.py @@ -0,0 +1,36 @@ +# -*- encoding: utf-8 -*- + +import os +from flask import Flask + +from . import default_settings + + +class AppBuilder(object): + """ Application Builder + """ + + def build(self, config=None): + app = Flask(__name__, instance_relative_config=True) + + # config from default settings + app.config.from_object(default_settings) + + # config from setting file + if config is not None: + app.config.from_pyfile(config, silent=True) + + # config from system environment parameters + for key, val in os.environ.items(): + if key.startswith('EXAMPLE_APP_'): + app.config[key] = val + + if app.config['EXAMPLE_APP_MODE'] == 'development': + app.config['DEBUG'] = True + app.config['TESTING'] = True + + @app.route('/') + def hello_world(): + return 'Hello World!' + + return app diff --git a/tests/stonemason/__init__.py b/tests/stonemason/__init__.py new file mode 100644 index 0000000..dae354a --- /dev/null +++ b/tests/stonemason/__init__.py @@ -0,0 +1 @@ +# -*- encoding: utf-8 -*- diff --git a/tests/stonemason/service/__init__.py b/tests/stonemason/service/__init__.py new file mode 100644 index 0000000..dae354a --- /dev/null +++ b/tests/stonemason/service/__init__.py @@ -0,0 +1 @@ +# -*- encoding: utf-8 -*- diff --git a/tests/stonemason/service/tileserver/__init__.py b/tests/stonemason/service/tileserver/__init__.py new file mode 100644 index 0000000..dae354a --- /dev/null +++ b/tests/stonemason/service/tileserver/__init__.py @@ -0,0 +1 @@ +# -*- encoding: utf-8 -*- diff --git a/tests/stonemason/service/tileserver/test_tileserver.py b/tests/stonemason/service/tileserver/test_tileserver.py new file mode 100644 index 0000000..a9a801e --- /dev/null +++ b/tests/stonemason/service/tileserver/test_tileserver.py @@ -0,0 +1,17 @@ +# -*- encoding: utf-8 -*- + +import os +import unittest +from stonemason.service.tileserver import AppBuilder + + +class TestExample(unittest.TestCase): + def setUp(self): + os.environ['EXAMPLE_APP_ENV'] = 'dev' + + app = AppBuilder().build() + self.client = app.test_client() + + def test_app(self): + resp = self.client.get('/') + self.assertEqual('Hello World!', resp.data) From 138fd41960013b11ae1c49d46140b69c24b27abd Mon Sep 17 00:00:00 2001 From: ray Date: Tue, 6 Jan 2015 17:19:19 +0800 Subject: [PATCH 004/179] Fix: Fix a compatible bug. Response data is binary in Python 3. --- tests/stonemason/service/tileserver/test_tileserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/stonemason/service/tileserver/test_tileserver.py b/tests/stonemason/service/tileserver/test_tileserver.py index a9a801e..08fe78f 100644 --- a/tests/stonemason/service/tileserver/test_tileserver.py +++ b/tests/stonemason/service/tileserver/test_tileserver.py @@ -14,4 +14,4 @@ def setUp(self): def test_app(self): resp = self.client.get('/') - self.assertEqual('Hello World!', resp.data) + self.assertEqual(b'Hello World!', resp.data) From 8e30b99eda72de22938181d193c3e1b7434674f5 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Tue, 6 Jan 2015 17:21:14 +0800 Subject: [PATCH 005/179] FEATURE: Add grid_crop to utils package --- MANIFEST.in | 1 + setup.py | 18 ++- .../cartographer => composer}/__init__.py | 0 stonemason/util/postprocessing/gridcrop.py | 113 ++++++++++++++++++ tests/__init__.py | 3 + tests/data/grid_crop/paletted_grid.png | Bin 0 -> 12131 bytes tests/test_stonemason.py | 19 --- tests/util/__init__.py | 6 + tests/util/postprocessing/__init__.py | 6 + tests/util/postprocessing/test_gridcrop.py | 53 ++++++++ tox.ini | 2 +- 11 files changed, 197 insertions(+), 24 deletions(-) create mode 100644 MANIFEST.in rename stonemason/renderer/{tilerenderer/cartographer => composer}/__init__.py (100%) create mode 100644 stonemason/util/postprocessing/gridcrop.py create mode 100755 tests/data/grid_crop/paletted_grid.png delete mode 100644 tests/test_stonemason.py create mode 100644 tests/util/__init__.py create mode 100644 tests/util/postprocessing/__init__.py create mode 100644 tests/util/postprocessing/test_gridcrop.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..1bddb06 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include CHANGES LICENSE AUTHORS README.md diff --git a/setup.py b/setup.py index 42df0c5..3fb6fb3 100644 --- a/setup.py +++ b/setup.py @@ -1,13 +1,10 @@ -#!/usr/bin/env python - - import re import codecs import os +import sys from setuptools import setup, find_packages - where_am_i = os.path.abspath(os.path.dirname(__file__)) @@ -29,9 +26,22 @@ def find_version(*file_paths): install_requires = [ 'six>=1.8.0', 'Flask>=0.9', + 'Pillow>=2.3.0', +] + +install_requires_PY2 = [ 'python-memcached>=1.53', ] +install_requires_PY3 = [ + 'python3-memcached>=1.51', +] + +if sys.version_info.major == 3: # can't use six here + install_requires.extend(install_requires_PY3) +else: + install_requires.extend(install_requires_PY2) + tests_require = [ 'nose', 'coverage', diff --git a/stonemason/renderer/tilerenderer/cartographer/__init__.py b/stonemason/renderer/composer/__init__.py similarity index 100% rename from stonemason/renderer/tilerenderer/cartographer/__init__.py rename to stonemason/renderer/composer/__init__.py diff --git a/stonemason/util/postprocessing/gridcrop.py b/stonemason/util/postprocessing/gridcrop.py new file mode 100644 index 0000000..912fa09 --- /dev/null +++ b/stonemason/util/postprocessing/gridcrop.py @@ -0,0 +1,113 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/5/15' + +""" Shelve buffer from a rendered map Tile, or crop a rendered MetaTile into Tiles. +Pillow is required for image IO and image processing. +""" + +import io + +import six +from PIL import Image + + +def open_image(image): + if isinstance(image, Image.Image): + # Already a PIL/Pillow image + return image + elif isinstance(image, six.binary_type): + # Bytes + return Image.open(io.BytesIO(image)) + else: + # Open a file object + return Image.open(image) + + +def shave(image, buffer_size=0): + """ Shave buffer pixel from given image. + + Shave buffer pixels from given tile image, returns a + `PIL.Image.Image` object. If `buffer_size` is zero, the image + is returned without modification. + + The given `image` can be one of: + + - PIL/Pillow Image + - `bytes` contains a image file data + - File handle of a image file + + Note the image must be square. + + Due to PIL/Pillow Image internal lazy cropping implement, the + `image` object's internal buffer must remain unchanged until + cropped image is serialized. + """ + assert buffer_size >= 0 + image = open_image(image) + + if buffer_size == 0: + return image + + width, height = image.size + assert width == height + assert buffer_size < width / 2 + + crop_box = [buffer_size, buffer_size, + width - buffer_size, + height - buffer_size] + + return image.crop(crop_box) + + +def grid_crop(image, stride=1, buffer_size=0): + """ Crop a image into grids + + Crop a large image into a `stride x stride` image grid, shave + extra buffer pixels during the process (aka: `MetaTile` fission). + + The given `image` can be one of: + + - PIL/Pillow Image + - `bytes` contains a image file data + - File handle of a image file + + Returns a `dict` of small grid images:: + + (row, column): Image.Image object + + Note the image must be square. + + Due to PIL/Pillow Image internal lazy cropping implement, the + `image` object's internal buffer must remain unchanged until + cropped image is serialized. + """ + + assert stride >= 1 + + if stride == 1: + return {(0, 0): shave(image, buffer_size=buffer_size)} + + image = open_image(image) + + width, height = image.size + assert width == height + assert buffer_size < width / 2 + rows, columns = stride, stride + grid_width = grid_height = width // stride + + grids = dict() + for row in range(0, rows): + for column in range(0, columns): + left = row * grid_width + buffer_size + top = column * grid_height + buffer_size + right = left + grid_width + bottom = top + grid_height + + crop_box = (left, top, right, bottom) + grid = image.crop(crop_box) + grids[(row, column)] = grid + + return grids + diff --git a/tests/__init__.py b/tests/__init__.py index bace2c1..e633b46 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -3,4 +3,7 @@ __author__ = 'kotaimen' __date__ = '12/25/14' +import os + +DATA_DIRECTORY = os.path.join(os.path.dirname(__file__), 'data') diff --git a/tests/data/grid_crop/paletted_grid.png b/tests/data/grid_crop/paletted_grid.png new file mode 100755 index 0000000000000000000000000000000000000000..3f0ce0c888626b5ca311901aa8c731c8ef5d09e2 GIT binary patch literal 12131 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®pv3TPKbjwhtScA9??9qDl^P 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 Date: Tue, 6 Jan 2015 20:39:58 +0800 Subject: [PATCH 006/179] FIX: bug in grid_crop () which cause buffer_size unused during cropping TEST: added unites for shave() --- stonemason/util/postprocessing/gridcrop.py | 2 + tests/util/postprocessing/test_gridcrop.py | 65 +++++++++++++++++----- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/stonemason/util/postprocessing/gridcrop.py b/stonemason/util/postprocessing/gridcrop.py index 912fa09..649d74e 100644 --- a/stonemason/util/postprocessing/gridcrop.py +++ b/stonemason/util/postprocessing/gridcrop.py @@ -94,6 +94,8 @@ def grid_crop(image, stride=1, buffer_size=0): width, height = image.size assert width == height assert buffer_size < width / 2 + width -= buffer_size * 2 + height -= buffer_size * 2 rows, columns = stride, stride grid_width = grid_height = width // stride diff --git a/tests/util/postprocessing/test_gridcrop.py b/tests/util/postprocessing/test_gridcrop.py index 9fa0a9a..c8d86ba 100644 --- a/tests/util/postprocessing/test_gridcrop.py +++ b/tests/util/postprocessing/test_gridcrop.py @@ -5,17 +5,31 @@ import unittest import os +import tempfile + from distutils.version import StrictVersion +import six import PIL from PIL import Image -from six import print_ -from stonemason.util.postprocessing.gridcrop import * +import stonemason.util.postprocessing.gridcrop as gridcrop from tests import DATA_DIRECTORY class TestPIL(unittest.TestCase): + def assertImageEqual(self, first, second): + assert isinstance(first, Image.Image) + assert isinstance(second, Image.Image) + # NOTE: We can't use TestCase.assertEqual() here since it will try to + # generate a extremely large "diff report" if test fails. + self.assertTrue(list(first.getdata()) == list(second.getdata())) + + def assertImageNotEqual(self, first, second): + assert isinstance(first, Image.Image) + assert isinstance(second, Image.Image) + self.assertFalse(list(first.getdata()) == list(second.getdata())) + def setUp(self): grid_image = os.path.join(DATA_DIRECTORY, 'grid_crop', 'paletted_grid.png') @@ -29,24 +43,45 @@ def test_version(self): self.assertGreaterEqual(StrictVersion(PIL.PILLOW_VERSION), StrictVersion('2.0.0')) except AttributeError: - # PIL must be 1.1.7 + # PIL version must be 1.1.7 self.assertEqual(StrictVersion(PIL.VERSION), StrictVersion('1.1.7')) + def test_shave(self): + self.assertEqual(self.grid_image.size, (1024, 1024)) + expected_cropped_image = self.grid_image.crop((256, 256, 768, 768)) + + self.assertImageEqual(expected_cropped_image, + gridcrop.shave(self.grid_image, 256)) + + self.assertImageEqual(expected_cropped_image, + gridcrop.shave(self.grid_file, 256)) + + self.assertImageEqual(expected_cropped_image, + gridcrop.shave(self.grid_data, 256)) + + self.assertImageNotEqual(expected_cropped_image, + gridcrop.shave(self.grid_data, 0)) + + def test_grid_crop(self): + grids = gridcrop.grid_crop(self.grid_data, stride=2, + buffer_size=256) + # visual confirm + # for (row, column), image in six.iteritems(grids): + # filename = os.path.join(tempfile.gettempdir(), + # '%d-%d.png' % (row, column)) + # six.print_(filename) + # image.save(filename) + + self.assertImageEqual(grids[(0, 0)], + self.grid_image.crop((256, 256, 512, 512))) + + self.assertImageEqual(grids[(0, 1)], + self.grid_image.crop((256, 512, 512, 768))) - self.assertEqual( - len(grid_crop(self.grid_data, stride=2, buffer_size=0)), - 4) - self.assertEqual( - len(grid_crop(self.grid_data, stride=4, buffer_size=0)), - 16) - self.assertEqual( - len(grid_crop(self.grid_data, stride=1, buffer_size=0)), - 1) - self.assertEqual( - len(grid_crop(self.grid_data, stride=2, buffer_size=256)), - 4) + self.assertImageEqual(grids[(1, 0)], + self.grid_image.crop((512, 256, 768, 512))) if __name__ == '__main__': From 9603aeaa785de76ade9a62ac0576e0f7bfda8c81 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Wed, 7 Jan 2015 21:09:53 +0800 Subject: [PATCH 007/179] DOC: Update docstring of `gridcrop` --- stonemason/util/postprocessing/__init__.py | 7 +++ stonemason/util/postprocessing/gridcrop.py | 60 ++++++++++++++-------- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/stonemason/util/postprocessing/__init__.py b/stonemason/util/postprocessing/__init__.py index 275af68..e95f8ee 100644 --- a/stonemason/util/postprocessing/__init__.py +++ b/stonemason/util/postprocessing/__init__.py @@ -3,4 +3,11 @@ __author__ = 'kotaimen' __date__ = '1/5/15' +""" + stonemason.util.postprocessing + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Image postprocessing utilities. + +""" diff --git a/stonemason/util/postprocessing/gridcrop.py b/stonemason/util/postprocessing/gridcrop.py index 649d74e..87da991 100644 --- a/stonemason/util/postprocessing/gridcrop.py +++ b/stonemason/util/postprocessing/gridcrop.py @@ -3,8 +3,15 @@ __author__ = 'kotaimen' __date__ = '1/5/15' -""" Shelve buffer from a rendered map Tile, or crop a rendered MetaTile into Tiles. -Pillow is required for image IO and image processing. +""" + stonemason.util.postprocessing.gridrop + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Shelve buffer from a rendered map Tile, or crop a rendered MetaTile + into Tiles. + + PIL/Pillow is required for image IO and image processing. + """ import io @@ -28,21 +35,26 @@ def open_image(image): def shave(image, buffer_size=0): """ Shave buffer pixel from given image. - Shave buffer pixels from given tile image, returns a - `PIL.Image.Image` object. If `buffer_size` is zero, the image + Shave buffer pixels from the given tile image, returns a + `PIL.Image.Image` object. If `buffer_size` is zero, given image is returned without modification. - The given `image` can be one of: + Given image can be one of: - - PIL/Pillow Image + - PIL/Pillow image - `bytes` contains a image file data - - File handle of a image file + - `fp` of a image file (real file or `io.BytesIO`) - Note the image must be square. - - Due to PIL/Pillow Image internal lazy cropping implement, the + Due to PIL/Pillow Image internal lazy cropping implement, given `image` object's internal buffer must remain unchanged until cropped image is serialized. + + :param image: Image to crop, must be square. + :type image: `PIL.Image.Image` or `bytes` or `file` + :param buffer_size: Size of the buffer to be shaved each side in pixels, + default is 0, means no buffer is shaved. + :return: Cropped image. + :returns: `PIL.Image.Image` """ assert buffer_size >= 0 image = open_image(image) @@ -62,26 +74,32 @@ def shave(image, buffer_size=0): def grid_crop(image, stride=1, buffer_size=0): - """ Crop a image into grids + """ Crop given MetaTile image into a grid - Crop a large image into a `stride x stride` image grid, shave - extra buffer pixels during the process (aka: `MetaTile` fission). + Crop a large image into a ``stride x stride`` image grid, shave + extra buffer pixels during the process (aka: MetaTile *fission*). - The given `image` can be one of: + Given image can be one of: - - PIL/Pillow Image + - PIL/Pillow image - `bytes` contains a image file data - - File handle of a image file + - `fp` of a image file (real file or `io.BytesIO`) - Returns a `dict` of small grid images:: + Returns a dictionary of small grid images:: - (row, column): Image.Image object + (row, column): image - Note the image must be square. - - Due to PIL/Pillow Image internal lazy cropping implement, the + Due to PIL/Pillow Image internal lazy cropping implement, given `image` object's internal buffer must remain unchanged until cropped image is serialized. + + :param image: Image to crop, must be square. + :type image: `PIL.Image.Image` or `bytes` or `file` + :param stride: Number of grid images per axis. + :param buffer_size: Size of the buffer to be shaved each side in pixels, + default is 0, means no buffer is shaved. + :return: A dictionary of cropped image. + :returns: dict """ assert stride >= 1 From 5aa2cc99ca171fea5a9d4cad9bf31f6b54fbe738 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Thu, 8 Jan 2015 09:52:07 +0800 Subject: [PATCH 008/179] CHORE: Add python3 to setup.py --- README.md | 7 +++---- setup.py | 3 +++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index afe4530..22b8a19 100644 --- a/README.md +++ b/README.md @@ -21,11 +21,10 @@ Similar solutions: ## Dependencies -> Geospatial related modules only supports py27 - - Python2>=2.7 -- flask>=0.10 -- pillow>=2.6 +- Python3>=3.3 (Geospatial related modules only supports py27) +- flask>=0.9 +- pillow>=2.3 - numpy>=1.9, scipy>=0.10.0 (Optional) - mapnik>=2.2 (Optional) - geos>=3.3, gdal>=1.10 (Optional) diff --git a/setup.py b/setup.py index 3fb6fb3..465e892 100644 --- a/setup.py +++ b/setup.py @@ -74,6 +74,9 @@ def find_version(*file_paths): 'Topic :: Internet :: WWW/HTTP :: WSGI :: Server', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', ], keywords='map tile mapnik gdal tms', author='The Stonemasons', From 0ce398790e734f3e1ecd687ac5cab3d5fcdee6fc Mon Sep 17 00:00:00 2001 From: ray Date: Thu, 8 Jan 2015 11:30:45 +0800 Subject: [PATCH 009/179] DOC: Update docstring for tileserver and tests --- stonemason/service/tileserver/__init__.py | 7 +++++-- stonemason/service/tileserver/default_settings.py | 8 ++++++++ stonemason/service/tileserver/tileserver.py | 6 ++++++ tests/stonemason/service/tileserver/__init__.py | 7 +++++++ tests/stonemason/service/tileserver/test_tileserver.py | 7 +++++++ 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/stonemason/service/tileserver/__init__.py b/stonemason/service/tileserver/__init__.py index 7413290..a07838c 100644 --- a/stonemason/service/tileserver/__init__.py +++ b/stonemason/service/tileserver/__init__.py @@ -1,7 +1,10 @@ # -*- encoding: utf-8 -*- +""" + stonemason.service.tileserver + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -__author__ = 'kotaimen' -__date__ = '1/5/15' + A high performance tile server WSGI application based on Flask. +""" from .tileserver import AppBuilder diff --git a/stonemason/service/tileserver/default_settings.py b/stonemason/service/tileserver/default_settings.py index beb9e47..bb28225 100644 --- a/stonemason/service/tileserver/default_settings.py +++ b/stonemason/service/tileserver/default_settings.py @@ -1,4 +1,12 @@ # -*- encoding: utf-8 -*- +""" + stonemason.service.tileserver.default_settings + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Default configuration for the tile server + +""" + # Application Mode # 'production', 'development' diff --git a/stonemason/service/tileserver/tileserver.py b/stonemason/service/tileserver/tileserver.py index dedf113..8153e88 100644 --- a/stonemason/service/tileserver/tileserver.py +++ b/stonemason/service/tileserver/tileserver.py @@ -1,5 +1,11 @@ # -*- encoding: utf-8 -*- +""" + stonemason.service.tileserver.tileserver + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Implements the tile server for Stonemason. + +""" import os from flask import Flask diff --git a/tests/stonemason/service/tileserver/__init__.py b/tests/stonemason/service/tileserver/__init__.py index dae354a..d94eef6 100644 --- a/tests/stonemason/service/tileserver/__init__.py +++ b/tests/stonemason/service/tileserver/__init__.py @@ -1 +1,8 @@ # -*- encoding: utf-8 -*- +""" + tests.stonemason.service.tileserver + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Test the tile server module. + +""" diff --git a/tests/stonemason/service/tileserver/test_tileserver.py b/tests/stonemason/service/tileserver/test_tileserver.py index 08fe78f..ce5c2c8 100644 --- a/tests/stonemason/service/tileserver/test_tileserver.py +++ b/tests/stonemason/service/tileserver/test_tileserver.py @@ -1,4 +1,11 @@ # -*- encoding: utf-8 -*- +""" + tests.stonemason.service.tileserver.test_tileserver + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Test interfaces of the tile server application. + +""" import os import unittest From a509cd74d1e49dd9f9585b8e4c43e88aaf2bc19d Mon Sep 17 00:00:00 2001 From: ray Date: Thu, 8 Jan 2015 11:46:05 +0800 Subject: [PATCH 010/179] TEST: Update tests for the test app --- tests/stonemason/service/tileserver/test_tileserver.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/stonemason/service/tileserver/test_tileserver.py b/tests/stonemason/service/tileserver/test_tileserver.py index ce5c2c8..732ef74 100644 --- a/tests/stonemason/service/tileserver/test_tileserver.py +++ b/tests/stonemason/service/tileserver/test_tileserver.py @@ -14,9 +14,9 @@ class TestExample(unittest.TestCase): def setUp(self): - os.environ['EXAMPLE_APP_ENV'] = 'dev' + os.environ['EXAMPLE_APP_MODE'] = 'development' - app = AppBuilder().build() + app = AppBuilder().build(config='settings.py') self.client = app.test_client() def test_app(self): From 3f177a5fb660c382c91013cb70386116b68d739f Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 10 Jan 2015 00:58:55 +0800 Subject: [PATCH 011/179] FEATURE: Hilbert curve algorithms (using Cython due to unsigned bit operation limit in Python) --- stonemason/util/geo/_hilbert.pyx | 60 ++++++++++++++++++ stonemason/util/geo/hilbert.py | 44 +++++++++++++ tests/util/geo/__init__.py | 6 ++ tests/util/geo/test_hilbert.py | 103 +++++++++++++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 stonemason/util/geo/_hilbert.pyx create mode 100644 stonemason/util/geo/hilbert.py create mode 100644 tests/util/geo/__init__.py create mode 100644 tests/util/geo/test_hilbert.py diff --git a/stonemason/util/geo/_hilbert.pyx b/stonemason/util/geo/_hilbert.pyx new file mode 100644 index 0000000..d1391ec --- /dev/null +++ b/stonemason/util/geo/_hilbert.pyx @@ -0,0 +1,60 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/9/15' + +""" +Hilbert curve algorithms are taken from (and modified): + Henry S. Warren, Jr., Hakers's Delight Second Edition, 2012. + Chapter 16: Hilbert's Curve +""" + +def hil_xy_from_s(unsigned long long s, int n): + + cdef int i + cdef unsigned long long sa, sb + cdef unsigned long long x, y, swap, cmpl + cdef unsigned long long xp, yp + + x = 0 + y = 0 + + for i in range(0, 2 * n, 2): + sa = (s >> (i + 1)) & 1 + sb = (s >> i) & 1 + + swap = (sa ^ sb) - 1 + cmpl = -(sa & sb) + x = x ^ y + y = y ^ (x & swap) ^ cmpl + x = x ^ y + + x = (x >> 1) | (sa << 63) + y = (y >> 1) | ((sa ^ sb) << 63) + + xp = x >> (64 - n) + yp = y >> (64 - n) + + return xp, yp + + +def hil_s_from_xy(unsigned long long x, unsigned long long y, int n): + + cdef int i, xi, yi + cdef unsigned long long s + + s = 0 + for i in range(n-1, -1,-1): + xi = (x >> i) & 1 + yi = (y >> i) & 1 + s = 4 * s + 2 * xi + (xi ^ yi) + + x = x ^ y + y = y ^ (x & (yi - 1)) + x = x ^ y; + + x = x ^ (-xi & (yi - 1)) + y = y ^ (-xi & (yi - 1)) + + return s + diff --git a/stonemason/util/geo/hilbert.py b/stonemason/util/geo/hilbert.py new file mode 100644 index 0000000..c327d2d --- /dev/null +++ b/stonemason/util/geo/hilbert.py @@ -0,0 +1,44 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/8/15' + +""" + stonemason.util.geo.hilbert + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Hilbert curve calculations. + +""" + +# XXX: This is implemented cython for unsigned integer bit operation +from . import _hilbert + + +def hil_xy_from_s(s, n): + """ Compute coordinate from given Hilbert curve length. + + :param s: Length of the Hilbert curve. + :param n: Order of the Hilbert curve + :return: Coordinate as a tuple (x, y). + :returns: tuple + """ + assert n < 64 + assert s < 4 ** n + return _hilbert.hil_xy_from_s(s, n) + + +def hil_s_from_xy(x, y, n): + """ Compute Hilbert curve length from given coordinate + + Given the "order" n of a Hilbert curve and coordinates x and y, + computes the length s of the curve from the origin to (x, y). + + :param x: x coordinate. + :param y: y coordinate. + :param n: Order of the Hilbert curve + :return: Hilbert curve length + :returns: int + """ + assert n < 64 + return _hilbert.hil_s_from_xy(x, y, n) diff --git a/tests/util/geo/__init__.py b/tests/util/geo/__init__.py new file mode 100644 index 0000000..a785ec4 --- /dev/null +++ b/tests/util/geo/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/8/15' + + diff --git a/tests/util/geo/test_hilbert.py b/tests/util/geo/test_hilbert.py new file mode 100644 index 0000000..5dd83d1 --- /dev/null +++ b/tests/util/geo/test_hilbert.py @@ -0,0 +1,103 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/8/15' + +import unittest + +import stonemason.util.geo.hilbert as hilbert + + +class TestHibertCurve(unittest.TestCase): + def test_xy_from_s_order0(self): + # Order 0 Hilbert curve + self.assertEqual(hilbert.hil_xy_from_s(0, 1), (0, 0)) + + def test_xy_from_s_order1(self): + # Order 1 Hilbert curve + #### 0 1 x + #### |--------| + # 0 | 0 3 | + # 1 | 1 2 | + # y |--------| + self.assertEqual(hilbert.hil_xy_from_s(0, 1), (0, 0)) + self.assertEqual(hilbert.hil_xy_from_s(1, 1), (0, 1)) + self.assertEqual(hilbert.hil_xy_from_s(2, 1), (1, 1)) + self.assertEqual(hilbert.hil_xy_from_s(3, 1), (1, 0)) + + def test_xy_from_s_order2(self): + # Order 2 Hilbert curve + ###### 0 1 2 3 x + ### |--------------| + # 0 | 0 1 14 15 | + # 1 | 3 2 13 12 | + # 2 | 4 7 8 11 | + # 3 | 5 6 9 10 | + # y |--------------| + self.assertEqual(hilbert.hil_xy_from_s(0, 2), (0, 0)) + self.assertEqual(hilbert.hil_xy_from_s(1, 2), (1, 0)) + self.assertEqual(hilbert.hil_xy_from_s(2, 2), (1, 1)) + self.assertEqual(hilbert.hil_xy_from_s(3, 2), (0, 1)) + self.assertEqual(hilbert.hil_xy_from_s(4, 2), (0, 2)) + self.assertEqual(hilbert.hil_xy_from_s(5, 2), (0, 3)) + self.assertEqual(hilbert.hil_xy_from_s(6, 2), (1, 3)) + self.assertEqual(hilbert.hil_xy_from_s(7, 2), (1, 2)) + self.assertEqual(hilbert.hil_xy_from_s(8, 2), (2, 2)) + self.assertEqual(hilbert.hil_xy_from_s(9, 2), (2, 3)) + self.assertEqual(hilbert.hil_xy_from_s(10, 2), (3, 3)) + self.assertEqual(hilbert.hil_xy_from_s(11, 2), (3, 2)) + self.assertEqual(hilbert.hil_xy_from_s(12, 2), (3, 1)) + self.assertEqual(hilbert.hil_xy_from_s(13, 2), (2, 1)) + self.assertEqual(hilbert.hil_xy_from_s(14, 2), (2, 0)) + self.assertEqual(hilbert.hil_xy_from_s(15, 2), (3, 0)) + + def test_xy_from_s_order3(self): + # Order 3 Hilbert curve + self.assertEqual(hilbert.hil_xy_from_s(60, 3), (6, 0)) + self.assertEqual(hilbert.hil_xy_from_s(61, 3), (6, 1)) + self.assertEqual(hilbert.hil_xy_from_s(62, 3), (7, 1)) + self.assertEqual(hilbert.hil_xy_from_s(63, 3), (7, 0)) + + def test_xy_from_s_large(self): + self.assertEqual(hilbert.hil_xy_from_s(12345678, 14), + (3776, 2138)) + + self.assertEqual(hilbert.hil_xy_from_s(12345678, 15), + (2138, 3776)) + + self.assertEqual(hilbert.hil_xy_from_s(12345678, 19), + (2138, 3776)) + + self.assertEqual(hilbert.hil_xy_from_s(12345678, 20), + (3776, 2138)) + + self.assertEqual(hilbert.hil_xy_from_s(829371542099833, 25), + (31152875, 17840406)) + + def test_s_from_xy_order0(self): + self.assertEqual(hilbert.hil_s_from_xy(0, 0, 1), 0) + + def test_xy_from_s_order1(self): + order = 1 + for s in range(4 ** order): + x, y = hilbert.hil_xy_from_s(s, order) + self.assertEqual(hilbert.hil_s_from_xy(x, y, order), s) + + def test_xy_from_s_order2(self): + order = 2 + for s in range(4 ** order): + x, y = hilbert.hil_xy_from_s(s, order) + self.assertEqual(hilbert.hil_s_from_xy(x, y, order), s) + + + def test_xy_from_s_large(self): + self.assertEqual(hilbert.hil_s_from_xy(2138, 3776, 15), 12345678) + self.assertEqual(hilbert.hil_s_from_xy(2138, 3776, 19), 12345678) + self.assertEqual(hilbert.hil_s_from_xy(3776, 2138, 20), 12345678) + + self.assertEqual(hilbert.hil_s_from_xy(31152875, 17840406, 25), + 829371542099833) + + +if __name__ == '__main__': + unittest.main() From b883c6d4c118be623efdebac0b3415825bd499ac Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 10 Jan 2015 01:01:06 +0800 Subject: [PATCH 012/179] CHORE: Ignore Python generated c sources in git --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index d1eadd9..a811605 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ var/ *.egg-info/ .installed.cfg *.egg +.eggs/ # PyInstaller # Usually these files are written by a python script from a template @@ -55,3 +56,7 @@ target/ # PyCharm .idea/ + +# C sources generated by Cython +stonemason/util/geo/*.c + From 0d9c417a6edb60168c0146122089357ddfd86fef Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 10 Jan 2015 01:02:04 +0800 Subject: [PATCH 013/179] CHORE: Change tox configuration so nosetests don't test against local package, but package installed in the virtual environment --- setup.cfg | 1 - tox.ini | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/setup.cfg b/setup.cfg index fa166b9..63589bf 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,7 +2,6 @@ universal=1 [nosetests] -tests=tests with-coverage=1 cover-min-percentage=80 cover-package=stonemason diff --git a/tox.ini b/tox.ini index ff829e2..4773ee8 100644 --- a/tox.ini +++ b/tox.ini @@ -7,8 +7,10 @@ envlist = py27, py34 [testenv] -commands = nosetests +changedir=tests +commands = + nosetests --no-path-adjustment deps = nose coverage - -rrequirements.txt + Cython From e6d644147421ebddd9d19e2e4ddf1165ed25ef9f Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 10 Jan 2015 01:06:09 +0800 Subject: [PATCH 014/179] CHORE: Include pyx files in the distribution manifest. Also rewrite setup.py so: - When Cython is installed, build .pyx into c extension - bdist includes the extension - sdist includes the c source compiled from .pyx - When Cython is not installed, try build c extension using c source --- MANIFEST.in | 1 + setup.py | 78 ++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 69 insertions(+), 10 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 1bddb06..5b95ad9 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1,2 @@ include CHANGES LICENSE AUTHORS README.md +recursive-include stonemason *.pyx diff --git a/setup.py b/setup.py index 465e892..977306d 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,24 @@ import sys from setuptools import setup, find_packages +from distutils.extension import Extension +from distutils.command.sdist import sdist as sdist_ +# Can't use six here +IS_PY3 = sys.version_info.major == 3 + +# Check Cython availability +try: + from Cython.Distutils import build_ext +except ImportError: + HAS_CYTHON = False +else: + HAS_CYTHON = True + + +# +# Find package version +# where_am_i = os.path.abspath(os.path.dirname(__file__)) @@ -23,30 +40,29 @@ def find_version(*file_paths): long_description = read('README.md') +# +# Requirements +# install_requires = [ 'six>=1.8.0', 'Flask>=0.9', 'Pillow>=2.3.0', + 'pylibmc>=1.4.1', ] -install_requires_PY2 = [ - 'python-memcached>=1.53', -] -install_requires_PY3 = [ - 'python3-memcached>=1.51', -] - -if sys.version_info.major == 3: # can't use six here - install_requires.extend(install_requires_PY3) +# Memcached have a different name under python 3 +if not IS_PY3: + install_requires += ['python-memcached>=1.53', ] else: - install_requires.extend(install_requires_PY2) + install_requires += ['python3-memcached>=1.51', ] tests_require = [ 'nose', 'coverage', 'virtualenv>=1.10', 'mock', + 'Cython>=0.17.0' ] find_excludes = [ @@ -56,9 +72,45 @@ def find_version(*file_paths): py_modules = [] + +# +# Cython extension modules +# + +ext_modules = [] + +cmdclass = {} + +if HAS_CYTHON: + # Build c and .so from pyx + ext_modules += [ + Extension('stonemason.util.geo._hilbert', + ['stonemason/util/geo/_hilbert.pyx']) + ] + cmdclass['build_ext'] = build_ext + + class sdist(sdist_): + def run(self): + # Force build c source for sdist + from Cython.Build import cythonize + + cythonize(['stonemason/util/geo/_hilbert.pyx'], + force=True) + sdist_.run(self) + + cmdclass['sdist'] = sdist + +else: + # No Cython, assuming build using sdist, just build .so from c + ext_modules += [ + Extension('stonemason.util.geo._hilbert', + ['stonemason/util/geo/_hilbert.c']) + ] + package_data = {} setup( + name='stonemason', version=find_version('stonemason', '__init__.py'), description='Map tile service toolkit.', @@ -72,6 +124,7 @@ def find_version(*file_paths): 'Topic :: Scientific/Engineering :: GIS', 'Topic :: Multimedia :: Graphics', 'Topic :: Internet :: WWW/HTTP :: WSGI :: Server', + 'Programming Language :: Cython', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', @@ -83,13 +136,18 @@ def find_version(*file_paths): author_email='kotaimen.c@gmail.com, gliese.q@gmail.com', url='http://github.com/kotaimen/stonemason', license='MIT', + py_modules=py_modules, + ext_modules=ext_modules, packages=find_packages(exclude=find_excludes), package_data=package_data, + install_requires=install_requires, tests_require=tests_require, test_suite='tests', zip_safe=False, + cmdclass=cmdclass, + extras_require={ 'testing': tests_require, } From aa57aa787f3818650a8213fcd81b01541e621460 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 10 Jan 2015 11:03:50 +0800 Subject: [PATCH 015/179] CHCHORE: Include pyx files in setup.py instead of MANIFEST.in --- MANIFEST.in | 1 - setup.py | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 5b95ad9..1bddb06 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,2 +1 @@ include CHANGES LICENSE AUTHORS README.md -recursive-include stonemason *.pyx diff --git a/setup.py b/setup.py index 977306d..30ee297 100644 --- a/setup.py +++ b/setup.py @@ -106,7 +106,7 @@ def run(self): Extension('stonemason.util.geo._hilbert', ['stonemason/util/geo/_hilbert.c']) ] - + package_data = {} setup( @@ -141,14 +141,16 @@ def run(self): ext_modules=ext_modules, packages=find_packages(exclude=find_excludes), package_data=package_data, + entry_points=entry_points, install_requires=install_requires, tests_require=tests_require, test_suite='tests', - zip_safe=False, +# zip_safe=False, cmdclass=cmdclass, extras_require={ 'testing': tests_require, } + ) From c4ebd19edd4e08366222e97cfea52f216753e73c Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 10 Jan 2015 11:07:13 +0800 Subject: [PATCH 016/179] DOC: Update package doc string headers --- stonemason/__init__.py | 7 +++++++ stonemason/provider/__init__.py | 5 +++++ stonemason/provider/pyramid/__init__.py | 6 ++++++ stonemason/provider/tilecache/__init__.py | 6 ++++++ stonemason/util/__init__.py | 5 +++++ 5 files changed, 29 insertions(+) diff --git a/stonemason/__init__.py b/stonemason/__init__.py index d8a7e5d..f277565 100644 --- a/stonemason/__init__.py +++ b/stonemason/__init__.py @@ -3,6 +3,13 @@ __author__ = 'kotaimen' __date__ = '12/22/14' +""" + stonemason + ~~~~~~~~~~ + + Map tile service toolkit. +""" + # Version used in the setup.py __version__ = '0.0.1.dev0' diff --git a/stonemason/provider/__init__.py b/stonemason/provider/__init__.py index 275af68..5127402 100644 --- a/stonemason/provider/__init__.py +++ b/stonemason/provider/__init__.py @@ -3,4 +3,9 @@ __author__ = 'kotaimen' __date__ = '1/5/15' +""" + stonemason.tileprovider + ~~~~~~~~~~~~~~~~~~~~~~~ + Namespace package for things spit Tile or MetaTile. +""" diff --git a/stonemason/provider/pyramid/__init__.py b/stonemason/provider/pyramid/__init__.py index 5e4d831..3632bff 100644 --- a/stonemason/provider/pyramid/__init__.py +++ b/stonemason/provider/pyramid/__init__.py @@ -4,3 +4,9 @@ __date__ = '12/26/14' +""" + stonemason.provider.pyramid + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Logic of the quad-tree (aka: pyramid) tile map system. +""" diff --git a/stonemason/provider/tilecache/__init__.py b/stonemason/provider/tilecache/__init__.py index 5e4d831..d9dbc1a 100644 --- a/stonemason/provider/tilecache/__init__.py +++ b/stonemason/provider/tilecache/__init__.py @@ -4,3 +4,9 @@ __date__ = '12/26/14' +""" + stonemason.provider.tilecache + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + A cache of tiles. +""" diff --git a/stonemason/util/__init__.py b/stonemason/util/__init__.py index 275af68..478fa5f 100644 --- a/stonemason/util/__init__.py +++ b/stonemason/util/__init__.py @@ -3,4 +3,9 @@ __author__ = 'kotaimen' __date__ = '1/5/15' +""" + stonemason.util + ~~~~~~~~~~~~~~~ + Utilities. +""" From 431d81e9a89283a6747409ef3fbf295a674c6fc7 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 10 Jan 2015 12:22:36 +0800 Subject: [PATCH 017/179] REFACTOR: Move util tests to test.stonemason package --- tests/{ => stonemason}/util/__init__.py | 0 tests/{ => stonemason}/util/geo/__init__.py | 0 tests/{ => stonemason}/util/geo/test_hilbert.py | 0 tests/{ => stonemason}/util/postprocessing/__init__.py | 0 tests/{ => stonemason}/util/postprocessing/test_gridcrop.py | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename tests/{ => stonemason}/util/__init__.py (100%) rename tests/{ => stonemason}/util/geo/__init__.py (100%) rename tests/{ => stonemason}/util/geo/test_hilbert.py (100%) rename tests/{ => stonemason}/util/postprocessing/__init__.py (100%) rename tests/{ => stonemason}/util/postprocessing/test_gridcrop.py (100%) diff --git a/tests/util/__init__.py b/tests/stonemason/util/__init__.py similarity index 100% rename from tests/util/__init__.py rename to tests/stonemason/util/__init__.py diff --git a/tests/util/geo/__init__.py b/tests/stonemason/util/geo/__init__.py similarity index 100% rename from tests/util/geo/__init__.py rename to tests/stonemason/util/geo/__init__.py diff --git a/tests/util/geo/test_hilbert.py b/tests/stonemason/util/geo/test_hilbert.py similarity index 100% rename from tests/util/geo/test_hilbert.py rename to tests/stonemason/util/geo/test_hilbert.py diff --git a/tests/util/postprocessing/__init__.py b/tests/stonemason/util/postprocessing/__init__.py similarity index 100% rename from tests/util/postprocessing/__init__.py rename to tests/stonemason/util/postprocessing/__init__.py diff --git a/tests/util/postprocessing/test_gridcrop.py b/tests/stonemason/util/postprocessing/test_gridcrop.py similarity index 100% rename from tests/util/postprocessing/test_gridcrop.py rename to tests/stonemason/util/postprocessing/test_gridcrop.py From fd9731996bcbfe1962f6609f8961139a25fdd844 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 10 Jan 2015 23:29:11 +0800 Subject: [PATCH 018/179] CHORE: setup.py "clean" command also cleans cython files --- MANIFEST.in | 1 + setup.py | 70 +++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 1bddb06..5d424dd 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1,2 @@ include CHANGES LICENSE AUTHORS README.md +recursive-include stonemason *.c diff --git a/setup.py b/setup.py index 30ee297..f0ab4aa 100644 --- a/setup.py +++ b/setup.py @@ -6,6 +6,9 @@ from setuptools import setup, find_packages from distutils.extension import Extension from distutils.command.sdist import sdist as sdist_ +from distutils.command.clean import clean as clean_ +from distutils import log + # Can't use six here IS_PY3 = sys.version_info.major == 3 @@ -61,7 +64,7 @@ def find_version(*file_paths): 'nose', 'coverage', 'virtualenv>=1.10', - 'mock', + # 'mock', 'Cython>=0.17.0' ] @@ -79,36 +82,71 @@ def find_version(*file_paths): ext_modules = [] +cython_modules = [ + ('stonemason.util.geo._hilbert', + ['stonemason/util/geo/_hilbert.pyx', ]), +] + +entry_points = {} + +# +# Custom commands +# + cmdclass = {} if HAS_CYTHON: - # Build c and .so from pyx - ext_modules += [ - Extension('stonemason.util.geo._hilbert', - ['stonemason/util/geo/_hilbert.pyx']) - ] + + # Build cython file when doing build_ext command + for module, sources in cython_modules: + ext_modules.append(Extension(module, sources)) + cmdclass['build_ext'] = build_ext class sdist(sdist_): + """ Build c source from Cython source for sdist """ + def run(self): - # Force build c source for sdist from Cython.Build import cythonize - cythonize(['stonemason/util/geo/_hilbert.pyx'], - force=True) + for ext in self.distribution.ext_modules: + sources = list(s for s in ext.sources if s.endswith('.pyx')) + cythonize(sources) + sdist_.run(self) cmdclass['sdist'] = sdist + class clean(clean_): + """ Removes all Cython generated C files """ + + def run(self): + clean_.run(self) + for ext in self.distribution.ext_modules: + sources = list(s for s in ext.sources if s.endswith('.pyx')) + for source in sources: + try: + log.info("removing '%s'" % source[:-3] + 'c') + os.unlink(source[:-3] + 'c') + log.info("removing '%s'" % source[:-3] + 'so') + os.unlink(source[:-3] + 'so') + except OSError: + pass + + cmdclass['clean'] = clean + else: # No Cython, assuming build using sdist, just build .so from c - ext_modules += [ - Extension('stonemason.util.geo._hilbert', - ['stonemason/util/geo/_hilbert.c']) - ] - + for module, sources in cython_modules: + c_sources = list(source[:-3] + 'c' for source in sources) + ext_modules.append(Extension(module, c_sources)) + package_data = {} +# +# Setup +# + setup( name='stonemason', @@ -146,11 +184,11 @@ def run(self): install_requires=install_requires, tests_require=tests_require, test_suite='tests', -# zip_safe=False, + # zip_safe=False, cmdclass=cmdclass, extras_require={ 'testing': tests_require, } - + ) From 83aa935a8a3ccaf653121793f9c18871f1727694 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Mon, 12 Jan 2015 12:21:47 +0800 Subject: [PATCH 019/179] CHORE: Add requirements-dev.txt for develop requirements, remove Cython requirement from setup.py --- README.md | 4 +++- requirements-dev.txt | 4 ++++ setup.cfg | 4 +++- setup.py | 6 ++---- 4 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 requirements-dev.txt diff --git a/README.md b/README.md index 22b8a19..e518b4c 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,9 @@ Similar solutions: - Python2>=2.7 - Python3>=3.3 (Geospatial related modules only supports py27) -- flask>=0.9 +- flask>=0.10 - pillow>=2.3 +- Cython>=0.19.0 - numpy>=1.9, scipy>=0.10.0 (Optional) - mapnik>=2.2 (Optional) - geos>=3.3, gdal>=1.10 (Optional) @@ -32,3 +33,4 @@ Similar solutions: - PostgreSQL>=9.1, PostGIS>=2.1 (Optional) - redis>=2.8 (Optional) - memcached>=1.4 + diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..ff0b33a --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,4 @@ +nose +coverage +tox +Cython>=0.19 diff --git a/setup.cfg b/setup.cfg index 63589bf..2f5cb4b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -3,7 +3,9 @@ universal=1 [nosetests] with-coverage=1 -cover-min-percentage=80 cover-package=stonemason +cover-erase=1 +cover-min-percentage=80 cover-html=1 cover-html-dir=htmlcov +cover-branches=1 diff --git a/setup.py b/setup.py index f0ab4aa..70bac99 100644 --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ def find_version(*file_paths): # install_requires = [ 'six>=1.8.0', - 'Flask>=0.9', + 'Flask>=0.10', 'Pillow>=2.3.0', 'pylibmc>=1.4.1', ] @@ -63,9 +63,7 @@ def find_version(*file_paths): tests_require = [ 'nose', 'coverage', - 'virtualenv>=1.10', - # 'mock', - 'Cython>=0.17.0' + 'mock', ] find_excludes = [ From 8fd27a09ebebd320a976abae4d187cdb8bbbad97 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Mon, 12 Jan 2015 15:00:22 +0800 Subject: [PATCH 020/179] CHORE: Use requirements-dev.txt to specify tox.ini deps --- requirements-dev.txt | 2 +- tox.ini | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index ff0b33a..ef38438 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,4 +1,4 @@ nose coverage -tox +tox>=1.8 Cython>=0.19 diff --git a/tox.ini b/tox.ini index 4773ee8..ec8d529 100644 --- a/tox.ini +++ b/tox.ini @@ -11,6 +11,5 @@ changedir=tests commands = nosetests --no-path-adjustment deps = - nose - coverage - Cython + -rrequirements-dev.txt + \ No newline at end of file From ff5f62a83a017d2e909a7af7a4a79e76508c1169 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Mon, 12 Jan 2015 17:02:03 +0800 Subject: [PATCH 021/179] FEATURE: Add tile serial calculation algorithm --- stonemason/provider/pyramid/serial.py | 125 ++++++++++++++++++ tests/stonemason/provider/__init__.py | 6 + tests/stonemason/provider/pyramid/__init__.py | 6 + .../provider/pyramid/test_serial.py | 54 ++++++++ 4 files changed, 191 insertions(+) create mode 100644 stonemason/provider/pyramid/serial.py create mode 100644 tests/stonemason/provider/__init__.py create mode 100644 tests/stonemason/provider/pyramid/__init__.py create mode 100644 tests/stonemason/provider/pyramid/test_serial.py diff --git a/stonemason/provider/pyramid/serial.py b/stonemason/provider/pyramid/serial.py new file mode 100644 index 0000000..55e4e8b --- /dev/null +++ b/stonemason/provider/pyramid/serial.py @@ -0,0 +1,125 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/10/15' + +""" + stonemason.provider.pyramid.serial + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Convert tile index to a serial number +""" + +import math + +import stonemason.util.geo.hilbert as hilbert + + +class Hilbert(object): + @staticmethod + def coord2serial(z, x, y): + """ Convert tile coordinate to a unique serial + + The serial is a 64bit integer, each tile has a unique, ordered serial, + higher scale zoom level tiles always has a smaller serial. + """ + assert 0 <= z <= 28 + + return (z << 58) | hilbert.hil_s_from_xy(x, y, z) + + @staticmethod + def coord2dir(z, x, y): + """ Return a directory name for a given tile coordinate. + + Each directory contains 4096 tiles or 256 subdirs. + """ + assert 0 <= z <= 28 + + dirs = ['%02d' % z, ] + + # zoom level has more than 4096 tiles + if z > 6: + # Group by Hilbert length as 64x64 blocks + block = hilbert.hil_s_from_xy(x, y, z) // 4096 + + # Max number of hex digits for the block + digits = (z - 5) // 2 + + # Hex string zero padding to even length + hex_str = ('%X' % block).zfill(digits % 2 + digits) + + dirs.extend(hex_str[i:i + 2] for i in range(0,len(hex_str), 2)) + + return dirs + + +class Legacy(object): + """ Legacy serial used in Mason and older Pathologist systems. + + Copied code, works fine but is not cool anymore (besides stupid and slow). + """ + + @staticmethod + def coord2serial(z, x, y): + """ Convert tile coordinate to an integer serial + + Flatten tile coordinate (z, x, y) to a serial by:: + + (4^(z)-1) / 3 + 2^z * y + x + + This formula is calculated form total number of tiles of layer 0~k:: + + Sum[4^n, {n, 0, k}] = (4^(k+1)-1) / 3 + + + For a 32 bit integer serial, the largest supported tile layer is 15. + For a 64 bit integer serial, the largest supported tile layer is 31. + """ + + # Limit serial to 64 bit signed integer + assert z >= 0 and z <= 31 + # Number of tile per axis + dim = 2 ** z + assert x < dim and x >= 0 and y < dim and y >= 0 + + return (4 ** z - 1) // 3 + y * dim + x + + @staticmethod + def coord2dir(z, x, y): + + """ Return a directory name list for a given tile coordinate + + Groups adjacent m*m tiles in a sub directory to improve file system + performance. Returns a list of directory names, to create a + directory str, use os.path.join(*list) + """ + + assert 0 <= z <= 31 + dim = 2 ** z + assert 0 <= x < dim and 0 <= y < dim + + # Group 4096 tiles + m = 64 + + zdiff = int(math.floor(math.log(m) / math.log(2))) + + # layer has less than m*m tiles, just use z as pathname + if z <= zdiff: + return ['%02d' % z, ] + + # metatile number + mx, my = x // m, y // m + mz = z - zdiff + mn = 2 ** mz * my + mx + + # calculate how many digits are needed + digits = len('%x' % (4 ** mz - 1)) + if digits % 2 != 0: + digits += 1 + hex_str = ('%%0%dX' % digits) % mn + + # split hex string into 2 char tuple + dirs = list((hex_str[i:i + 2] for i in range(0, len(hex_str), 2))) + dirs.insert(0, '%02d' % z) + + return dirs diff --git a/tests/stonemason/provider/__init__.py b/tests/stonemason/provider/__init__.py new file mode 100644 index 0000000..ca8de5d --- /dev/null +++ b/tests/stonemason/provider/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/10/15' + + diff --git a/tests/stonemason/provider/pyramid/__init__.py b/tests/stonemason/provider/pyramid/__init__.py new file mode 100644 index 0000000..ca8de5d --- /dev/null +++ b/tests/stonemason/provider/pyramid/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/10/15' + + diff --git a/tests/stonemason/provider/pyramid/test_serial.py b/tests/stonemason/provider/pyramid/test_serial.py new file mode 100644 index 0000000..4d77805 --- /dev/null +++ b/tests/stonemason/provider/pyramid/test_serial.py @@ -0,0 +1,54 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/10/15' + +import unittest + +import stonemason.provider.pyramid.serial as serial + + +class TestHilbert(unittest.TestCase): + def test_serial(self): + self.assertEqual(serial.Hilbert.coord2serial(0, 0, 0), 0) + self.assertEqual(serial.Hilbert.coord2serial(1, 0, 0), + 0x400000000000000) + self.assertEqual(serial.Hilbert.coord2serial(3, 4, 5), + 0xc00000000000023) + self.assertEqual(serial.Hilbert.coord2serial(8, 8, 8), + 0x2000000000000080) + self.assertEqual(serial.Hilbert.coord2serial(28, 134217727, 134217728), + 0x707fffffffffffff) + + def test_cood(self): + self.assertListEqual(serial.Hilbert.coord2dir(0, 0, 0), ['00']) + self.assertListEqual(serial.Hilbert.coord2dir(3, 4, 5), ['03']) + self.assertListEqual(serial.Hilbert.coord2dir(7, 1, 1), ['07', '00']) + self.assertListEqual(serial.Hilbert.coord2dir(7, 64, 1), ['07', '03']) + self.assertListEqual(serial.Hilbert.coord2dir(19, 468432, 187688), + ['19', '03', '1F', '7C', '85']) + self.assertListEqual(serial.Hilbert.coord2dir(20, 1000, 2000), + ['20', '00', '00', '03', '00']) + + +class TestLegacy(unittest.TestCase): + def test_serial(self): + self.assertEqual(serial.Legacy.coord2serial(0, 0, 0), 0) + self.assertEqual(serial.Legacy.coord2serial(1, 0, 0), 1) + self.assertEqual(serial.Legacy.coord2serial(3, 4, 5), 65) + self.assertEqual(serial.Legacy.coord2serial(8, 8, 8), 23901) + self.assertEqual(serial.Legacy.coord2serial(29, 0, 0), + 96076792050570581) + + def test_coord(self): + self.assertListEqual(serial.Legacy.coord2dir(0, 0, 0), ['00']) + self.assertListEqual(serial.Legacy.coord2dir(7, 1, 1), ['07', '00']) + self.assertListEqual(serial.Legacy.coord2dir(7, 64, 1), ['07', '01']) + self.assertListEqual(serial.Legacy.coord2dir(19, 468432, 187688), + ['19', '01', '6E', '9C', '97']) + self.assertListEqual(serial.Legacy.coord2dir(20, 1000, 2000), + ['20', '00', '07', 'C0', '0F']) + + +if __name__ == '__main__': + unittest.main() From 4d0ac5d7839165ee5ba59d3ac8dccf653fc64099 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Tue, 13 Jan 2015 15:09:36 +0800 Subject: [PATCH 022/179] FEATURE: Add interface of TileCache and TileIndex/Tile --- stonemason/provider/pyramid/__init__.py | 3 + stonemason/provider/pyramid/tile.py | 74 +++++++++ stonemason/provider/tilecache/__init__.py | 3 +- stonemason/provider/tilecache/tilecache.py | 171 +++++++++++++++++++++ 4 files changed, 250 insertions(+), 1 deletion(-) create mode 100644 stonemason/provider/pyramid/tile.py create mode 100644 stonemason/provider/tilecache/tilecache.py diff --git a/stonemason/provider/pyramid/__init__.py b/stonemason/provider/pyramid/__init__.py index 3632bff..769adde 100644 --- a/stonemason/provider/pyramid/__init__.py +++ b/stonemason/provider/pyramid/__init__.py @@ -10,3 +10,6 @@ Logic of the quad-tree (aka: pyramid) tile map system. """ + +from .tile import TileIndex, Tile +from .serial import Hilbert, Legacy diff --git a/stonemason/provider/pyramid/tile.py b/stonemason/provider/pyramid/tile.py new file mode 100644 index 0000000..623c77b --- /dev/null +++ b/stonemason/provider/pyramid/tile.py @@ -0,0 +1,74 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/8/15' + +""" + stonemason.provider.pyramid.tile + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Tile and its index. + +""" + +import collections +import time +import mimetypes + +import six + +from .serial import Hilbert + + +class TileIndex(collections.namedtuple('_TileIndex', 'z x y')): + """ Coordinate index of a map Tile + + Coordinate index of a map Tile using GoogleMaps tile system. + + z: + zoom level + x: + coordinate at longitude axis + y: + coordinate at latitude axis + """ + + def __init__(self, z=0, x=0, y=0): + assert 0 <= x <= 2 ** z + assert 0 <= y <= 2 ** z + + _TileIndex.__init__(self, z, x, y) + + @property + def serial(self): + return Hilbert.coord2serial(*self) + + def __hash__(self): + return hash(self.serial) + + def __cmp__(self, other): + return self.serial < other.serial + + def __repr__(self): + return 'TileIndex(%d/%d/%d)' % self + + +class Tile(collections.namedtuple('_Tile', 'index data mimetype mtime')): + def __init__(self, index=None, data=None, mimetype=None, mtime=None): + if index is None: + index = TileIndex() + if data is None: + data = bytes() + if mimetype is None: + mimetype = 'application/data' + if mtime is None: + mtime = time.time() + + assert isinstance(index, TileIndex) + assert isinstance(data, bytes) + _Tile.__init__(self, index, data, mimetype, mtime) + + + def __repr__(self): + return 'Tile(%d/%d/%d)' % self.index + + \ No newline at end of file diff --git a/stonemason/provider/tilecache/__init__.py b/stonemason/provider/tilecache/__init__.py index d9dbc1a..21cc268 100644 --- a/stonemason/provider/tilecache/__init__.py +++ b/stonemason/provider/tilecache/__init__.py @@ -3,10 +3,11 @@ __author__ = 'kotaimen' __date__ = '12/26/14' - """ stonemason.provider.tilecache ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A cache of tiles. """ + +from .tilecache import TileCache diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py new file mode 100644 index 0000000..897f1e7 --- /dev/null +++ b/stonemason/provider/tilecache/tilecache.py @@ -0,0 +1,171 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/6/15' + +""" + stonemason.provider.tilecache.tilecache + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + A do nothing tile cache as interface. +""" + +import re + +from stonemason.provider.pyramid import TileIndex, Tile + + +class TileNotFound(Exception): + pass + + +class TileCache(object): + """A cache for Tiles + + Cache recent or frequently visited tiles for fast access, also works + as a intermediate temporary storage for Tiles retrieved from TileStorage. + + A `Tile` in the cache is identified by its *tag* and `TileIndex`. + `tag` must be a string matching regular expression ``"[a-zA-Z][a-zA-Z0-9_-%]+"``. + While `index` must be an TileIndex object. + + Note: The cache object designed to be shared between all themes and layers. + Being a thin wrapper layer, CAP model is dependent on the actual + cache system implement. + """ + + def __init__(self): + pass + + def _make_key(self, tag, index): + # tag/z/x/y + assert re.match(r'[a-zA-Z][a-zA-Z0-9_-%]+', tag) + assert isinstance(index, TileIndex) + return '%s/%s' % (tag, '/' % index) + + def get(self, tag, index): + """ Retrieve a Tile from cache, return `None` on miss. + + :param tag: Tag of the tile. + :type tag: str + :param index: Index of the tile. + :type index: TileIndex + :return: `Tile` object on hit, `None` on miss. + :returns: `Tile` or `None` + """ + return None + + def has(self, tag, index): + """ Check whether give tag&index exists in the cache. + + Implement may provide a better to check existence instead of actually + retrieve tile data. + + :param tag: Tag of the tile. + :type tag: str + :param index: Index of the tile. + :type index: TileIndex + :return: Whether the tile exists in the cache. + :returns: bool + """ + return self.get(tag, index) is not None + + def put(self, tag, tile, ttl=0): + """ Put a tile into the cache with given tag. + + Put a tile object into the cache, overwriting any existing one, the + tile will be expired after given `ttl`. + + :param tag: Tag of the tile. + :type tag: str + :param tile: Tile to put. + :type tile: Tile + :param ttl: Number of seconds before expiration, `0` means never. + :type ttl: int + :return: None + """ + pass + + def retire(self, tag, index): + """ Delete tile with given tag&index from cache. + + If `tile` does not present in cache, this operation has no effect. + + :param tag: Tag of the tile. + :type tag: str + :param index: Index of the tile. + :type index: TileIndex + :return: None + """ + pass + + def put_multi(self, tag, tiles, ttl=0): + """ Put many tiles of with same tag in one call. + + Usually this operation is much faster if batching is supported by + underlying driver. Note usually `put_multi` is *not* atomic. + + :param tag: Tag of the tile. + :type tag: str + :param tiles: A iterable of tiles to put. + :type tiles: list + :param ttl: Number of seconds before expiration. + :type ttl: int + :return: None + """ + + for tile in tiles: + self.put(tag, tile, ttl=ttl) + + def has_all(self, tag, indexes): + """ Check whether all given tag and tile indexes exist in the cache + + Usually this operation is much faster if batching is supported by + underlying driver. + + :param tag: Tag of the tile. + :type tag: str + :param indexes: A iterable of tiles to put. + :type indexes: list + :return: Whether all given tiles exist in the cache. + """ + + return all(self.has(tag, index) for index in indexes) + + def lock(self, tag, index, ttl=0.1): + """ Mark a particular tile as locked for a specified amount of time. + + Mark a tile with given tag and index as locked until ttl expires. + Return a CAS integer which can be used to unlock the tile. + If the tile is already locked, returns 0. + + :param tag: Tag of the tile. + :type tag: str + :param index: Index of the tile. + :type index: TileIndex + :param ttl: Number of seconds before lock expiration. + :type ttl: int + :return: CAS on success or zero when tile is already locked. + """ + assert 1 >= ttl > 0 + return 0xfeed + + def unlock(self, tag, index, cas): + """ Unlock a particular tile using given `cas`. + + The tile must have been must have been locked with the specified `cas`. + + :param tag: Tag of the tile. + :type tag: str + :param index: Index of the tile. + :type index: ::calTileIndex. + :param cas: CAS value of the tile. + :type cas: int + :return: `True` if unlock is successful, `False` otherwise. + :returns: bool + """ + return True + + def flush(self): + """ Delete everything in the cache. """ + pass From 8a8ccb2f5b2a0193e9298a00655155a07fbed94d Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Tue, 13 Jan 2015 15:10:42 +0800 Subject: [PATCH 023/179] DOC: Add sphinx docs --- docs/Makefile | 177 ++++++++++++++++++++++++++ docs/_static/logo.png | Bin 0 -> 213797 bytes docs/conf.py | 278 +++++++++++++++++++++++++++++++++++++++++ docs/config.rst | 5 + docs/index.rst | 37 ++++++ docs/install.rst | 34 +++++ docs/pkg_tilecache.rst | 9 ++ docs/pkg_util.rst | 17 +++ requirements-dev.txt | 3 + setup.py | 7 -- 10 files changed, 560 insertions(+), 7 deletions(-) create mode 100644 docs/Makefile create mode 100644 docs/_static/logo.png create mode 100644 docs/conf.py create mode 100644 docs/config.rst create mode 100644 docs/index.rst create mode 100644 docs/install.rst create mode 100644 docs/pkg_tilecache.rst create mode 100644 docs/pkg_util.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..f1c7c8c --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,177 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/stonemason.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/stonemason.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/stonemason" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/stonemason" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/_static/logo.png b/docs/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e325dcb75b2adb31f67a8c4abc41aec66cfe914f GIT binary patch literal 213797 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�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

&U8+9 zNp^YtB&yQypOfUlXy}U_d=VmO_Dh-45~UAKl2l{QQfcU+`2eXf2DMRPCEdC7#*N*u zLv@%JHCTXTZt0`ccs0-fMOFK|KJ$2P_dlkHR(owdw@ozGM5T!6K=tR(4~^ERH!iB4 zbDtjz1$mzq44l#7Nh{0(sW&tH~r86z!{1Nbh zS>mW^+!7G=R$%P~|HcB5$NA|l8~-o+0yRn(Ee{+jNJlQIhAs_>&P0jlj+4FmbQ%rJ z$<+V;U4DHPq2ba0A>QOg#Bw+(?rx2A$moj$x)ucI9$2ncB)-ArW$3dtQr#c4b-iee zp@fXHhb%L-V8O|1j()A2{~TSSnZ-LW4!5Sl0qs3Dc8#aKw|(Gj9>UuYXfYpuRx%^W z1l47HYTMH%a64Ufwwc?{UoOCZ%cIrbi@RXgEmZg7B zbr@0{_|iZ0H~U?;iG2~rlYEnGEUbD?F~>0k4rZisHRT2^75eVmYUG){GU6j@TI$7G zaT24Jz)Hk~1UBxZA5joK8*<9#CS}cBGLPT?P{H>0rO~xL5IO3_4Z|hE<)jXNYD6n6 zgL6P3h`Y$*&F?pVHPvWFSxblR#W0flY zq@P1WLYJ&s-EIrl-;tMzu)VoDSso&O0~c}c1OLn_U=m6!VttA1`5PkgTM16)Kr9_f z0wa|a@{rg63gWscq0#z^&wv-vL?OSfn8&XL3(MNIs$qjh`R4!%`8xy<{>xC!T{vy>)~3-pW0F0gc_Oaa;@wDNkp; zV@N7-HzwujWotERl65#(AD9}X0^pBP(QiKlIvUkC$hi%Bi6^z z-zf@3H}X*2mFtxJ_P_`7$HYN#3<1;@ri($;)4%V^m4E?vXykuqTjY6OpXKf?UPw_A zqu@;=Q8F*P8G-o0;ZGlwkumQu)iG6pnV0*M7|otRWu!iMTj3I*?D_6nQPy~J0c9wT za2B_*EN$XXN#>efU>v(AoEJq~2XBaFO|S*BD#!$STA`l8?$-vZWqea$%n$;j)my;PewaYLVa=mtOg9SQ_n&#LlPk*RUq zSWps%cgCrcmQEs1QYoS_0GwwlqpKZ|@Yc8!!-Q!TSpG7v#egJ-1p4nMf%@u-U=dtD zW0a$$j@|LT1VXq@HSxs=Bq}P4hMDR?NXNvg!^WzFqx*42`}p_pHoJ@-oY1RC3r*Jn zi}}33f21Mi1CM?E&A%eG-^Qaj0?N&!0NElZcX&o44>YNSE7ZqLiO=b37Q=%x93aKc zBr?7)81y93#QFnUf)#MxIut4f{V*?(qCa@ngv+nBpbEFx*~|j6*N`3(rEsHS%!SkI z2BoPiJB0}{%}bDx;<-UH^GnsPZ)FIE1XM&{vY&8FD(UKWJdKTKJq-PdZqKn|f$_qp z_aK&3PTw-ya2}{s_Wnp5NgjRfDbP}m%6C60(1N|iG*Y;QJqo>IGcA`Tyy!gTs&$@0 zQY?XNA!FF3Uh_V#)@ex}gyH^GTDWm)O&@qpOOON6O=&6v^~$FZlkj7PpdT6wODA#O<;e>U{AS#WJb6`AUfh5*XsFp)oZm{Ju?l#5$Vd^Zq+UnY9U7%R8;=vt?2Pqod zi?zkw-QC?ScyV`kcc*xf;$EEKt|!lX#u?-Mf#k#9d#zjMyyijWFVRZwUpW8imVTOe zQK0gigRHRYNK-EivkO!9t&mNGMuK5RxZOtb7KsFom$V+)Ozzu0=4&^8Wi4nC^6$f- zL_VUL_6|xjr!D}Ft5(ivL`0z>pGH*5dLdAKqGKPAhUcyB)c-sRthm`enkx?BK>0Ku z>QbDaI?dZ~Ag$T90qztw>Lrk$?TtKwi3!`v?DCkT;e{)9C;qMgujF9gdo*>7)M}7_ zV`g#O)xDLgIN)7d<9Pu7w}ck!P3-nW`Vi@JF?Zo_HYWBM&jsDLHR9;LC@sZ)^@<%? zCwWZ7kJ6c-`Xf=%Csr*;Ed?t}_$yq$KE5R5}y3OBgz& zv3~Q5Gj{jzC!yWy)>&n>^-+wlRizqfOLb?{ez%uoOs+j_nqEl&%T`_|!0vFZtwF}= z3%^0@cm6^aF6m_Zl^X(f^hO%ala+-F5nte+!d(v~+8vX#LEzSd5Ncw%(TakL^9{Tm zKFCWbPwx)`+g+d~Z`4nD>UBD6%~`QyqI@%>%LSqN!~90^ZFS+fl-V1KtN73zZu}}V zNQKjgyHrlz^a3W87+EBwRl&TZE44IcmpuK)djabf`PC02w-i-47aXbY-R0Aa5V3D5 zz7o8JokW@pihlR?{DPp#g7rC`t*E-eZH3+K1B0U!X<}~MHFKYN`}BD+!gKW;nbkQ8 z^y%np>2L>h?6+RzH~rIF22)IAIbwWdSpacsa9QDo{;8o(e`sTwvZF(| z)w7^evH^;Vd$xZ=yPW;MJ%cp~s*pN@&Yk?=KOBkFTEV_XHoOsgk-K$$l^6Z#V^}dt zY#3COjUmX%Sr@uyVM0_xu`W8K8v+N3F8Jbqr+$yK3M{P|n!rxijU~}wG{PT)e)S1y zXgIo@?A1Ncq0CrjD-3EEqUCb0G+9~sjK-rJqb~3g7Y{YL#$D?NqzlyBR;96_8Trhp z+@zo$(C^nDB>uM~0xbioB#(-MP=;L<<_JtPOeT|L0%Wic3;@wDB(NwlhII&KQO0f2 zui`v(+Tn0cmK;$&yiXV(5#+|`a=i25>T-}6snh&tC>75-+|KKfEB)SKw$rUftYS^c z#-n61-PdgT`8>HsZjDKw2N`sBCH)rc~YZpT&Vw-|p5P}76T59FYAKL}! zJg9=jB9p^>G!u1vJAr0q3>wOJfb?&Qp!h0#q56ko&YO>Lz7Sq9>=hWVE%-rC`f((HAX^-!U%X>K1dPMIj9 zb@L{Uwo-f1aSjnjO|V1P70x&A8n0rTq7(-@Bzk21=@+`zO^UC@*A1)k@36{)6u2d zd0djT6g}j>BB57E*vZO>uN=8f;zq~AYV1-vq1sD@_EVO>@vbJ;WnXQLj*Q1|yr#j2 zM9#aw&LRuc1LjmvBALi%HvCIE`7YR#cIZ=1%1R5c8MY2SFQ3dih~*e;qf}fHbEp>M z3M(;Mkz0Xyp8yVCrp3Wj-Qo}`Tp3GTdFfwNwIsS7>c0lwEI~+}d(W4+JvSL) z+f&AidMKz+?Nd86&=($Kp047SaWK5+VU{t^@7>AzoX{rX?pKZ}0nYMVgkkUTDt4ZY zgNoAuWN4Mb233aEOk+oVX^TjWzHbQes|y&k4MUkNI1%|4dQ0>VZr6j_>{O(UEC4>4 z13Up-Q0NQH>9|>bWpGr({8kZtMO*`iL0k73tRVF2yy`VZBE)hY2G;7qo_28W^zc&! z9mk>^JU%se{CX4b4BQC+bj))$V7843iT@AV4j@*XUJa*n$iLk_Qhvx*HD;-A`JrnO zMI7d|Sabg8hfYUGSZFB9%0e{>f75}o*D1{(6Vfk#T4f%?gJf6XU55BK)6Ay$PMG-J za6^MVi(f+Fqzq?Ond>6o1|xH=mR~+9MV&xpS(ONS=9(=3P~^~wHicR|$*(Psd-E2_ zre{=dRyn3Yb4*$sImHHFihGY^R62?GoA;tI{6wgeMHsFQ{f zyF-Q3hAf;Igiu(mqli&uJP~+}N8nD`7mq6ZX_q<~O*egQMH+TR(TpRz7;13}_P&k2 z(TG@(HcQM^6=4PgPw$!j{`>v$(~q#CWuodHU5_Rfd}_zZZRX8Y}$$d8-us z)n?@s$e7xDw)ep{TM5y+EN38n`1*mgTJ2mnPc27xn}!*66r9y3LsBml)78X;Ub}eL zeyJuK5IZLc{8wG zY;&d9h#kr7uau+7z5Cy(n;3_{?j{>8kmn&Prls_Q?7V`k6eroz7hiE>@nB`{WvXy- zoLhD9{n2uP*JBG!>htsIqI0Rp^yFdMNpaee@Mmf35WJIZG>krnI zgBfg&)m6Ip)2*0vkNudYpNGs1ag58O6PUC+sVldLc`)ncGa5OEeWIA!1D_eI0r+o6 zQ+`mv%gO*la=N-LlH8p^y&`9IoEO2*mk&}N54`DQN4wG^Is7NWR}JFMPMk2svmqq1 z_z%4(Sep`2c%c|VFVaz%W?DQuu-Job1Crf)do~27|JC*B{P+(=;9k0E-+1ZDe)ZTl zh0O9pe|{TmU36Cb*G=VX_|A|Jis*ru&9Di#Pn%G#kQPqI({Y9Tm1xhUZ+uQl zj}#BU2t7QGwRtGx?e#fK*2KJmuT34ypt(E}Aw7(79M^96mMi}~2lUKy>yg4gN#=fJ z_d`PUS5#3l?CC?nS(p6oKB2R7@MnL9i~{4Qdh?bZjFJ_bkoSbaZT*ZF1?zgk(_6Pw(Z z2mMzO^SL;TQ5e+Li%7dMMbvNBSS@liwzsdoq&523%Z5>^KBRH(rkOeTedv`^dNnzh zVvNHmRKS4(#4@(wWqMQ9=MSSUZ2i)^@5`}YD$yVKj^=h5nPwei-E_1@+qZIJ62gdL2 zULv#6gOAXG<0m)-)GuE*=G#@QGCum8 z%Bvg1hP~Iy;;j()I_SeCFhB_q7b>hwT6xCs86IH)hz}=b*tXL{18IfgI2(&rbd87Q zMX8BNBnvgZVQLjJd|W|sr^cX`UzlW5*d`VNDVd%JSv)?fCX?I>^S+>0c5={m6r4Ry zsi=(M83g_akG@RP3Fn7LuU1#*+#lsJN@hw^i>~??sP^xU~K8EXd~Zq zU{VY++O2f76EH5~c^u8#VT-a8>sQVQ1JPPEPotg5Y>Gz1ey~J6b%Y35GKOgR5++y- zi_LHlC_mO!_)W{&qgUO7pcAyF=-ewechh(Qrhf7ogZmN}3Pm5p2Zp!tFvkS^WJV5qrVC`C!`mRL&S- zTQ2)q9oRA$wnckh@2Ea|cXlC_WAsi#da?TjW$G@PA!myH#%XH#;1CeLoS=X92~pWC zxHo~;MckuUE-k-H*{IR4v}6e0taY|AN#U3{woLEN+ZokgRII?IX$iyJtaOGq8`2u9 z{TfdQDJkc(bK1abedaKlgQh4NrNhh1OT-yr&(}D96Hi4K;g>RvP9wNUAZi zLox54c7?+?D&CMlf4-<$_n_;A%vA&<-S~x#jJR$1SZ^)Ya9Y#&JI*E+o^@Jxmr7|( zv&M$;9(~9Z4n!?Le^0Cb?0Y$c55>2b%CL6~;CcQS%I37l&)W06TYjySGoK;9tYoyo zJ=skUIT{C63Qj$*i(Gr&aZSAjuXwX;H&(@w;)8GIDj0SI)q*WO3Vis_UeDk!U8g(z zcEP(^PjWtNqz|H6sMxEa690QG{zqO-_^hRpXmTM#hqPr3+%XiwU@U{m;bwJvyPk4I zWHxvGanFHZ8os|DB?Em301$%&1MA(bBTj3%Ro_Q?k_Tdh9kvVTzGO6&F`JEHuGYYZ zB(!^|AA^wdi#GcO<@j_o#+MufKG?zH6>Saa194&#L|T?ij49B_mAEN(ah#n)E%@M( z4cTAurOh8+Nc*kB<2bB~xlpzhnqIvMb0HmH*BfzlCR{DE}jVd>3iu9#+6aNFcgaK{C5p0s&= zTT2H=2li7OA3r+JraPzO&{OQ;TI)hDQ}RPdd2E&Mxja4J8r^JDk|IXNX(1Wp3f3d+ z=GywoxLY;?y{WT3Gu6t7eGCmRL=9cXnOgvuBirjxaM8kGiwNQ~7kgj`3^J|J?l2nd zWc%HUl^9e>l{`XAsENJ1XvQ-e@I6|5lT?GwN8_*U0i&()4AA=n+ftp86vsi#w;FyT zAnv=eysltrVvSHq5QneBhgb&L&v^>rSah3^zn^ZO$-MO~TL4O)YO`r>8@}9?xY-86 zDa<-d^p^@%_AS`hoBgTNP{wp{&wIyt=&FeU9xZl7)a{@(|A3hXU?Udh@$rMo#rmc2 zYo4voZ<>_RovNuJEfS1ssaF&WF34EriUp1D^BtsUg4ZRxZLCk2bEgO%wM@ruy-q%% z$E``41Bgl{sBFVsp3iNqetW4%Bpbmvpjyo;;@p4;*iR6U5-|d|$lw`0G~2H8ttt`B z2_IwOONB=T{k}1awIXA9+Lfcd zG&+qoJNRGL|Lhxi4INzE{fdp9_Ppnez1LknB4gG5DxfR4aXmhM-#A&gz3Vhzcoh=a zigtX_oRnjFmu;{m{@>h`F0#)OPe?)8L0={(9-+5Yzo|Mmw-*d?zX(9=pDmh3AYmjS zlyyX=8r%?xF{bqx93u%P0XNRVOcAK3*50J`fukb0(7nS><1QepQPG#;A#RJ+=3H4u z;*v3hCW)-Ga$8hY0M`AZ=@CsdbgIiSFItlKVYe+rRpqNrCSXEupI1BgsKHXbNz`^Z zRJ=KC+yyOD42G_7i^1B3j@``rjuri!*k?TCKI|%#8&i-k`bJ+NZZndNz@V{V6 zPR0fRqfuX^^HR&vQ9OFee~q5yY?k99j+D-i?3*(a+1K^+>u#@ASgx>XgUHRp&WD-5 z1PyEnYJcy#GK2N&zHE%IRC`bh{fj3XzP`1Sx!CoU+a8;ab(@~cX)~)f1W2!fg%U*t zZC^7MYkIuY@!T$r&i1A-&8u%6ziV14tnxS)Iu(LIa!_2+cg+9PZ4$LAaQ($WaU2R$ za(#pPleh@=xw*oqGb{2!^^z$EI7 z$v;vt?pSt4vXlG!&rG|Tv|4OKT>u7TKoaybT!%u4!e*Efl5 z7Y+3K$wQQU0U3ZUU;%hTzgy(3vG>z^=3!J-WBVD`z#pMMx;=wk@K{#ol}=Cqyf4MqqK819cp#|L|Z{x5)% z7!g{OUGv1Lt`|IzOYpv=1;EpOK#1u3gqxi=5V|5VLFNq{n&-`kpfJ3!%y%OE5#|kL zmGwhGiPrD>d^|-DeK|MwphU8inrf&efln?+a2=qkY;te$P8YoE5Az!HhnjdhAjY{B z#HyI_T*osl6cS=K0&|~=SK%kUX4sC}3rs+5m6l$T{k`!G6?ZcGDwT62O^4L@X!Wf5r9^jt*n+RJP#Kt6d&I1-znBy zSF3)Zx6)-f!%~nQNp|)sZ|$Dd;@^X|`S&OkS?q_qHOJ1Tz$tN>R0n}rra5;gfvjOU z4;F-jj00UI3G1=AaOJSutlvbT;%|v6(Ft6J{6B)HISTzw@cipdV@7VA{F;3y5;3@5nGid%L_+ zU8LlD@ttNJiGR5s$SS{Y%z|o_qDz_1lvejiTeOBRleor+4{dOH1kkdL)&^Et-pUv; z5ceL792lNXj~=@^AEcgDbsr|q?NJLKWOI;{-_O`C@9#v39G{ShK9ebCl{Wyo&Qw5LhjoCC=2A_=)WxKInu3?eK3_}G?5%> z{1Xr0Oq_sC4epJmLO-&2Y2hy)A@1)o+EhrEVqkuv@+000vfrpHkd~UfK@oah?g?hB zAvW9WEyG-E=l2a*&S9RRf62@Iharcr>u$hvzvi@{@M|AnwE`=;8kE5I6{W#+3TayK z*&4v>Sh(_?k&)E|jQWTEV|%C>F1{qWsfFUr*A*9Qt%at;4b~%JqQ5m5P{3H@5by~Q zrNd;e?Y8b-HkEDj5gSD`_$%Y`u~X>^9xiT32nwF2kc3zu*Emm7Q_t}VL%GnJ^eV4q zAbdO=A{%-Mm8P*x7FWzawzz*q7W|dy z?{(w>&TAg+YdV&qPwL-Z|0Omxm)Jvf&d)0M8H9LP(_9F#n1f zBf)nfE^Br7{WP=w8;iNGh?X#mE5~>;S$L_pmoLr77LS0_bGlDPcs-^Dy{i(QHEK2B zKdemV?#~8wM$>0m#WaD;sHeq&9>^X0JJPSA`Y5RRk zIJPy|sj;dI(xKp!XTdVNK>WfV0-nw-JcC6nt(|g7-16_necE$#5v?pIJxsn^#5E>+ zu_%Hj=PK6`g4?e+NFF6jjSc(E#@p&sQ%4I~-D0a$-c(IJXCWbZRh1OyQ(5OHyTf3T zRhzn?w_~3~P5~QP&gb92?-78Dx6w@h;&FKVOtLASf()4?09giCgyk8(>nW(RN|jPt zWA-Z&T(k*KkC#`Jg!niW3+O2|3<1@N#g#g)utR7&B1-mkf(rU$_QU{bW2F&H{-~c$ zY`FoUeW3xR(BUe(ZZ|b ze0bQ69bl~KG_--=CwEE?4{&_aquF;IOW3ILk)#;{RF;-_)!lMTy+P(mVgZw$c}<1s zi_&mGZnsRgWnD!^KYW;7lgjGU;uW07fGH-*D!{lYlaBk-zoI5->G^(EOt>qw?9RzT z!>Y;b#`ek>sP0~TSdDVnGi2(qiZ)E%s-09tDUZ;P4GRJ5)19;k`+IsM3<3@UA({G1 z*45u}wis_RZr4hPtaiI`{Jg+@nCWeLIIpEX>W(aH5Al>tfWVX;wYSqBC6pNZhe}PCpjNA=oav>xRWL4~xTzi(B%z?7K+>Tuq|zFJ zPI(jHr=v!;b%qlbnbf!`Poiu7i|gp?dS%+vue>%RMZ1Z=2x^X%EbZ`3Ou`{M{&>!` z3Yj>?@)_kufpKvoM*dH?C-_sm2gF29U;H{;AuiV6Ijm%vVE58h>1lhz4`5V@%@z>F z2nrW);Wmo9CfR&|_rPing`HTjlaRXPiw)IRsNL0UgF~%@Ev~sjIz>FatTAhEMI{qu zr{!wpZ^?k!t`WpmgRbTVdcR-UYe0TpA&;Nq^dd6T3X(NK|DDLT_04mYzyB>h%P>w; z#>e?!O2;5!UJenB6o;kzVP_Us-6-5~q7cK}chl~dbip=}^0q=^I?*iB9ZUM$zsQfV zPf&((evbD94`JmK^RFuH662Z-lm7u z1H}u6kiA`m6?0iX3x#0tvnsjYc-lY6UuCF$>sI*%r=Xo4_WVO(>*P;?6oAXw-2J`l zen6E(BZzEIf+1S0Db;PqfntwFfEC*p_@2hkhRUO0#4xW_t(T=1svgBL9pZ^xCl2NV7JPRU&t(gMi@Pl&qH~bbW2U9emql3=B7Bbop4=zlXN}bRfQ5laafL@|HS1WmZfJ}==B1~mIqMP9cPAFT^>$}mTJP|M zR9MTZQo*{MWSMWHSy^_l{}S?lhIYd39zE=!P@N#koKW%LM` z1mE{%HzydADwF`~Y3JaE5cdYtHoGGPrEJZwDZK>J<#dAFR-{W5vidK!2L|9UKme{2 zYcT-KjsXaHJTmnvhjlzhoqpf@2LO%{!(ELhb3x>6d2Z^AE)eD-oii6(<``$__6=ea zWPRD-K)}-WH`vfYXgT;G0Iy7=MxQKveGLlrERe86<*2qv2_vZ zo-?(1nd{H@Gjl+PYF8B8duDwNE~TlRnh4=6ykIdKiC$VuoLp>wG26%n-`=G((bUGb zjs1t_RmC%{@MuR>7L=|t!(#L>8jk+t^K|$3ZAgalqOk^xG5?lu%yN1D;`Ev|`0e0^ z!_+2)Itxfv*!KZ}3csp;%sm=_%1px==13>>WCL|$f#j#H{5)N@k_0yDv@9l!xz*b)n zB-+x9xct)^0kH}`T(kqz6o;y))mA3h0nYM&^lqhy|AZpROVv9b68$XbqM(jJ49URX z)mDqu+rvaXfWI}HpH)W#znJNW9@?z6(u1CsjD`z!ylz$UY&x35lIIbGWZp6ZG&^i{ z+@WSk=oD3e_4g)eStZw>UUfCgU(bbv9h>vth@_ivlEFB%sE792NceB9k*MiVIl!$O zD_t}#blMYKRyt4{FUzy+_IS2>p58}Y$V$TR$|bW2JsEL|siR4_xn8yqg@7`-y8!jp zN@oTmO~J61d|;OO15W5w_GN(&`2u9Kr>C%$2vUlSs);l{OdMW;o?)_%zMp>G7F@CPyrXZi0dvQ$E>Eej$ z2Pu)sY=PC`8R$$=CGo~XvBuMoDyW?uxCI$F4As_h5F)yEG%}dzu(qy3Rj=pdKurpR zJ^>~S#-{mL5qgqb_s|Ea$PZM5KK;Qb5aFZevmPPq)piLf6EK#HvwGU8&Wf>V=mfL(}*J>U(R>B5T&~dzs0X;MnV9Bj;OGc;ry0 zL^f*TK06YV=X!#RN)k0jN5n6(d?;e+L6v$6?FnOMZkRR3jT@h%k?X#`fHIW&VzJu< zw-l4N6P`opz_-2RpD%fopvEU64o~NYKO{n*sHDJ+FW-|5YX~0Wvkx+I@Xz0v$*RXZ z-2kJD*RFs$J0`wp0uDa8EG}jyy=LWTGj1&%8f&<$<&b%|$17Y@4?GK;sk!atxqV(I z6TpWNu-OV8&u$m0UgMu7H>1|{0q632Ee(y_r6#MACc61*jo=+&FH{&d1)c)rfk~eJ z97qvfw*6KJuFpt;hp7+&f&wOjx!a9SW=kI)yXKHax>B(>pm>adJDS!ety$j7H6rQW zDb_7gc&fgP7CLc5oL2C=h~`XuhNh7W{QP6!QizFnRG!W$rJNX9KBR9NZOUBzGR?q; zO@v=wE$4}shrALRm z_)t8SCho|j(QItr%X9PX^=8h? z?V+NF@Kek3kZ=|k2a4FL5!{4)2G^s}5$cx?NY{kODgw8C`zBe~5qFlZXI0RK8z?*Itc7C=iBCEFhaclqvXO7}?I6q(V6O5v(gY%GU7{k9 z>!k$#N|BSC=!&b0iLUHiZt|rTNTUs`jqsA z36ZjGUGg_g`Ii|P}4Ll;J>gIX+%^E=q@h zmyY!J@4~hWnX^Cr^yxTl+68xH0Vj6&bX+ky6oZ#rlMf3nm>m+!T3nEHdXE` zk|v0)Nhss4fb)%rPowCjB~|kKLFh`Fl>?{y)Qc3b9=RG}A*z$q1Hqqxbn~3n4kmd6 zCI~91rM{3wK|3=JjFA6Qv$wNsv_#drXIWVeTOc-JvBXz>1uu1)BO2I*-={R{*?(h9 z>jN*KT}@g~j8rCSCmqSg$6v~&d$qoYjdD3z41sooW3=S1 zp38<9uA`X)w^3P@#DB(xEI%%NIv^ao>ZFt4p}3~V^|%n-v|U~3lfUbC+Q1eJ`dDb8 z<~tP)1i!}))yZWca0p(ROXN3 zM(`ci`gw}bDnt%UzEuWl2_bPI5wKkFb4&7Lhed{+kt)o)isZQo40)E}|EOW_rR{b>?o*YZA7|34t>c8)K$AGe_ z?{nTCDz?XNPX+@2!joqA8*lZ0Kokff7Mx9I*BX*}_^E~m@A}Zk3hNe}_S7dwW?O63 zFpc_}mLN#P`L@3KnuP(rUrnS1x@;irMO*4^Lisw^)9)|SHXYW)#_akBSHvMQ?w`2j zqlo@)DMk`xk(&pKTua$BJ@@4Z05}|3~zo$xlC)nn5 zMLZBO41NSHXQxmjV;g@=WIM%)$k!byR*!94FncVF%6m}pfZ(soTzAqWWfcPDcW)O-az6rWBloqc}d zyhO7vXi56V9!C(sKoy6Wu7c2t85pL~H~1OI1^|#~HHWYx{refz^HlM^pRz$L<-6lhp!8xNTyZzrE?Cf5fIf5G5d&V#DUEFsQ|*+2>a_PQ}3z z8~Gk&vn1PdY!k9KTh7D|dmZz^JC;P?^|b^<-$K0O<9OH1rQiE%VQ1=27smYLR2dGCbM}wM16ZZ&&rmI2IBo7CAp(s z<&&&%MQGsHTQD-CPw>bXnE_@o0;cl250ohqKj6w(9?^giK5Bwtj*u_!@tF;>_k&MgU0 zHj4|jABx;--gyXfRe6^3F*&EZ7usr>XkPiNzVV5u5f^DA=3i#7Jh#sm?`;&lS~H;F zb`Tohub$_Q9wOB$ZCu}n>GzsVW3R(4Os(6~1_k33H(CuE?}xmcun{sp(ArBLM#%KC zRu;E?+WWJ4 za8qWbEQ8xl4L@0(bIY5_`B|?WQm=bo%fDssqf84~t>UFTjL~XEVOH5R@0i-G#}`O- zPOuFKJrt+vXG@5a4-qz*!=;hHf^r6e<Y(*Q#n6mCn`{5sqW>>=ngMplBp>aFM(PdknTS2; zSN$l`1nz%NPEDFy9Ry_JvqAlQh(uYV*TeF1N%rpWaB3z*)O^0QEwHYzIyHPucL2m^ zJ#MP9O$md>SuPQ2O{A4UYVCbr7kfSnI$wwNyLDfa2pzbusam!}AipWR^b)JeopBtV z*PN!q@F6~9es2fw7MI>EYc@fxXhdAWP_5guKSJt|{ZVi^m8Rud6sZNM;xh_7x3hLK zo!n5|bn2tX$>3bt=F7^y{btvFh!mO6JpV&s1|+AdSts5ns&XDp{h(#K86&Z|W_3u2 z?D0?vwC+sF)3Z_vJJE;9r><|dgQxC60lW{0{k^muy0G=^=jiuPwfV%HoXEbK zx=8BNA`Lpw1Woq4nFezNusx^!SB3G4ZKV%o@Ok}HgX1wqK;uju)0EfC(N6kljO)k`uW}klG5ktv~MyFpCS6R z6JyS}7FuT#yG@^TG^g@mt^(VxBv+P6Co~QN0_M1m=J(82mOe$1*QAdMEAq(M4poI; z&XPMBqu0eeD3A4zll;qx7RLSTKb$Kc{2*Zb+c*Mj675)*)r4EeG9x)0@$=8Y7gFfA zpiCZj_2W{(_;S9qnQLKG(e?<@Bpx%B@#B@SQ*~VRwY&ML{?Ad%2LLf8Kv;hylBxoY zvk(POSkpvkjjw!_{c@mp3Xv3#6g3`K2*KS7k`P-O2~LT-xpC8?!#A zv~_H)*Ro zJ>7yG8h@+N?Ck8&a$f$?4J`J&ecj}eMNAzhRd<2KzM=Q+cj)9?NF*>(geF?5(k+vE zXJvJDT?C@^Z;OTbTy*u?X43RH^ydw+^~DkjZo@K{QmHBelsT&U!+C^5PeKSd?xBP8dYa<^_~H*ePwmzJ#Y#UCN-bJopm9NO--zaDflTCMj{7} zonn~)!<4M$rfBH|i}BDa83T(0K5cuSp2dcqaA{*hBSmsT&)*=MPi@k+945WXvsnD| zjH;CveGIE{?mvSsT+cUbT4V(w=Z+iJS`MsTH$N5e&wV%S2WlSlxzS%%ChR(D%57F| z>TRIQ?(Fp?99@sSWcyKsv}{wNFB}ghTZI|#0O_M3j|O?WrKucf9Of)yirlC3uJ-nvD`Sb@IYqS`>6Kg#y12x7D5ndDc{$SSNPtOd z40_rJ#2g%|ivct;VGg7UM9ev@Y!j)P08`76wux3Ma`ehNj*s5}{_u@qx!pd4EE}GO zd0_)!$ZB-+uXO(1ud0elYd>8glfz;VvA>B~<}45dEDH;tcl>nQ#nx$lvJH|mXHn>l zc`&9sC#3|IsEW1FvOFCkPo6PRL|0qHSuF2RORIVewE}igvQY5k+n_3 zO+I}oX_ujaY%GD#2W9Ys2I1wf{IEC&*O;DH^^*Bi zFlcX*lI=!Pv!{TWi(HeRsOPFTN#rZ6+f@)LUnS~lrg1!Gsm#Y*mABm8fB@f3k2$;5K{D?P z5h1KA-;SY-=MM}P?X(<;*k5aqgvH{)2;Tkpx}zNnv4VH05Eech)vE5^XS$pC|L+D~ z^Z)@_zdDztTNioG-<_LcoA9DZ*&0iRVeXHjC6;RBwVqUWyxeJIb9+nxXwB$0-FM|X zU|hq7l(aGJ&h3VoJDWW%1L{>$G88;!{W+oFa*mr-E>(nx)lCmNrbc_kWxVBXBPmFx ziFUwlCpotgyL$dM9qMd9K^@#PhI@Ca%YJ2vi-sIjlRAgxPn|?iHOzEH}Cg)LiaLO&At4M6P)pfn@?QPZFz-yQ4s zg1vo!A%Np+nDXKE>NlOuht|cGBhm&KDy_IB$`N=J9ajtKjw;uy;yr>?+Y?d#-Q^Rz zCCK7hC7A67O%Xq&;Vlm@5d=9URX>`JDa!2HVfQ0V<4?C%UDHj8o~co;oT zL|{)o422+mHsNM8CK&fIO`gI!Ut35=v8bbdB9G$Z9V($u!YHlX%y?|suyZ}Km~UxN zJ{>n_il-F1+Yy~x*}F2y>%nGp?<2(r`3P4Dy-J2Zf4kma&oRiF*MUNBm$6w~S#&F4 z;*CL*e3i5K?F37Mu41jMQA(;0urv6a{fHPz*(4fWt}lopT2VfYP6aQCn5BIGO_^N6 zoj!6%_)7vpWkwQ3=$?vXQ-U{NV)QU_UIs^AbS4jS{5D7{{n)Hm8h@KXmT1REa%0Cm zSLQ$C%cX9VwU+|de6=pAwda8b!8ufD+9E=SL4SyZ+>Kf_fU(FUoet497Xqif4(uBSH>N5n7^o_Fr+{sVg~5X%7NRFd6ySetLDP1?sY%r2g@L zQ_uOjF%~-E+=^Ts8lvm`QxLBSay5}413BKW}Wsm z7W0)86EpM|%3KBhgE8?B&^p9**~E4D*76<&oF0LzOE19rNtc%l6DFB0Naznnz2IpZ z=P`8Q<$7}MFQiBPWT=lU^m%ey3fAuvkp{jVklX|dnZrD$c2Ma%6%y-QX57S;^?xtc zutY|_hWRqx&+R-_{7{emL1S~Q^yJ*Cz_Gpm!_+x2N7{W|KbqJ!Cw9`YZQHiZiEUdG z+qP|cVp|hU^7Q?$daK_409{?@y87&M)?Vwk64vxP38t@1 z8s%Nrx66;W=YITmSjM6{<(!S|Hrp6wRd&H6$0hWZ_* z`FIHRFK{6?S}jn#g`{N^TJAh?hvQ0C+WQ$bVj7nRQe3JPMjlGL9m=Y7r{sH-(r*1GR+JMz@Q! zUwHg&5roLbF)f@t542Er4f=IWo2Bj~%^EJZEn?cq3g4e*c3$-)A_t_sA}hOy^F_z> z`;sW`Isgo)$M4M{N+Ut0lf|>;3++9`>gXi_^XL6$Spz&SqXGy5gBohKj?vYDKTj%f zd$>``vz5x1iiNn3m)ATAxmB%)&~kC}-5ltAwVxnw22jYMo`14ax>fMEX?I-;jhhqBa$PzRF z7C7_x+tVnLJiZlK$SQmnstUmftSb^GGh%@D1?wNyS1SHi(jzeq3PUQ`+9R?E*nyQj{iy3sQrs)*|zReV%R^^KfNBl@Wbd&@2{_Em}9XqSfBlH zS8bEBwC5FNwg=>Hc*%Xq`6#id7cFE0rR+RJAkV?O@q1K6@Dq;f-}rg?HL0*6;g3(%i$N+G zpd3r`pBxLu4#ndGT^tLDNs1!{m*fuh&9D+YCy+@9Lb}qL# z7-10YB{pVX^?`zWh~D~JJm$rA4`L_!1);I<7Wv$n#%Qh#@0ga}W?EEcyjnPq(`oTx z++Dc#is<1wcr^3T!pA{M#{ z5ixguxpf<>vw0|=K2NqxDYipAAQ>@e3e8wD|*%j4TWTPPwV{955OE?{DsD~tiL ztY@KH5T+cQW7;fX_hT%vy--+h-)osCS)6;*|1$WXHLA4C^6G;cU^k(;(+`lnIGX|q_z7(Q~yAQoo}mQx!c$y240x+1TR^>60O ztT(EHqx34%{)v7me~7D;asDP$5U@qi_y4Az6#&hh1G7YyvI+f6WBkw#>^*M%xd?&on*U5 z&bfCfR<7~vubZrC&*S+m#`9(?!4NH=a>z{OItnRhroK+{PvHbwlYq>Sh$a_$J@J|h z!ty4&$WAg344PJ=RCc8sEVM!aA0Z*A<=7TfGRpkKZjaAU&);1v_pK0ni#6f=c1M{$ zd@3X!g6K~bH=yXybb&m_3+5IA4f-q!7M9eRJFZ8cN!ycrEOV~*HD8rj^Q3WJ%JR9a zzdtJ~e<-)Y3R9K%34J@s+hAAL);7jq7o{_R&uZWlML=)_G>WAkQ8j!`&|9O5ohDK)m%3Q-DK(1E7Hr-+%d&TMPM^ol?6RTJna*|E zq>w29VZM-qQS3aX?;fI5;T{Zp@iIWck{6P%pfTC<&s5N)#B2G-P5b9t>M5_qHoMRshe?Ji;Ke%q9_OOZ8Lu?spPLdpo}5NL?doi14H#eA;pPd=uV z^C;<(=CfB}tsvLfEHkorz9J@mH+dmo`y=hsboYMgKeEf+vs`=r=Qg)|H}A%AGp|(0 z5u8fLq61mv>&%n{*K3r}wm{D41Sf9~ii4Wsrp)pVIHm&!$Y<5wR<%k$DJNqV(rmGY z$LzIM`H9TubplUe0i0OnF&dgVLG9N*f?&SmPHWe;fDQH!=TFpl0IGofl|WokMZ&R$ z^M;zb8ANFu$WvHGOx%(9jUz1^AS%tGAR}O__m__6>wfr9df%rH|9o+rA`&!s)?aR; zyd@^S`p+c*bote9GD|Q%*FZw=K%#di%(K!03@Uloa3B6BWf@4(K~mk2&-T&*e`VR( zRJCn$W@fNNZ;IAAcD6V{G7aB{(od<}jG-k`x9iYo+Fsnu5b#i%rFM&=XtLIl<@?%0$oQwKUYI}L0!JYT_yfCICnjRM!atV&hYf23n2KT8UmJ8I>ia9WtkVoj4^s?HHQ{g~eR8^Y<9sh_+ozsFT?Dg zINJQVY*dE-@c~s$a>?j+;v})rdcR>yV~@-tp{KQ*>b)_qm0i4eroiA z?5u(qEicqz67Xl)zmnl2(g5eD_33fq&{E=9me|cjFQ|hDUhEf@twO)sB@&h zJqqunwA)A?2zT4^3gMIB`vIY2VgOtHK^6^SyZR{nW4bNax5`=n9 zmt0}75%ua0qnojaqOZb3rN6#U!Z$#<(PV<;>8McSnnAPXcPyAzimt;+r@arVIQsG3 zxst(J1U;2!a^P%K)yc^qM} zXsA#RGL6|OBwI|JSd6%YHFIdIv$IqB6QL7FhNsAA{6=aI{&UBDdapFw-q~k+o-i5- zjXnR9hGArBoW)ChS1A}q82iZG<=R05YFHE z)Y>Ua18HIHz>-nYG#rI|4FpA9nbUqzQ@D)I_D4@n8a>nDVg+v5cd_~2xB1iZ0!>c) z^8>-ZcNjcyp6qxM6Gf)x>7E=XXO|m7F?-H%Oe@8fj=3?t0-pe_z2qwwFViFI-ZF#~ zlfc<3Yv%E_EPaDuE*CtSBrfhYt^jw{^Bipk>4}l}&yLOQvhG5bxTG;F8tCvlDKsKu z8Y5czi}k&9R_oamc;=Ux`}GqK*BoyD`UZWP9S)zPt^kjc0a&@xYC9`Ms0x$f(` zRHiZ(FkmGvqw@ZFphlB^JS#nGGuAsqHVmzdy-!awEqBRJb$x05ks6djSR8!x37)F7?;#2#Oi1h!VrR0&?tlqcNY~ zA2D)dxE=Qd+dm(se!<~@&uAmh7Y(}tXNnIn)l(N#-i4;jxdx>U$cGOW0lHU2kg5;XOh^HQA^YV3pjEo;9t0>6!N&{Peazz{tq$c>TsLD?> z_A_r9tsrr(xwwK_;YWDD->Y4MykGAdj;G7s@MxSv5WV}SU=R6Bo`oEr6?tpfz_hB&&i}bds6r$tMX{iuGpO<3w&21@GZL+i{ zI7^+^#td9A;6kg4ffp)=($eJ5k;)@DO31=9e{0n_^~w&ijZen zNnEYW)V&S0=dOYlo7jP>i?iDCxePTJw`qclo_5jGF@XscU}3rcTQKx>?X_p7GQgb zDRQ=UJ_gS$GVF`_HJVz;lZt_W^@OEutCJhLWPZG1)l?Z0zH|PyWWIU=9smRZ(!gtz zjTxRbyA>Cp;R@G_r&t+nM_AaFdn=saWaP94BJ%FV@!UY$)VBMM?oS>9+kPQswo^<& zotGAM-TSyNaM+gp|BY&9ddx*Xy?q_JMD znQxK;^Muw`S`?-3UuCjrsK&ur&uniGQ3+{z721*m_Af)yhGp~%3uX)0`8~Y*9kpzm znb7t9%$htJway0!vm!}rU&@WJ^e%KMf`f9qc3b3EU`{Drv-UXf*#dGjsevc4kL?&2 zY0Ub^S?tzD77TC3B$d;}3}q@n17Or#_IRYLbe^8mz;WQmep zU8Z+lFKi%b0IRa84MMIFp|ybf(OvUkmEM?>c#bot9cwpJ7Zq&19^>=&$>3X+m|Qr~ zey)FVQQWM<(ZIYIS7>718RnAYT8`sj)VZ>rBFlo0`t{hOHKrNI(s*>#d;(Z_T%7!t zFdidi1WI!liOrQa79(hhBXHDuhy;<(bdBNJa4|savlPYSiD~2y>2Jc!+%a6-W>1}= znzkLxTK_*E-L+o9Qw4R<%z<-q%6!jx_sI79M2vk8(w;XP7QC!kx1xu=@#0KYqm>5aJ0BBFm(wi^$vVjBk*UD8(d1!D(3H|>r> z`cs1dOz7kvWp)9Q{09El&+}H`a)WWM;QvHZxU~+7Yi0242PKsz<|M4gOyc&So@eM>!mXg@6-7%-lhO^!K zmi2s$<)F7!H~j6v{XwH=8oeDl4Qn?fE#*fY6Dg`>2)|Ap&uS4iRJl?$1m*Bqko%}@ zfhJm3)4P6z5=`teG>m{o#9M?MdXPyKw86%hbQzdbg(A>qL(65W&{8aDgKUj2nffS4 zBgNx7(Ep&8o#8o35uI^n`4@)3MG3b1YK|CZV?- z@z`EKVE_1dfrljyZ}-2Kt$l~SkDd9AmGd@F6|7NAH8JkdXv0l&Vo*`_F@&bx!(YGK z%GSINJKb#TSSofrGz@RAb0`Ov)BZ&MFgjog<7?=$WmSVHV1+PaGVMnG{H-&2iBYr@ zs&0OjSn}r#a9excH|nzDfX#@HJAJFcLwEYxaS%mo+{0dN75|Ca8LL)bvC!`G9zzvT3&H32&cZ7r@d8**O#^f$k8w8FR4 z=4C-P(qEmD65{+07wtCJdzI|d*~Dp4Pcfa-h!_iq~}mDNge zX%rUCs`N@LvZQIpnj^rw5tt||aUptS_BhYAmn}x~Hln5V3e7`afPZY3P3dwOGya`g z-_ItSIZMs*`}HDu|1`E}g}F5qL5q?tjg9|A!`0pGLonef3Q;X>4}t*|WvG0pR*_3# z{~&H)=^qQe#!V~7qj&5drbzU|=zSlHwO_+5q_%g3kBB=~j;c4j=(!e;Mb2m^%gmW5 zrdfXR#<&7je8h5vzXQLLXM;;omW$=PFkjGv&p0!F&iERN=1t(;yJRzaaw4kJ1(!ix zS9?_T6`g|<;%D-qQ5Iw5`Frmz7du%@RgfA6`)5O+)yL5%JHhV`U~gBD6vkGBv2Wc( z5P|*^;qbl6`u#4hk7YG^32r~reP`Ueu8-YTI}6#vB-IG?{=hZK&gF3$H%k6Cf@~^z zl@r>EBk(;siad1Yk9Ur)33-0~xfxNm;SP)59r})S54qGJrMkn0r>)#n?Z~w1wJHY} zD0ygz+rT!b&d$GYk__66_GH9070G9YJ{8Uq!4s~^zZBIPh%eE}27t$2V77R-O15&r zfx7#5;_zkuy4u!zTs5#PrDux6JOkiEkpiqlop=%p601r^ob`U(z%klw9>pf9$r#v0 zK%A{CRXJq}jmpEtf)7umq1IqVoIzvp_+zi(B161qLd%rC#UdmPDwd&_9&9O}w{J;& zN`u>%>zq6%a1LMv zc5Vi_Qs*yIKIux1Trqm96C_HZJw+uDmC&zD<#M;?i0IWDhAM~~j;5bD@b-mV+K=}p zl32e5mKC&`YHR-RZ(y1T9z?Z2L&>5_?!cQJMB2BhmvNj*tBIi1GOuk;@M}L+Jxmjr z2#Lnsje_?(ShK~V2+u%^_JD;?mS^>7d1IDobFhkkMJ8-sU2McRYt9DeejGo!r&JDF z0P~Vx+~;AV`xX?`q0lZq2!bOA z(*q|s7eVSgoB9Xm89AL$rd_tZB=17pOb$SQv+EY;108K#E5_r?{3I{-(wh~tsywt4L&Ap^O_Ei_dZ0g z`UpNlurUJ?jNQmuX9Gu5h{q7APGp9rz#zcLY`;x6E3>YaGFS!DAqB%XQ67i&OTLaj zh!iKqL?~fNa^;N^V?wL)F!m&EH`#qms5CyaQ2LELwV5rU`}woI7>{(61yTVz_I_XEcxUzM@*~VHul{6c2={F%@Da5F6KHOBiwyU z-imPOtY9Njf~<>zJAbmSne!s=xZf_D3eXL{}jL30zX?z+g1Vz@APWCf;L%;V2$eU33^!mAq^Mw1E4Mdf~!2+b4`Au9fzp%ZhJrZ8%+^rN9Iiqi=bNB7FV4 zzh7Ku9onngS+(b>8z)cKa^zS*cW_UK%Z}|wlCy`DxggNQJwOS|KUk0h`V9qbKj#$#Zjxqg~QhA%UMP(zLlfmY3?dFyJ*!QKidIWfmn_Fh4 z@oB}5+ACX*O0Po~4VLj38pjR0wM8U zUj2mVmR#aW>6)U!VV@XJ`jEZGkPOYiD6nV03jF(DxA^mIe?V-CUx0NR_S;9D;M?a2 zM)>83X`cr%Ua-T(yCkH*Do_v8r-q<=5m|v;cVIA|UMUCgTM_}?6c_c@E7BTGs8cs+ zuZCs>=7S+FeY(9r^2@&7UTg$KG|egIkXnWLx!tqU8h90cU|%#trE;sU=VfWVk;G}% z7Uysx;IV?>eQ94Cb1>ccHY}@f>d$YWyes6v-d^usf_qtl$)e29CzZ%l$NJ`b>~$P( z1aV_|-f(>9;031G_vGY2jpcgZNyfb>Vsdi}M#y{9Si&zpWc+F*4a-8EZ-mGQgt917 zz(u%i>q3YlDt;f;wc;uonTwjMY9LCwobusC`S|m&AfCWvdjxIQNuJw$6Im( z2^(#OfXtT@_{6Y?CIR1urQtUolV)*M{$P6@9pn(uAAsi%{%#Z!-=7EA8zifFG~E3lf&GDC{ba~ zPb&ls{l`?U+u>YdK=Cm2{Wf&>@Ag}S(=b?$VZd-T`tl;3K?}e4iKrLb?^(ltB}1*u zV;m%*iPK3DdCI0&NY09Kv9-s^iogX@g|YWl`E^3!YX|$P;o#mJ5~1OlSve~Wxrby) zDz*y}@=7_2{=fdOy1>ClQf@1*@7dm$3T+I{Aj~NQmxcA@2-a57#aKh z_2+w&QQCNgW4CwmI)!qma5vAf2%+2)jzu1J*wsthxRICWjvfL{zL;`U+u!H*CLfl`3dtW#p;Ps_ z#tE&e?cDq`@@#h|K36Hyp8DNE1zr*>l~1^qLr76n!8 zbefDgbA35x1YLL)RTp+WA8YRV!3CbWwBp@hv5`k0o3{5K>$@d5cNDYNdN@jd zpq)&5?dBUF>;uWZcaW-EwT1v)kRJq075yfqECZH(%AntTN=EOo*QIv>i-*CnGT zleBfP`LDxcvA;KI`W9*(T5^nx)ff{hWZ=i+i3AA!?t+Oz{NKy`VSQe%?k!MA`L|~` zQC8~=h<3lf{_>bJxm^|hO64KZ=P(YI@g74Pf^|mGE?I;TBD> zZQjo`+1q4nHCF~U5wMOTv{%ZdDp%J_l-IBvPz4yu>5zlwT8cPz)wpnBWZ-En;n z(DLDcfR1Z-^rPZ7vu1}ueHN_3+-50c_2fU_Uk3LC>;&p<6?45^ql3v?9bwU(#J!E% zvpS7F#?D{Paonp-Sd7<3-pm<#1c~!?U4HGC&VVKWge3}2wKJkQe0F1L+H}# zxHZ)@0$e@W0GkeNsMNQU%`~c|6dWspD#M^IDYyqlObrg-Lisy-#yWnQ%!c)zAJ=W+ zbwK}Nukw!^c)`&-u1=+Mw**0alBa7A<6Emth(&4-0G^18B+lag6_EB**`-y1t zRZQ>9MJZ67mach)h1J2DZH8J9@xKlD&>}`@x^ra4%=BsNsQ;=M1gm^k(5nG_A6HHL zd_HM~F$!1BOoUMS=JQhq%NndeHmRtsFfV8emKzMiRhfn#EG+_Mm<(r0fQ`xL-Jz;>9}^hqpWt+g`RR3zsYaGV8iE`Mx+U_;h|^oipa}wMYS3zSR@A4OMVC zwMI=Clex5O5g_5W!NF=f-3~%Dw0NNV>-}=b?j?_~DhJS6J#ASarI{MS&i?sYN-)PR zn3BauF!#qcfyjy^j&7DHusH_MKMXHkd>vSU7supF{kJZo=ym-^)VMV;G& zZ2WcRnb9nbwOXxpI1osyKuX*#VpBzxRbUj#P{Z0@VRj|?=Pe4o ziDU?fv*VD{pWg=u-zMpgvfJ9D_8!vpg>)-25hqk3fgdQ?c*r|o%F}i&%Eee_cB}4> zt}y}lE{_hI)tJwQ%oo~;PGd-ILV)IhXmUj^&M3#FN5N~v zRgb{rgHPQs45bE}fnOo1`Avik6RT@V)nF?{XyMU5OwJzB99%kR9Ans;#u86}&2879 zt#m_kiG8x+HwLjxjC-u+27)77F0z~0;%lsqs(;&VNrs5*NXvUH&zbhQ++*yU1&;Y} z`_{4&6!{R#)%~N*@Tc}rw-a;Khj4xyd@*3(`tmHkb)ZdB`N+Z6==8S-8F3j2LttRu zrWZpPYgVcFd~HRn2&2n#$hBV#14{W)`wr9hGC3HH&Z(~Y><~O=&9#Xm%&qz0S1r#i zJh0u|N)W$(iT3DZ%o`7^Xr!IfMg>KBJjHMJ+<%ZmXt^`5`-6vLE? zP=OU>7Bb>+h@m*9I25_vPAfeyzli2{4=Ee}YZK57jo8Q9z6_GYq^%} zcV7V>p#$M}{0HGdA(j|+IHd9 zmU(RW{R{cYc5}PKAN?xZPOo46h1dvxw;wC+NV<5-8vpTVd=|=dsBAA6x=<`eOtb5ykmOcxY526Keb|(fs>PkW_7rh=pt9IYLl6 zyxi`6rco%{1`cYzwym$>dgVUNd-~M3tOK|-)M&H_n6dS{K7V)W-&Qn)zbnvQ%+2eN z;4>S<91}so#UNvB5rk?2$zE`IrDOH)$K^v}@F2W5#F9UC@SukyK^BciEQO~_Y!Uw$ zJu3_6`cHSu!hJORmZZ`3#nRE%jaMS2HfnLAK|z_fZ=}t3h?oN-ClXLUzG17F@1?CG z@dxoHeSg3{oko@@Sd{!f762-Ks0cYbwS0y4P1E)fw4f$MwK-RC^m8JP?`HElg6Cxo z2hhjE@m}p0zhezNyBU>@;W>N;=w17}!3a`VSwV?eRBn+&MS^iOrhg1`(_X@ZGAhV4 z#nQ(*h;VFI6aI-0qiDCB&={EsbH>Vz#r)ik8M|vQXM7ZT0{ZnTV+ALp6)#Q1mNeLK zoZo+;Bx#s%Y04>BCIf=2dZJQQICY^t38*{`# z4hDl^7J4%2azB=5aVK3y4a78O8I!{V8Xvf=Ees{4$Tsmi^1T_xmN6brEHbWtzZOZv zujAzjz}$8>&G3+zj6SF!@pnx_n?jTZ3YzJRm|^=B4-aA=AFv|P%A>2bhAu@=@YuOR zoB=R`VB8@KfDi5h2K0U~`Gw*iiqC24%Jd7nkI^7@zB{KiCDfa7V=QBI1<8CfxSX3e zIe7YQOWZEr)@v)oi2HXGG4EFm`s?>STRUtCG*mOe;nwys)pAl;~z zm64X+C|M}=K}X2%NgZ&E-%+zhbZ4v079uQn$j&)s)~qmsa2+EA1}s%CP`PGRo@WD- z1k~N152f=vOC}t)9-GPG+wBA#e!%9dmw}isQlFMALSQL@B`jepZ{;KHAR4GtybcN$ z3#l8KN5;9#j3eWBc~dzX#B#1g?I+EmHfO9WG8-A01rkfZ(^h?*j31?sFIj zIl^I-zHm){+f$HiS~$WqiO;cb;5l?NR~z*4=QK7UL&|F!Iy^B0M;gOPxwcBM9wcSM zv@v^yu3l9~)W<)Y0LT&-lcyVVP=GIoXxX?U)5Md;p2Hpc@|CQK z;snH-S-RfIFJ2Fum-Z=RYiQGAih+u0eoCj5nk+cbTaA&e2&gMtlBx_1T_>@2pe&Gk z-=AS9YAk#aW3(z8J2>}qVZ&9URE(tgu<`B^;__z!B3*{924zO@XW-SX5u9VQQtu@jDr=B+YWh6oGG)19x?jbu zd1v+~5I?+ldC7)Xi-1?#vkDy4DTw|)RA04ai%&I&DN4 zm4~HV5X48I_CvK~Sy9`ol?_$A)c5|%q!^Rzvtcb57}xP0x+GIOAUHJ9yL&~n?yrnGHLMA|`$2`Js% zbj6aXjzLRU%33ww=@kCIHprg%rxFKPQ z&4WBC&qiqyFAlaog4tB0oVd)AyCdH9JVfYP{XS*_0MNa!gk#vvuWG(Zo-z9#7;*Z_ zn=E}H7M;aspnegHs?gKlLb*CG|9b z6T^N`&&ZsMj2J?cY#z~KdO_fMS!MscEWefDM{8k4Bq6IqOR6ikVMRbI^0;!@i`GsC zv>+vFxtK&@u%$RE57VK@XpOWNiD$RVg+*9SE0+ znh41I0u5)P;$No2CKA(?gBef`M6d&)L~~q911`#$V36j^tip#f?vMi zjmbrqiDf1pZYm@U7<(cCYye*X^z+-R%+HFk1U+_A zutJOn3c?{oj5uCFf%#MlI^OT|L4`_tQAg*z3sg``tlqI>i+KKb&Gq(su_+1P&EfOR zsn=@0I9I)1Bq7&YKLqc{?Hkz0#vG_DGrC3^GDl1>YsI-nCh#lq4d1-6Oq0C|)8^B~ z!;VD+^F5wCF85fvoZ6)BwsjEQAZCkbJGn=8Mom1ngpx5A1(G=0lZ75ByO`=Cep%>TvkusItk$e1t#rB6Ujm|qU#>Wh{f zwo8v-KF&%_kD^jYVq2_a^|Jol-(^VGj*L6$Xd$ZH8`Rn7)J6psxqZt#LBz!Y5e`us z2u3k<)yi%?#)(UOUC`z7LU`0O!-!Z_M-8=^Eik!iSv!EE`3o%2dvpYriAe6faxs^Y6g2?sOH3=@h?h3kf? zK~GUglK<@%z+DJT?yc%d6^#=WbFce zTuZxORPt0ZP^icXCfF#}b=QmW(0FzT2<`Xha`t*jNQAMCK{yjg+X^jfm-)ab#`Owdfu_0r_#jIp9GN z2HoPW!}JF{9yhR*3VHpDTcR5?65cL3IG`koCsxOSq)*w47GA0PJY3rUI@q@F@wb3S z2^m10PI*R`7gz8=yPQQka70h8hwvk>P$_poy|WJO&)Kxc)r}_R2@0G* zR50pCNgOz9e}h@v^+^w)E}CCr*a-Za(?T=VUzt8n;C2FMeuV0ExqG$Glf{~q_Gkrm z?1Kl&4{x2x_5eK~M&G@^_yw7wjb+%;Fr18w_CY6ba@fJ`M4Y4!vhCvPhn4BDbsRI%$B|DzO`MmwWlQnTMnQtuDV4 zaA#2o3W9F3w1pVW7p|oq|@r$#+e_7Uiw!}m&^Va1@Ds?T5?F) zGd5O#c1M?3aA>W?@%IvTaIl8KFE)61cuxz3V7YsGOQz@;!6=aCK;(Sko;k>j|KcCv zNJNOynDi{0)(951#M}UY=@zlV`;pj@h16lh7+n@DXp6}KV+Ec5q5Y?!PBC*P2Zkb7 z6R_gAYEhFaMBDv*xn6a!X@b$=c3bbjO4kvVVD7-1nHnpCRx!8oOm$-G;zt6|Qh^vJ z8WtqlBP4P;Uof!EUA&74#th=g6oEfw)$n=V8G3%bVF?@jX{h(SH@@|aWFKdih51{7 zb7GZo1{9!jkbog)G@N;=-~iyY>^%U4uQ_Xx;R0CtsKE{-G9ue@Ih_WHXov_2Vf6HJ z&6f@UEv6Gm_4}I$?r0|QOKQinv4HJrdtZnGf_wCZMAQ5Hyu7^mg37VJL@zzuT=aS;-7ciL*B&f9|i z?0dsVyg(aTF#C>~e;FR|HVoczx)+hFM8ur8wy>boUSby;Lf5wrJ zB}*W=>72P_ITj^%zw(tuoQ_jS2zJZcl|g15`1JJjv?g_|gBy8dZQqM?3-d0qy;*ER z1O5p%p)y0F)3@EHcS#zgBZ%eh@gd!gt+6DW!pdI; zeFW(!zi*#0PH~_DPj0qmo@~y|V0btO{KNfs-5erSbUmf>&)k@CC*k-fxP9rD6okaD*Ebmxcn3zBp^NodDX!zl@z|+S{EfNtY_Z#?CO@V@w z9>wlormQsynbYVRrFuQ9S04oshj_AKe!;>>nf(~AO3%0b_iVJgj;riDaV z_SZ@USfc_&z91$Mhw=%*Y}@)yIA|-HD^{*HR3dTdNsBT}QH4MG#Uxc%x}9%*+L@4g zzSC68@uy{}az5Lv$U(WCEE%M3YdN1eZF7qNbfNk;8I9mZZpEvZ_*$`IdAR19tHY9| z%Y4+@dhO*n|bXgx&N)XfD^H zo67P|aRd?BBTFrF^tf+rvvx8b05&&x!bOx)f2sfIqBegkF%Uf|zqOg_nWZYt(`4l{ z9ww>#@$5-aYL1%zl=@V%gLm1#IgW&*aFL~!Tf!8tL!CwKB0!lTC_|~|E4Aa%(RgW5 zI+bS0xP@*RNOF9DalnBC`)!daPK4kOx;%CAl-<$NY3=V-Va=K~?sjl+u!I3&=zbUc zOf_BOrF9~+G~9{YoXfm24D<-4cRc^{Be&zZnT}agtY`wrc%Zhmw}$SXZexmVPIxq@ z{#f-{1BvNCn%!muG6ETanIiym*X%#@c*g=cL? z#zPN3?2$41dghF_|I9r8?6dI^sO&&!z(5Bpi;Tdz5THK=&G3n44jw${lU`@cZh@@; z;ikWTz*fwA!=;yA>bD!8E8J|K5vT?NmHmI(SK3kritoMmZus$!?+YBGYwzgv_Lb)i zPnb`}l|B&(Y5Y~K;K zy#2P*7ahJaVc`25aZZ+=`LHAXd=jZzW?3GKz(h2b(gJjYyUGtbVn)BkCMlqwkr7tJ zWBBas;RbdDl$-i>vpS$H(T^~ap7f_`^o=0WJdx+|1a4Bh@$~qs#4L3uJKS+I|IwpI z!?Vvm8{RfvG%|c9^mO-HNBxAY3iXBcS6vD+)PJ4@2#^+c$y%QB(SII=_G76-KL3?`)=Xw!#uoDZEO(%(FZe0pWyfMSrZ|b7Nj=z#u1)6|inv28=p$n*`zg~{bmv}5bQg8`w^-s$xiJ4Nbc7J?p{_K;PU)1L`{8(r?b@LI zgg$Z8YP8F}2Q8+@PJX3k#lFM%BQ(xrFT4^rDLq5)x*vhm`LI^}*xa5a5<5?y=_}Jq zJ*=#YXN6N3q-ntjz08zW`Ay@I8~H)TK6N8AA;=NTpG42uX||vpNMrVd#NQyOvl>Etp0!#U8Ou@ym~2GA%{APi5ZO|v^H$CXm>is zreB2nF-hPHOC`FO(@ z0hO!h0X=1gpp0d&vcuhcl%LX}_(>o9jdby$MkpW1`fRDu(;R7i#I|_bn!pXJ?nKo})naM3~u#-J} zLT<1VzeGJ7qSSLHF-jN_5;5OY#K}{q!mgb=ohY@JIVKvAlG2+>U{!RZf}p`9ou{o5 z9X)o`2q`wM*h6f-dSK}w4@Zw43vb!E1GW?a{@S%`{mFqUCNl?Jg9sctbl3-wBu%t! z>_4JYg{?P6<~hJAJ+&LX4*zlAGl^M3A8FM}+2bSBJh{cN+yB<50>)4R0sZ%AID2_@(Ro7-B z_tiHCJK==-urZYV{_M?)aM0BE-+zBNW=~0Q)2FaTMo{nQq_OP`CLzq@fHc+@gT^7D>??q-2BO<76|C>luZKD@nT!!cI!|*Y&R6|*sC(W7c5vy^rH%t`W|n4n(quf# zqpq1B<&pBD{OK%<|C}q4tn$#|LPKfX8Y+_lRWoH}gR8hyDD zyS=@$lW{=^n_k)!o_*$750f|)C*e~E22T%!>+ELu+ittfciJjI6GmutAB9ExSBofka7_hwCnP6wyt5z-# z7hZUw=WWPlLvWA4y$Zz*=HQ1o5ioix7sPb=<(J!F_^z;F!v;mg1O`{9lc-{G_b<_Ogn)bl|f#5=ztEq~DfW_;4mZVFYVvm5HnL!(Z@ z=&6Ih_{A@buAV6I7V#QF7hgq&H?b9sy2KgGqeqT}{reBv?5k~6vv8a*8NIfQ82_;| zBP*7#2rI2aKu2%H%sOm`2CSjhXijBA9>Ik=M;&4U=i-Ym4!`jmzY#9G>@sghu#Z^8 zL5(m%Zge4>Cd+49wzRtpBxwU4dgvirrQGP9B{~n_h+EnSCc^gZ+vk%J@Gu)e`eX(( z=R?M`a0hK6*fK|$4E{T9rE0Y3?4)Iax)y}+qCTP4cE68& zKk}z&PkVNDTc$W`A^%E)@;ly!hq+qpZ%;o?{Te{CG|_6$1qME!f&;O;!s-AQ|Ea?XZ7mU zeuFG;ORq4RBfTsZJ^I+Aw(D}2(V+F`ERRFhR(2ZQ?%lK3c;bF*SK|v5ZSch+4+@{Q zn06H&5_y8<(83V+BYr05+#f5VJTZpe`@*0xSy`0r*iAArVwbVm8Tl*Lt_e#mt+9>~ zT`ZSU{DfMOPGW-RYcd<&cl+(P`(RVYxxfRV@VLZ_op|@$bB_;9v5WaRn?F{@o$B#7 znec%o4#}f3$ zVDQEAGd;6hFs;3N_u1;e0e8WMXR5AGd+x2KvH3O~$bCBQDxtwsv^vwC9lbG%1%D z-aKUb98oIIsWW)+nl)>@(SvV|Cn8T7&t_t?$^49$j)_C6z76Riz0k1eSbTlFd?@|$ z!vxp6@4oAue(V&UWZW@mKn7!0%oi@~cK(GM&SAP+XI!?G)&{W97Bp5515NVf`LOzd z%;W_fPYLY#5T4IMEqlxm@jY7G#^z^IW0`o5VU$68$?Y7u1>)PY0TOjZ8Mxs*{Rls$3rxTVbD1Hh?%bkEKQUIi5vU9~20<>M zNmHA#)1{+|1@4LgkLwr=6@IavM5K9?nzCc?w#<%hq&%7OMhFLFKFpy#(G6~@QNBu_ zXpDH^eV1Hvi4QJ$s)PX)D|(pk-@iZX*|W##U+E!?HluN#;%T#0OtyY^EU*op^zm(6 z<8*4Yi90?0znzF~ZK_ebxJ1JZ$0;c}bo z{gkb!u359z-&_5hm4Ne$g`uZ zqqHi>k~1A|T`F)siJMMFrsI}032g7688J#PJM^ewxE&q5p<{XVz1udk;rT9yF`c+) z!>!UPnRG&I2ndH2f|RgkBhF?EW06(9#kTE$RcnLS=>SYs*})ujyH!A|^1ey{_E}^E zCPIKlAU(e;UL*H3HKmRLL}v{Z9g1P^I5R*mCY0QYPBWdw^4Ti3r4c5=*w+-h818&d zf0S?P4;>hIES=y(hYpn*wmD5u14TxMfR!xdlwZ+S@Iixo2xjUzU*vqu%qSN+DSiP( z;oiD9HrWx|!ZK|Y9WaQj21I4Llq3dQX$M*6%_LLSOya1209JhJJEUb#=lpy`z1T&g#E#y%gY7rq_b0>28nHH3k-G^r9VRcJkz@68)y(2@~AThfw^KA2`r=fu0be2i(XV>69A0 z#6xhOxK=c}^&Z-c_$Y3|uN9$uf*0Gz5ovx= zi^i&vW-w72tPm`6>r+`oD7|&CawUFflwB{nC7*jm&N%k;W7O9g%QvQ)UicA$zGRwr z%v5GdBQjVqAcfY{$HFb?lzZGDlt0&;=a0fB4bUI)LBleq{NStD!Bf4hG}>b##O7$t zyo?jr0-y2=+@43$Xc~p-TJy{#3IjvhTejBv_S&Rw$-TnEU!}l}>`Pc#BB&kF+zY*g z8Sdpr^%;K%+EC2MD{d;!r{jkFnUxFN_=2G2!6y^kywxTbj@WL#!=-p|OqdAbKqw8a znZi$O*$Rj9Oryh|d!G@t2-s79+GakMaO;MDh2Srj6 z^++T?BvW>iIHsJjn}=Pup0@Tl%@3JQr$1);$ls7o+nM~HNz?SVcoNxdXB;a|8cET^ zvP@f+Y{{}DijpOoqA0!z5+DGw>$CRx-n(&m0bBqV_l32AbN4>`?C09wv-Vp1b!JV_ zvn95!I9a;hcG#-&e3Fs%Kp61?+MIWuw%+I`x*7BGWyQ9v-eyE*r)SayTUIqSHMwT> zX4I19axg=97#P+&gxw9}??#n3wBcH`EcWgTGSw?(7_0MK)hBOTut6f*w!i@b@4tV% z)){o8p1qhS+X%MW@+sb61PVG;+5>#>5$^nP`5Lu*rV0pmd-v{jp#eof0vZJrc1m28 zZegqptBMh>8UB=J4O>P3qqqvA`(CoC7pAfN61;d;hT*<6dWIiv4gsXAo3fMUYb&0r zK5u%8Jyb(3fWu!1Prk~#+jJ`HLVYB3;$F-UFAL#$P?)f)lj4>4jrF7nvcPQuDXf+~ zRx)-k?u(+yD!4AOW0h#0-AFSOC1$^v;bkd$FPNbr4td<^yug(sQz(p*_CA|ZVaq?E z|Hzp2xrW&bHk02i!|F%&bwgA12i`&4;6;2)_w6WSW83MTK@)f(Ak-<%IS({D>^3H-ahn4*5ul;)BGYou}O_frdGOc#F^-`8;@uJXq@G^7K@Cjo+ zghLU=FeW6j57QCa4e!G>bIh-A(I_4>$MZZrPWB`gWt3|KKnP7$)s+ zqK+v-`5>`7?FjH+`lXwVVGX+g$8rW=v&lFjO+Kj23LN%XvoDq~W7QxUkeRtOWlNa1IZtBHiB&6kz$jx_ zX)dR|mMUlYylfXK0=zF^mVMwK``E|QfddC>ONwbj(W;d)EggpUMs%x}OnKCO`qw2K zsV#NitVViu1lNJ(KqB--~65rYSEU^jW$v` z&GP89pUOhH!~^6lH%nx*uhc3;aw9yL4j?In`z*yFOkxam*W zx5^35&p-dXAD{&d;j5yNXxh#~l6Q?}MH{d;pOf$3dHWro@ENwPYBnisuW-ie)fr~z zuBMBZrfmjxBHeGF*|`0-+dM4|RME3$*>GXniw>>U30k0hz{8*!dpRF`@ImKYJX61{ z^i((9x6`KVQiP~8vL5`DQ?-vAIpSsUrL$I6`T%4PpLKVrBdul3*JlPOT@zYW!Fc3y zi^<6(NPR~~H@F<~^LO8~Q{dl8leRCJGe3OR)4wrmNm|3vw4z0(ITKi!$4^d9`{93C zBBcy@YgV0K=ltleFdSyeVO#9&ykdPG;fx#kJABP>!7MlRAV2yT&V0CLgFVy?+1Em( ztJZdel5&3L;(42BJnb|yZ!d47qN(!pycIJ~(WKHO$cXBfzVs#QjJKq}`-lJM>$K?r zAtqsbsi70gvM{?^P0GN#SD=-QyB`M9Vo)?7yY6xKhJn^Js4hMqGj5+^IdtgJbkIf{ z7_sNbc}BGWDgegtBFPXpgE{*EL$xEP2{O9z{qG-6fAS}Pl1?9e%TDFm>KI@~h}oe} z|Hh}&h`p5Tz16Txk-R6Wa{7%a4s%uzW?VW%0_!uI=JqADfZ5FTie`Znqc_27bSG|A zC;a60ga-6Sw8lo+gQjo1@w$x!AM<+`plzQA-%y-O=f;kLislG-FF{IfAmNHIql!SKVA0a%)GCe*OqB6mH%p= zquB7y&}IlmD83AsaF9co?or@F<5@p@{f+eObI<105j$=9o#BW*Ol*_*+Sk5j7`nTA z1&o~6oC4yj^i}W`DVq4hE81gd`<~m= zUHk9y!{RPnIG1+cv^yO-bSORYiG!|q@o5iu3u%?k%~ zmLCK}-+(Lv4OrRYdnrwLt0~{+@1|1B7A$`i41vYz>5>bF^39lXyU`WgXP^6Sdh*Gq z(y7y@TzMm3_&h<8Ez5Sm&1I<>zBc*{?2mu^V?T&ZOQStvt$e~=Ry27wWe2tiFSG}f zM=}OmOF!R%U(K?*516poPU4U%iYf!Nq`7O??zF`Q*C-qM1?lH<=Cqdk>xyO>$uqT# z0q|G8`qlJ>FMiQ8@dDB;OtqRaQPa!H$bIXE%xWApWG_^PG9morvSctJNKH6^VScSP zzQTzylp_@R`;VN!l@Gh2t{l0S&3orvK%8!V>{L? zKDfpxEz%!EqmG5TQGaH@Fsq@bC(vgnjGZCCA^Yf>0aynBmMalKwxI(gTbpQ8*KHyY{dFmV@(WF zU^pP|(xtrbk$d)gjo9j-FoQvX@}1-}aq!yGtkwHj@&Vi!DM;_xCkKa&cg@(u0IOIo z+4t)&U%Ze$X{QSRr~mLD(`~ohYP`;r1dE2E2Zqafl;v-yTV+;xRc7_O_{-hSd|OS6 zEeL$_ujK1%QJ!4SJW#oB-<>v~{$+1F@-6eG+*xkQvJUb1<4llIn{9mCWjSl4Ve)=ts2EqZ+3&#F+vQe)g!?`w)Cm5}hFO0j%^D@^ZFfOcE1VVMP@ zKY~7nPLh4N*`1F^_E{!Nn7%-r&5% z`3QqjK-3j|mNn+jj}VWM#d*uEnkBXjKlm5Rb;wtSPNih@D|ug(RyS?cNp*4B+WRS+ zQB$7vYyH|mThT&vKv6(p$o?#sGJ4sd2ZqiUg_OO;(2m~J4+m;TK~|9lWktAT1RS@_ zdTv+IV6AN71{=J93lvVyC~!o=|?cMC%nNYSvveK3P+jolk$?BMf7`z_LB77)w8AeDW^MWG_(of5ZGO)@^R%se`kA|-3Fnls zt?B2s5Ba!lGl8e^9r-IZknzF`-%J1ak58wse&t^o{g@G-v5OL{%($Yd7pzPOu=uh} zsAuW>I%D#%dn$veWeXKBHIIDT+rNEKXh&BrCsXdWgQ6lSLJamc~OXp2# z!Mts46qYCm`dJvu0$7;_%WBV^JMS+lVE{duI!=@r5xj^MJ?%O9@j_4{%0+l#E8A7r z+Ury1+CDeA_%YyS`wM7gLdh0AR4(orvCgH%HlrfCfA+fW*E1->5-9Jo|_3M;yAR|S4_H@Fdb*~ zsXiOU$}%hC2J^>E+j9GpcHYFeDF^g|oPmK7A}k^@dO0PRc&zsSh=#le~zBX3px`JKVa*X5g|@ro@eS5Q-858=GymYOBpaowdEgv%YF4516sqY{D*;Q-dI?Lz!l$ z>Y;p8hDKY@+ijDN=%ze1Xw>XkyYpXZdS#h$`+m+UvGQ4&KK|5+OLF-_VTs4Hef##M z{rmU3qRFTGIQWxOc@G~xZ0Y1d3Re2S^Uw*##_}pD;%g8W_exA{>Fi1(N1XnpfIw;Z z%P%KLGlSs8OcQ$--+1GV#KAfL;-7!XH+nO=x1NRB{%!3}mpqTwk*nj(LB>sWzsAKO zPjxhM3-4>3bw`r#$Z4pRiGh3>pV*d^yd!f)p(xpa=AZ{5y&c)bnaWQ8!st(M+_8(k9Q z$PGWGwRG+gqMH=ZyYFpXGKdZrO8Kii!WG5Xz5B-W%l6rlZ~x8X>Ex*o)28a&43q+4 zjqOTh9O5Z0+}$*)8)aCl_d;|ak4ATyZ?DjVGGRmym02qd^V8OTi7Wn7){nHgz)4;P zo@Xcd3IpLe$Dlrgio)py^6(sT)~Ix-?OgHY=69w{2cq0~s6YsZe1FY_`g)POApYGdDy|qfW-Q{dGy|O-~ zyVdxE8m>l*YCt3JV`piRb>_Yx$n0wAY{?UeS6-q|Ej@X3!S01JbfMZ^%Mx60NifU( zAv`NDp`~CxXqH8?1^dEix2`qevNJB*s&p?qp;bmGc@jyLWdVm^kb|h~r#dY^XGl1Y zTgBnNj9a>MjPCrdbvZ~MI$%n7T4px+ z456O^!`A_9O9@MA*=q80I{}xawR|>?nNQ-8PP6ovDr=rUT`E*OA2 zPyNsw4g&&=D*;w5y>P5^3UC?$j6d)174FtKQKI^tpg`5R!qTo@n}1MJC$f(``j-Oq ziIbBTy>HaM-slJWw>|s6T7Ss(Gwf#NqPz^r$j z3Z>gmRWlE;27X{(oHBdv+&O1fV3Fk-8X+SU{6Yz>(=%Kvr$9|1FyJ}w^N|kHD*(Il zR6rhi*&|(-X5;INH*u8n=y#X*WPR!fBeY+pd0&c*c20OSHMvGL!85CF%1+;(8 z7*uUAgJrbfjSB@^Wl>AIUIA=2!asA4J(~G8?m-QbIKdw-SPdqPY^P z^>G|^hzMMO?!<`?{P_Q~XV3Z?ZocV*f`E`#VK3kF8^T#1w|r-d4pg`p6@x(?IB>vb z2p;i6rI^hW^D0Xf_$sLp?v+xY#-<#DHacqwWqHgz!UP4Dpn&>D2F4JyFn(Z01s?`2 z!UP4nLxHRi)bg$|yP8ipf&wj50A9y;qKFRS0rPZR$z>x%-kx#NMhcQ;m^shpe5 zhZTUe>8WW~DsQ><7E?CwcKk7muH_n@Mg=h3VS)myr$ELLv+Cl1!dc1xR-aF#FlZDI zK61UT)%GRvsT@7KYWw8GtFTLKmG^^2o2XCcDIm--T2{kW#n&iJ44rkpP5M2@8jg^= z>>p(lxu2V1n-rL<B^O9vzg%p4gkrn zO8CzptS>iHI%S$QX4pq`iK4EK0=dl%SB4W|0UKORY?`o9F)dXDN<+SxoR3R`A220F zGpCa~QMp%FvWOiN$l{lCvWov@Y}Gr-z*?ZB83jNNm--bZM*6mOA5(#^cF}fF z(?*|rAa87E2Uf?$18;|m=u7^;Nn*X zmz_$BvarEFw_2^`&dY{0(yP#6uU`tx*cyKZBv|YJ^fS+-?>_fk`!vA$#0=)B4PaPT zXu?-kE};^bDlxczDHk;l3Iqjul>(VhWf7^7UrDjVj=r#0TQJHM6bK3|L;>-zjW(FZ zzRYUuEX`b*@xAHC?Hih3|N7U{@#DuAN}^@|P&8X6ReuJgg9K36<<(dl2c3t_>#{d* z*_s&1_`wf;kd7RA!-5ahP7D=5Nki#3rWf~vO#v|AxRPzyLEt+6i{t47J79`uD4+I? zoO$?zD#BqcjS8FGhY1R-B?W}Az}i|;xqs7UD*zV;>zaSJ&<6W$w7>H9fmyyO2Zq%D zmCC04`@kmM@Qh`StlgfPx{`iy*c8n--?Wg|T+vj=N*qj? zmV3m{x}bnMIHWIO0xZCwwA_q)PBFF+7A7+{h~xhDtd>SaG48_z1=>r2O0_i0c~zCT zFx%d|BDH>}031kMNPMbUol4$CxY7h4E2$Cgc2mH5(pr+js4&=gUkezHpg=_d@h;iU z@hW+qLxJ!IN67fBN|UU=8om~a=77Ub;1H;EFUB;l`s!iL6L2v~%W}v$`;HifIEwEc z_S1MT|FG8=1%w0adN&9Q<1YIs%=)5C)HWy(6zE3^l;d8dE(sr_f22R8kL1EH_**}= za(|Z@4C?CdnndZlMge$NmAQCc=4I{UX`yI#t#vz-F-%BC45@jiXyGg@&j`o#xvhHi zLxPy4!YIDdR9K}S_WGniiH9K*z%rA{w5Z=_T;basf9sQWQR}s)K!rQ&NlShOW=ot3 z!)sldNWY&bPzqY}`%(X{rd5UQ0VtiEbCAzE$o*tL)iTQ3PZTh|bxmqPz1-qu>RWYR z4-u}QKywPXnhB;fSXSu(^Oerk@wHGio6~+^d|@~eqQr!_mmhZHh^#Xy1Tp)g6CEDr zFra#;+nA=(8W^HQMV3VY$BV@P2fla7M)+lX#NY9j1%3R5IqVWUrCagC4hpP}0$HIn zsAa5Gy(hRV@g@wfF0Y6^cofJ&z3{=ocprZFVS4JRr_#xjC%u29&U!9)iLJq-Nz|x& z6fk+N*oHD%Az526Y)YJb-E&)OjwU`x*l zBdjUBo)eEtX(}C$96v#Uc2NKxSf$13dNRVH@Q1%JsxV=%cM9Zw@0yMHgN=xV`Hvd5k9^nWI^Z*5-x9x#OSj!?HSV{1gurFqW|Aa9sI!znPw-Z9^ zhZ^K~WhaWLR=+2%(o^~#Abtj#0<^W-UhNJJFyLtCjvc(DesHqZha%g7LE*61YZK*L9~1~hbHLlV zWH`8CLqpRf_uY3B%P)9_qM+y8%alTwgfMKvaFx#$C+xwbfZD%ocVXqig$wER z*I&2qE=`)UIa-@F2WOWqU7AM_;Vf`8k1TQ1b_!HNf5oT39f~E#wj-!v8Zjuo*7l-A zf_+5+xfWQ)_M@P&C^?#U4*XOo>S+8Qi)`Ke@wR zzZCezv1946#~w@XpZFl{ykS?G;?p>DCfM8Y#Y1*!=4ky=C~Dq$3S{2pJj@2i81UG+ zb7y++!3Wb0n|;TiG?YB9^JR=2`-cKHaM4iM#{Q7Ufu{x{#cf+D00!A_&S1yfZ2tV5 za431NtrFg%{dFAZqHz6CzbIp8 zDF8Nv5A4#++7bV!PMu2AQ`0tMG?6wK#x7nspYFT={`5P)^E-Bs#zqeg_H@xXmT8vh zg*zzF4hjHMPG>afKV7_dG2MFWt?A&wgK6v5t)4u>S}CN--HyB?jsBtlSP@$jpQ8rX z>_9x>0!j#OabSurU*AE4RCvcE)Q{T_VEcuo#TfF0&ot^RL*mvyNlOB5L zFk(o! z5y1G2Nx`#f&j}|}#*tsxgG~VmSgNHuFxfSXp?sQP2D;dnsgIfyk0rFi9m1R9T$hG2 z2|FmzCJMm59D5bt)1F~?9!7W+p9>z>Cc^hoGU82!6f1S^AMq1LSo+UuAKRc=<6UL- z2wP91!dn?2+(ChMQGkBdE|$)UXDMm!#m~TF<8y@zJ1DRq1q?UMOv&GxJzvZ(6wSq` zGoa5(z(}aFZqoYD>j7r0tX!EfpcIK}t%d^X%%*G!Hp{U=%*ZGw8E1pACY;GH?4Uqr zDKLMqOtYDtEkoqiPZWS}Wqy_iVkNkX-}O^nqO3uIpg>TdTNH?;v)!V6hw@eDNOn>% z<%h7v<@fg7l>t){q;BHxf7J+w;+JXR4l~#kXcVlt7lyExJ z5(xW*98t^_P(YYa)W-Igkj6nP90=rErei6`7(z(1PEYtL-GpeoS3Y3}1=>S_+=EJm zXvDK{*`B;2m42fD?Ju5&+n2~%CAM$dn(n*rzO;4Q&NMYOWj=XXBFbcmA;mA#z#S$i zu$B}kai@In(}f@IFhPNqC;(LKaz2K$0ZXglX`yJg)B=MO2(X|SV4i;Z>Gb52Puce~ zH~Lb?*_qiqqG8YIOi@TV+=at4N)ybhq{jMngC#BoD$bujpT7V7@23;?P1X$~8~i(( z+M^kGS-%*Gng<2?i30E{4Xp0kbwm2}r++OSxaV#=o&9``*NN|`UgB@~hY1P<1%d+o zO@YkE#Me}p)$q4aG)2V$wFM4!jwqP`i2KWzFZ-2eFR!K{hD zn#&|uzXeyPCx!%Q)T#0vxrvE!Qx>lHzB)QiI#CqKsmqsK;XH8QK-#_gCa<m=e&aBpPB8Gh88 zhT~b7pukEgAe=Em%U{)vUZ32853UayK7&UA^<{PblL5i~h7BV&@M?Xbeb$725kALC zprc2RrnldIJ3a8g1MUYOY#fLkJW554+D-xS9^`ttvFqa(ZO?MOCRoZDayO$zoe$Jy zlV;(1%}?c~ZgMx4ah`uQNQR&Lo9#oghCd#0!P8`F;pDLlJ7zSOL9Bic3IOw=KPgR4 zPNolRKi%~76`R%EFpr%OY7$3;4nW1xgBtVU-LUVcr>&Gpb-MCB4EO z6bK6RDFrH_f6fMFIa!;&@y$2iOfSFuayonVtS_UbW~ETpr!|dY2L*xxeM$jjG09`H zTdE5Dt>STn&$3-!wZ=r0(vr;AQko5cVn(xpAcJ-bNaz^p1OW|-CVNVL_`@HjmtK0w z6wPTnU2mH!n2gvC+pH#GEn3>Nc~jbE&uaVaH1bgqX*IwbG&--R`Up?pgpqu30CxOj z#v!y!luQOEGWP<5VpiCM7j{U4^uh!M+C~AGml@$q_~RqzZYnF^5U}P7M^M06R|yCM zi{mBx4IA$QPxPVmoxb|V{BobU@JvFGH7L-O0wvT+cO#E#8aX^$rGVrP!k6x5@p&#I zIYsxS-AX!(#V^xpyW8p@o}{!@UTnWy&bM&37n42c=4oAFmd&zkH*9;<$7`$B;B`tv zX|`&IqS-2?`Yl}bvH)~}1E8QZ0wNA?VMdcBj>8*F5w)d3NL&hkb?!>K;f5R1!w)~4 zw%8~xX`obKOVQ}sOVn>|F<|9&jF|KV4ulClmGkOruR6XMteCZ#@FA2=GX_D&Rd#1Q zf}`?YZug9zpuj39pzmdZF~^w?e$+AOie+7v$YEBIUql@+3RHZ{YvoEOV97!leJK4W z0@zmDD!`#Y+`|*qcSgTBV0c)|>WB}aWXg@Lv0C{pP=*?htDdW0T_AYhds9EXU(2bh z-c1Nlx|GN!{JQ~wcJe9G0F282^m41!kxQD;UC=cD2HeuZ$aG6_^0OC(PE92wl zst@#Ae`%fL29xU;NZYw{XF7QBVA{T8M^1MYzoBTZf_VKF6+j7Co2`=^uRdEcXM5^U zHm}X*eJEO9d)uwIreFW{UrU=dZSs*@02n4HkcBQjYmyI+Vo&Db!#_wruxsnqZT`8O z89tRGQ;yV{9}KaPp(<$DL4kHs;OaH|uB#airdmQ~YiG8R)*w-!;$J1t^3i?cdjYCJ zYUm!QOE9T5X#~j}N}PL)Y$;%}6;5Fkj(Ze0WNEI_Uvco`A}zvdCa_tY#{3jd`4V3j zeo`Lw9Gf&ePZUSH_e0Anf64p`SLO!=ZC!O(RA0NLK^aP#Aw-n!ltv|_Q$lL!96F>$ zK$MQ5rCXXIq*J;C1O|{EaA;=eyz~3+_k7R2_qpf4v(K~ldH4QnzwcV_S{_ndHK-rU zO2j1b3%d;nuN_md;>n;x6k@wh;}mNaiv)H`<@}6r7$Gu( zD6uJ1w3j5$ni-kVs#a~jS+C1b#;&d=hyoStegPC|`l&5VYo4BnEu zixE(;FU?KqR!ocJ5=~yre?Cyg)45;%8u2O3EmVYdnsX*O1bx_h>{^lU85?Q?2AM=( za@x&*Rl9r^cUHy5`70neN4ZE!|4BFS&83+#!vN?8dXIZps?M&oo1e`DDppA%f7FCt92$+i7 zG<4m&mV;BPvUY>Y@d*tkbwT+)sSgR`#Ot5^KH<_F5*wS<{i^N%h<7iwvmqXk@#6=z zRcdUm8X|S|{Q~4sA+kz=F>!mB{VBKbj>z~7@8(oWTx_hr(zr9LF}BG^XxTzB#?A#L zYd8^H%TgY(XS5KefZ15%>}W?n7A({?#H$p25;rDGy2u~J(sqi%I6-HpF<85Jbwu`a z0Z84xcSI3V7oiQ0lLwkraw6JJg6o{yPGWq+1yheyti<*3BjA1r{SUp$#73ObIiAd$ zDvH`NMUh#m2#5>3$C{AqR>J0GLo#_ahmZ=Jii>zfxyS6NqhM;4hPClBNyw?CM96($ zF}MD=%A|3E$xi@%ksJwciH@7YHiy6&TRS_^*tKE7{BFB%)dki|yCNI2DD8h-ge&}VyJ9O#e%)zpa*|FIt$_T?9K@3P-cXM^w2$|9li zS4fHTt@W4WEZ(j%M@1Czj2(s6&9*3b&b_ArDd_wikNjJc$laQQGr&fW=`3FMF+5gm zZHu}W7iofI!Es{9x>frT3w7q0=Fhx*tu`5zj; zP5z42d;N~%$v9H0Rf_8mx-4M+po50%2IV6txusDVuBeXz#}#g|qIz0r2=gtZy^vz4 zau_OH4FO;3Hqs4Y;FbwiJL4+CTpxwVbGk>i0d~HgcgK&g2h=@FLD$C1HT*xvXkUw| zYEFKQ&LWJc%9uv8aKaEYThw^tSsC>vMVc)Hnv9iCq=IjM90fh+$+6O7YF4p zpe52YRp`1$LLS@R(S&{dCVw6}H|?>E`B&pchsT+ue~N2$f` zSJ>WbFSvI8Bz`!(_53wG^*LWyLUCD52p-X4l3Z@kU(ihuYC@X-T%I@;=KRN0-etE^ z#Z<~kEjfS|$#(>2I!Cfk5m?)g*b_Wm1+g${(br=e=C})73rGh1>?Aq|T`wNp1^Zv- z$1i;uup!ZWDN0~PK=`!o1b>0R(*iFZYmHzTB&lB+1swo_KG1)`6xu3#D0GEui}mvF z`d)e5=UsuDR}+Ibg>p||?lQ%FY+l_&w-Ija7@gnxrhj%wKws97=?}}QJ!oO?saJWAKE+`U?ZlX(?0hXKUc&>gIEY_y*Lw&_hNR`us~OP}^k}o4Dt2*l0`~)&Tv#o;=a`7Ie@!Kjt}+vG-*iw*;3}6y_0Q?Ar44f-PZSZ2v7< z+=Y#)&soyRBT`C;C1!gWJ2x8~q3=P?`bagBXQk25WTT9S_G!T8+5F6sQhbq-WV&N- zs&{UeTTdYgu*7JW=e8;7-12Gw+EajWmmNMYkR0|olIE>Q&bp8?!0YK>_?<2}`6h3} zvmdFKK<+4caH|65C2i#4A1{=;Lt8f1$bM24vtTjvMUN;P;gNa$_iSi1L6&zZhWY6G zb*$~tvtYpEo(s)v3Aj*jU{L7SG_qvnyhh%5b0YSuwj&BnM7HmW^6JgX#dHH)%mQ%< z01?p}Reux%)h5=h6H)V-d7-Z{BI5E+U4JdvqX36{avD_=+K;Pcbrg}pKziq;rr*1B z^7$no91$5&XK3oN#8#lS=t!%(6{EG44rmt%nbGso4jygXN%_=IO3aLhLxC#N(|Zn# z{NeJxNqOlN$lL3nRV5)%=JvSH>+qZUN#kF@_KlPRw%qJ9z6ThxXo-6&v z&ulr3zSSw*kTbQvAvJTL7TOAa`;fr|6bF!As3d}aa5#pVm%x0Z)TronH^BLnkFnJV zx%{)&6}f^G@+lceY+k7kg^JNfv-o`6jG2^yhb~$T1}B>N!6`{5b7Y9K$<764j6;qg*snC zNUmPR@sKrkd}-=cxotD*IC&EXtG9vXY9eQKHLq9XuW^QJZQ5Ibev$g+HRqM{B_h-Z zbxXu^&za8HjwvQcy2q~8qX71G%X4`9>Y`$C8)xnc$uDMCLf%OvMHB_nO#3v$M7f>P zM#P)#=18JX&weC1}-DU`A7=PYxlH#(Ow3N{-E0<+C8h~bS3D|9F56kv8amqH$Jgrad!0FguBWYTuyL6)^;N_!?uA_4Yh^^sd#N_>cNKx1AXqQ*#UzU~u>=ca*-j|95a^>mi z3)ZWYH}coxtGDVqxgbWfFU%TkE9#p3!4fK=^>M{ZgDa=wezldRe1?~M6tjU+x6UPJ`XtoovDbm_r9{_@@L$=*sULL{AB(QE0s-;Rt>7jH$gK$=xWrw2_<*v z1!D@aCCt4aEWP6gHf^sBVm!n9^Ks_zN(JklJ+o9jHR$HAc4_n(79;NicL^!{RiC?Y z?8mq_E$O$tFG(hUo?>qX#F;yYyvyAVSZu5oWYvyt*@6V1DX`*>z@{^v)Jd8M#$ zTURvShQ6?Bt27gB06AtE}y2aH1@T&0sM(BqAo$Tkl^{e7dPmt}r6Cc|;y_1BsQ%755ay zuRU#NR^jB$P{R2Uhedgp7hKXNKIYnQrq$8ipXkA!iCqHpIpqJbqs``Oc{AKS!N)Rl zA|$%o6YY6(5D=)z#==BkmiH}@GunbS*@gf#)$$Iz!?0Sy>F8(Cc*C-d+ND9rS#FW! z`3l-k%E$dhuNsWF0T@H~`Re}UVg@y^Z0>jV4rotvVdM&V#TR)JUU)>`cx1(RPBvt* zx6n;$TlllXy7wZIwE>-YMx#BU01n+_hP`z*C|e*;MTqf?I~>z^oms`5Lo$sBKxckd z;8IK0m*MDok|TLu5^&TecCgYoI{HY+HiI6TlitqlP%edc>6aZSVrK5=-7pPE5@=Q5 zA<@VXc{udV)lB14r*o~NMLZ7UX7cD%KpbPM*dnqrl9SVBBBGm2sOaCbjeG=tz^SQR z%-79^YEYULdr5ue45G2y4)E$rtuF4t7>yM>^mq{8qgEz)WAu41&!_7W!SvYrn?ctx zu9JbSIxjHZ3Xb;yGkOh^5#QAcwr^`J6G@+p?~{=-?2RXo0uA{>`r?2NS1t#|2-UW~ z#CKw0=|dEZXA1q51*?pp(Ex_Xz|uv{8PR(YAt5lfg|oRORma-bcTpXm`fq*U{>&FF zJC`vf!+6~5^5s_N=VJ&VhsE9gN=EK?`{@IrtR^&RB6*1?HX(ephSfRZn4@A-kG`qO zg=j94XCdo-r+0!p*Syy2%6kE8 zL@PUn0n9VQ9|S4_J4ggbdUrgyW*3*T#9YOaSs<*>x;V{rrTH7 zeX_T2_;3OgGB}iEKQc~LXzUe_BBEG@bf3#vKAf-K-JFgO-Y;54d8o40FOqJG>WmRQ zQ0!xgY5@F59}Q$+hhh*+B9T&i2b3Rq*!Zpbr?o3maXNCe(oc_ z6yZkkFx@dK0hXWl<1ShG`DAE!@;J-uI9-e|hs0EIx7-K)Bkb1%2NAE_hL3poG!@80 zDz?r+40jgtshCsI)Dt|Ct97yD)ig<;A=ppIT#>ItD2`>4#j_#g0U@e3SQ!q+9UqVyf zh-$Isn97$UEhf|mP3hzuC zycRr_W%XT#+p06?A`r>?>B58I3DMT`VjI}(ZV%%x$)n|5v}fYncQtxJ#Z`Hu{dlWs zj+8HD+~Z<9lh|t@r64*L{-}n(zH5g8)1@+J%6xn8vM`F`xSNY_EAOu_2bnyI z{XLKcu&GQNSjPRXQnWLbS8IW?Qe4x>(1{&!kZ8v}G`B?ZNJ0yER;)!z6c!*(TlT5H zhbQ4z9%(M2Y;ni(skG%S_uEi_Z8+Db1wz{f{hL<-i=j2G(z!drW788*6-qxy_zwf!c*8E#FF0sui`x(1|A$gwYeLQwWPwQHnm=~JWcz)Aa}8iu|TN0o*rZ;RJbyi%1K>p z&z-eV)XxiC{!`4r#O?Q_@v@a=>Fuf$=wlWHVly-qAx9c4rXZO_h1CG& z!BEW)jCj6$bge)Y#Vft-`fo2*70cIo`bqI^$XSAL7y(sYRV5Sfw$bhsgi7|HlosA+K9{o(+(M#Uv5yVA#Nb9 z%BVMC`?OL6dwLPx&ANHF0-1(g+pGJ%z+y;%uU$oD*77W30O$j2;ckY@sR#ceq8+DTA>Gb44qQ)-(-BU{U5|};$%=H4=gLqbmig^TTA)(f6I zl_68OjXLgiEzHt0bd&@y;UR}=JAn6ddg&~3>7Au=u)}tyIPt#BYxVRUk5=P{+_Z0zos7>sSS_)U|!SDWS~nPP*Exv=cY$Wb`HGrMd0k_~jp?P;R;YysU55jepSTM4xCszQX^`nS_x3!n-KsJsDa;QMOl#4^xKuu4RWk&6%HsFYU5;y z8Qi2{b|8#7#BF$%Dtoja?=cAvpWL!>(|;_z>m1seW?VJ?{n_j_fJOdAUY^{ESzGNV zU#ltN)SUL7CwG02N4NLYe7}A<^e-*_;HJ#|w}Sxd`u4dNWtq#Ezh*jzk5QdX^SlaL8+fPHmYFrow7*ftB-M=ioQ<$z zy8F;N4^gzju3k=JiyRM{g$zkIRegoMP08q#J6&~2#)f#e;JqiUp_)hP8l`2;yHvV<4lE~f}$Di>H(d(9i@)*QN@x=H<@M;JK*?jlb>v?jYZiiKsl!sFfEtM2<#(hxvA9HxH-x z>Pxn$W94`7<`h57t!DkEvWnf%?Y>Q_(ZN%=J zoZO6%e;X6yyzwU4#s?Nj)_AZI96ieBJ_3}s)N@*Nc{cpc2fFn(EKJ0yWDOU9afvjjNo;)gdk3UFznt2bewZg)JrBNzHvTBQ z1$2H#>&5e-+6(+gc}ux6zvIMK+9ddG*5!mVQ2gb2{6+gq&sJJE?OfpZ=c)(i3#A6c z4A-$<7pA_8L#vhJ&KkeZ4R~&K&h(`N@`Ybiz01kVW&b7X1GDuC_i{GbIRILFeMfWJ z-%8jkWul}7n>6edRB3C>9gS0sqzd$?{t64EaNAXnSmh9WOj2g!s*|&j+O5aQqGt)d z3B?+()8!MN6riQ{&i~;9Qj)g+@d*pfo{tcc@xz*1d);dWm4`lC%l|&Orq^C!6mxi8 z&TG~jHMlYOZl~o;VzefvlumdcF@&qhmJD(9L#y*`yo?Sx^`%|1LzL{~JJy^OxTAV# zMbbW5MWrhA+3(gKTavV6RNu$vUi`_!rNk3UVnYL9Q3A`)j~<^s!xhHEyYcpYfqe}C zsP&3YLbtQe&H|InA&B zC1>x;bRmLh>L$T|!||^$IkHAmfQhlGKs%n1Rh7(Q?xz=)CuPPQs@zoilP14r)zN4Y zn*8#Vy*8Mm+k;7hOk!AHBKu6Wyvz?h_|HOs$GCJUZ?5HTf9PAzhNuV_E7N6vDZJ(} z@H5eXp)oeR1^eSxbB)(zqU=+u6r`UG`q=%;WwcZCy5DQ(1sV($&Pxt77Q86}{yV6> zEUe;FHQ#3TygWqUpc4{-25eoCJ;6 Date: Fri, 16 Jan 2015 01:25:26 +0800 Subject: [PATCH 037/179] DOC: Move config reference into reference section. --- docs/config.rst | 17 ----------------- docs/pkg_config.rst | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 17 deletions(-) create mode 100644 docs/pkg_config.rst diff --git a/docs/config.rst b/docs/config.rst index 3177556..be07eb9 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -2,22 +2,5 @@ StoneMason Config ================= -The StoneMason Config is used to control how providers and renderers work. -Currently, Only Json Config is available. -Config ------- - -.. automodule:: stonemason.mason.config - :members: - -.. autoclass:: stonemason.mason.config.Config - :members: - - -Theme ------ - -.. automodule:: stonemason.mason.theme - :members: diff --git a/docs/pkg_config.rst b/docs/pkg_config.rst new file mode 100644 index 0000000..5c361a6 --- /dev/null +++ b/docs/pkg_config.rst @@ -0,0 +1,17 @@ +Config +====== + +Config Reader and Parser. + + +Config +------ + +.. automodule:: stonemason.mason.config + :members: + +.. autoclass:: stonemason.mason.config.Config + :members: + + + From 49c10b608cf0c6882e474f3bac34c940748149a2 Mon Sep 17 00:00:00 2001 From: ray Date: Fri, 16 Jan 2015 01:28:17 +0800 Subject: [PATCH 038/179] DOC: Add Config to the document index. --- docs/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.rst b/docs/index.rst index 17a3bae..e1d60fa 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -24,6 +24,7 @@ References .. toctree:: :maxdepth: 2 + pkg_config pkg_pyramid pkg_tilecache pkg_util From f2dfc1752ac6a23db0fd92820725db1bfa681f4a Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Fri, 16 Jan 2015 23:13:53 +0800 Subject: [PATCH 039/179] TEST: Added MemTileCache test. --- stonemason/provider/tilecache/memcache_.py | 40 +++++++++++--- stonemason/provider/tilecache/tilecache.py | 7 ++- .../provider/tilecache/test_memcache.py | 55 ++++++++++++++++++- 3 files changed, 89 insertions(+), 13 deletions(-) diff --git a/stonemason/provider/tilecache/memcache_.py b/stonemason/provider/tilecache/memcache_.py index 5e84477..005369a 100644 --- a/stonemason/provider/tilecache/memcache_.py +++ b/stonemason/provider/tilecache/memcache_.py @@ -18,6 +18,10 @@ from stonemason.provider.pyramid import Tile, TileIndex +class MemTileCacheError(TileCacheError): + pass + + class MemTileCache(TileCache): """A tile cache based on `memcached` protocol backend. @@ -48,11 +52,13 @@ class MemTileCache(TileCache): .. seealso:: `pylibmc` `behaviours `_. :param servers: A sequence of strings specifying the servers to use. - :param binary: Whether to use `memcached` binary protocol, default is ``False``. + :param binary: Whether to use `memcached` binary protocol, default is ``True``. :param behaviors: `pylibmc` behaviors. """ - def __init__(self, servers=('localhost:11211', ), binary=False, + def __init__(self, servers=('localhost:11211', ), + binary=True, + min_compress_len=0, behaviors=None): super(TileCache, self).__init__() if behaviors is None: @@ -61,7 +67,10 @@ def __init__(self, servers=('localhost:11211', ), binary=False, self.connection = pylibmc.Client(servers, binary=binary, behaviors=behaviors) # Verify connection - self.connection.get_stats() + try: + self.connection.get_stats() + except pylibmc.Error: + raise MemTileCacheError("Can't connect to memcache servers.") def _make_key(self, tag, index): @@ -116,7 +125,7 @@ def get(self, tag, index): try: mimetype, mtime, etag = self._load_metadata(metadata) except ValueError: - raise TileCacheError('Invalid metadata: "%s"' % metadata_key) + raise MemTileCacheError('Invalid metadata: "%s"' % metadata_key) return Tile(index, data, mimetype, mtime, etag) @@ -128,12 +137,12 @@ def put(self, tag, tile, ttl=0): failed = self.connection.set_multi(data, time=ttl) if len(failed) > 0: - raise TileCacheError('Tile not successfully writen: "%s"' % failed) + raise MemTileCacheError('Tile not writen: "%s"' % failed) def has(self, tag, index): - key, _, _ = self._make_key(tag, index) + _, metadata_key, _ = self._make_key(tag, index) + return self.connection.get(metadata_key) is not None - return self.connection.touch(key) def retire(self, tag, index): key, metadata_key, _ = self._make_key(tag, index) @@ -142,17 +151,30 @@ def retire(self, tag, index): def put_multi(self, tag, tiles, ttl=0): data = {} - for tile in tiles: + for n, tile in enumerate(tiles): key, metadata_key, _ = self._make_key(tag, tile.index) data[key] = tile.data data[metadata_key] = self._make_metadata(tile) + else: + assert len(data) == (n + 1) * 2 failed = self.connection.set_multi(data, time=ttl) if len(failed) > 0: - raise TileCacheError('Tile not successfully writen: "%s"' % failed) + raise MemTileCacheError( + 'Tile not writen: "%s"' % failed) + + def lock(self, tag, index, ttl=0.1): + # XXX: memcache only supports integer ttl... + raise NotImplementedError + + def unlock(self, tag, index, cas): + raise NotImplementedError def close(self): self.connection.disconnect_all() def flush(self): self.connection.flush_all() + + def stats(self): + return dict(self.connection.get_stats()) diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py index 0714a4f..20e2b85 100644 --- a/stonemason/provider/tilecache/tilecache.py +++ b/stonemason/provider/tilecache/tilecache.py @@ -139,6 +139,7 @@ def has_all(self, tag, indexes): def lock(self, tag, index, ttl=0.1): """Mark a particular tile as locked for a specified amount of time. + Implement pessimistic locking. Mark a tile with given tag and index as locked until ttl expires. Return a CAS integer which can be used to unlock the tile. If the tile is already locked, returns 0. @@ -175,5 +176,9 @@ def flush(self): pass def close(self): - """Release any underlying resources.""" + """Release any underlying resources. + + .. Warning:: + This will clear everything, include data not stored by TileCache. + """ pass \ No newline at end of file diff --git a/tests/stonemason/provider/tilecache/test_memcache.py b/tests/stonemason/provider/tilecache/test_memcache.py index 17ea2c1..3c8ded6 100644 --- a/tests/stonemason/provider/tilecache/test_memcache.py +++ b/tests/stonemason/provider/tilecache/test_memcache.py @@ -12,7 +12,16 @@ class TestMemTileCache(unittest.TestCase): def setUp(self): - self.cache = MemTileCache() + self.cache = MemTileCache(binary=False) + self.cache.connection.set('layer/2/3/4', + b'tile') + self.cache.connection.set('layer/2/3/4~metadata', + '["text/plain", 1234.56, "abcd"]') + + self.cache.connection.set('layer/3/4/5', + b'a tile') + self.cache.connection.set('layer/3/4/5~metadata', + '["text/plain", 1234.56, "ABCD"]') def tearDown(self): self.cache.close() @@ -20,9 +29,49 @@ def tearDown(self): def test_put(self): index = TileIndex(2, 3, 4) timestamp = time.time() - tile = Tile(index, b'a tile', 'text/plain', timestamp) - self.cache.put('layer', tile) + tile = Tile(index, b'another tile', 'text/plain', timestamp) + self.cache.put('another-layer', tile) + self.assertTrue(self.cache.has('another-layer', TileIndex(2, 3, 4))) + + def test_get(self): + tile = self.cache.get('layer', TileIndex(3, 4, 5)) + self.assertEqual(tile.index, (3, 4, 5)) + self.assertEqual(tile.mimetype, 'text/plain') + self.assertEqual(tile.mtime, 1234.56) + self.assertEqual(tile.etag, 'ABCD') + + def test_has(self): + self.assertTrue(self.cache.has('layer', TileIndex(3, 4, 5))) + self.assertFalse(self.cache.has('layer', TileIndex(3, 4, 6))) + self.assertFalse(self.cache.has('layer1', TileIndex(3, 4, 5))) + + def test_retire(self): + self.assertTrue(self.cache.has('layer', TileIndex(2, 3, 4))) + self.cache.retire('layer', TileIndex(2, 3, 4)) + self.assertFalse(self.cache.has('layer', TileIndex(2, 3, 4))) + + def test_put_multi(self): + tiles = [Tile(TileIndex(2, 3, 4), b'tile1', 'text/plain', 1.2), + Tile(TileIndex(3, 4, 5), b'tile2', 'text/plain', 1.2), + Tile(TileIndex(5, 6, 7), b'tile3', 'text/plain', 1.2), ] + self.cache.put_multi('layer2', tiles) + + self.cache.has_all('layer2', [TileIndex(2, 3, 4), + TileIndex(3, 4, 5), + TileIndex(5, 6, 7)]) + + def test_put_ttl(self): + index = TileIndex(2, 3, 4) + timestamp = time.time() + tile = Tile(index, b'another tile', 'text/plain', timestamp) + self.cache.put('ttl-test-layer', tile, 1) + self.assertTrue(self.cache.has('ttl-test-layer', TileIndex(2, 3, 4))) + time.sleep(1) + self.assertFalse(self.cache.has('ttl-test-layer', TileIndex(2, 3, 4))) + + def test_stats(self): + self.assertTrue(self.cache.stats()) if __name__ == '__main__': From 5b6d25ac0948d3111df1032865533bd528e271df Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 17 Jan 2015 00:48:57 +0800 Subject: [PATCH 040/179] DOC: Remove dependencies from README.md --- README.md | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 6c6abc3..655ff17 100644 --- a/README.md +++ b/README.md @@ -14,23 +14,6 @@ Similar solutions: - Render pipeline - Mass tile storage - Debug and design server -- [mapnik](http://mapnik.org) as raster render engine -- Homebrew high quality DEM terrain relief renderer -- Supports both zero configuration and distributed deployment - - -## Dependencies - -- Python2>=2.7 -- Python3>=3.3 (Geospatial related modules only supports py27) -- flask>=0.10 -- pillow>=2.3 -- Cython>=0.19.0 -- numpy>=1.9, scipy>=0.10.0 (Optional) -- mapnik>=2.2 (Optional) -- geos>=3.3, gdal>=1.10 (Optional) -- imagemagick>=6.0 (Optional) -- PostgreSQL>=9.1, PostGIS>=2.1 (Optional) -- redis>=2.8 (Optional) -- pyblibmc - +- Mapnik as raster render engine +- High quality DEM terrain relief renderer +- Supports both zero configuration and distributed deployment \ No newline at end of file From 35a11aac424e06e57f36f6fe57344892c9f3f790 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 17 Jan 2015 01:12:56 +0800 Subject: [PATCH 041/179] CHORE: Add travis ci config --- .travis.yml | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..701fe52 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,69 @@ +#Travis-ci config file + +language: python +python: + - "2.7" + +# Use system package so we can access geos/gdal/mapnik bindings +virtualenv: + system_site_packages: true + +before_install: + # Add ubuntugis and mapnik stable PPA + - sudo apt-get install -qq python-software-properties + - sudo add-apt-repository -y ppa:ubuntugis/ppa + - sudo add-apt-repository -y ppa:mapnik/v2.2.0 + - sudo apt-get update -qq + + # Install pillow binary requests + - sudo apt-get install -qq libjpeg-dev libz-dev libtiff-dev libfreetype6-dev liblcms-dev libwebp-dev libopenjpeg-dev + + # Install numpy/scipy (12.04 comes with very old scipy, but build from source + # takes too much time, hopefully we don't need new version during development) +# - sudo apt-get install -qq gcc g++ gfortran libblas-dev liblapack-dev +# - sudo pip install -q numpy +# - sudo pip install -q scipy + - sudo apt-get install -qq python-numpy python-scipy + + # Install Mapnik + - sudo apt-get install -qq libgeos-dev libgdal-dev gdal-bin python-gdal + - sudo apt-get install -qq python-mapnik + + # Check installed packages + - geos-config --version + - ogrinfo --version + - ogrinfo --formats + - mapnik-config --version + +install: + - pip install -r requirements-dev.txt + - pip install . + +services: + - memcached +# - redis-server + +#addons: +# postgresql: "9.3" + +branches: + only: + - master + +before_script: +# - psql -U postgres -c 'create database travis_ci_test;' +# - psql -U postgres -d travis_ci_test -c "create extension postgis;" + +script: + - nosetests + - cd docs + - make doctest + - make html + +notifications: + email: + recipients: + - gliese.q@gmail.com + - kotaimen.c@gmail.com + + From 88b477de34735bebf69713e2802fe72b7c148c5f Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 17 Jan 2015 01:17:44 +0800 Subject: [PATCH 042/179] CHORE: Added branches whitelist to travis config --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 701fe52..f61e64b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,10 +46,13 @@ services: #addons: # postgresql: "9.3" +# whitelist branches: only: - master - + - develop + - feature/travis + before_script: # - psql -U postgres -c 'create database travis_ci_test;' # - psql -U postgres -d travis_ci_test -c "create extension postgis;" From bc56b3c54ccfba3008368559dc9362360e07b7d8 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 17 Jan 2015 01:26:59 +0800 Subject: [PATCH 043/179] CHORE: Build Cython extension in place before testing --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f61e64b..7b8b7be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,8 +36,9 @@ before_install: - mapnik-config --version install: - - pip install -r requirements-dev.txt - - pip install . + - pip install -q -r requirements-dev.txt + - pip install -q . + - python setup.py build_ext --inplace services: - memcached From 802448b1083cb545e60ec5c9b983b381631ae4c7 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 17 Jan 2015 01:46:09 +0800 Subject: [PATCH 044/179] CHORE: Add travis image to README.md --- .travis.yml | 1 - README.md | 17 ++++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7b8b7be..30e862a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,7 +52,6 @@ branches: only: - master - develop - - feature/travis before_script: # - psql -U postgres -c 'create database travis_ci_test;' diff --git a/README.md b/README.md index 655ff17..4ebb2a8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,11 @@ # Stonemason +[![Build Status](https://travis-ci.org/Kotaimen/stonemason.svg?branch=develop)](https://travis-ci.org/Kotaimen/stonemason) + **Stonemason** is a complete rewrite of the unpopular [mason](https://github.com/Kotaimen/mason) tile map toolkit. Similar solutions: + - [TileScache](http://tilestache.org) - [TileCache](http://tilecache.org) - [Windshaft](https://github.com/CartoDB/Windshaft) @@ -10,10 +13,10 @@ Similar solutions: ## Features (planned) -- Tile map service -- Render pipeline -- Mass tile storage -- Debug and design server -- Mapnik as raster render engine -- High quality DEM terrain relief renderer -- Supports both zero configuration and distributed deployment \ No newline at end of file +- Tile map service. +- Render pipeline. +- Mass tile storage. +- Debug and design server. +- Mapnik as raster render engine. +- High quality DEM terrain relief renderer. +- Supports both zero configuration and distributed deployment. \ No newline at end of file From 2c5d8ba1c4386579007111103e71089dff23c8a4 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sun, 18 Jan 2015 01:33:04 +0800 Subject: [PATCH 045/179] FEATURE: Added the naive lock implement to MemTileCache. --- stonemason/provider/tilecache/memcache_.py | 67 +++++++++++++++++-- stonemason/provider/tilecache/tilecache.py | 2 +- .../provider/tilecache/test_memcache.py | 15 ++++- 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/stonemason/provider/tilecache/memcache_.py b/stonemason/provider/tilecache/memcache_.py index 005369a..585f34a 100644 --- a/stonemason/provider/tilecache/memcache_.py +++ b/stonemason/provider/tilecache/memcache_.py @@ -13,6 +13,7 @@ import re import json import pylibmc +import random from .tilecache import TileCache, TileCacheError from stonemason.provider.pyramid import Tile, TileIndex @@ -47,10 +48,32 @@ class MemTileCache(TileCache): `behaviors` - Set `pylibmc` client behaviours, default is ``{'tcp_nodelay': True, 'ketama': True}``. + Set `pylibmc` client behavior, default value is: + + .. code-block:: python + + { + 'tcp_nodelay': True, + 'ketama': True, + 'cas': True, + } .. seealso:: `pylibmc` `behaviours `_. + Sample: + + >>> from stonemason.provider.pyramid import Tile,TileIndex + >>> from stonemason.provider.tilecache import MemTileCache + >>> cache = MemTileCache(servers=['localhost:11211',]) + >>> cache.put('layer', Tile(TileIndex(2, 3, 4), b'tile')) + >>> cache.has('layer', TileIndex(2, 3, 4)) + True + >>> cache.get('layer', TileIndex(2, 3, 4)) + Tile(2/3/4) + >>> cache.retire('layer', TileIndex(2, 3, 4)) + >>> cache.has('layer', TileIndex(2, 3, 4)) + False + :param servers: A sequence of strings specifying the servers to use. :param binary: Whether to use `memcached` binary protocol, default is ``True``. :param behaviors: `pylibmc` behaviors. @@ -63,7 +86,8 @@ def __init__(self, servers=('localhost:11211', ), super(TileCache, self).__init__() if behaviors is None: behaviors = {'tcp_nodelay': True, - 'ketama': True} + 'ketama': True, + 'cas': True} self.connection = pylibmc.Client(servers, binary=binary, behaviors=behaviors) # Verify connection @@ -150,6 +174,7 @@ def retire(self, tag, index): self.connection.delete_multi([key, metadata_key]) def put_multi(self, tag, tiles, ttl=0): + assert tiles data = {} for n, tile in enumerate(tiles): key, metadata_key, _ = self._make_key(tag, tile.index) @@ -160,15 +185,43 @@ def put_multi(self, tag, tiles, ttl=0): failed = self.connection.set_multi(data, time=ttl) if len(failed) > 0: - raise MemTileCacheError( - 'Tile not writen: "%s"' % failed) + raise MemTileCacheError('Tile not writen: "%s"' % failed) def lock(self, tag, index, ttl=0.1): - # XXX: memcache only supports integer ttl... - raise NotImplementedError + # memcache only supports integer ttl... + ttl = int(round(ttl, 0)) + # never allow ttl=0 since it means lock forever + if ttl <= 0: + ttl = 1 + + _, _, lock_key = self._make_key(tag, index) + + # check lock + + if self.connection.get(lock_key) is not None: + # already locked + return 0 + else: + # XXX: potential random collision + cas = random.getrandbits(31) + self.connection.set(lock_key, cas, time=ttl) + return cas def unlock(self, tag, index, cas): - raise NotImplementedError + _, _, lock_key = self._make_key(tag, index) + + value = self.connection.get(lock_key) + if value is None: + # already unlocked + return True + if value != cas: + # cas mismatch + return False + else: + # XXX: need "compare and delete" lock flag, potential inconsistency + # delete the lock flag + self.connection.delete(lock_key) + return True def close(self): self.connection.disconnect_all() diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py index 20e2b85..c099154 100644 --- a/stonemason/provider/tilecache/tilecache.py +++ b/stonemason/provider/tilecache/tilecache.py @@ -166,7 +166,7 @@ def unlock(self, tag, index, cas): :type index: :class:`~stonemason.provider.pyramid.TileIndex` :param cas: CAS value of the tile. :type cas: int - :return: `True` if unlock is successful, `False` otherwise. + :return: `True` if unlock is successful or no lock is present, `False` otherwise. :rtype: bool """ return True diff --git a/tests/stonemason/provider/tilecache/test_memcache.py b/tests/stonemason/provider/tilecache/test_memcache.py index 3c8ded6..2075785 100644 --- a/tests/stonemason/provider/tilecache/test_memcache.py +++ b/tests/stonemason/provider/tilecache/test_memcache.py @@ -13,6 +13,9 @@ class TestMemTileCache(unittest.TestCase): def setUp(self): self.cache = MemTileCache(binary=False) + + self.cache.flush() + self.cache.connection.set('layer/2/3/4', b'tile') self.cache.connection.set('layer/2/3/4~metadata', @@ -23,6 +26,7 @@ def setUp(self): self.cache.connection.set('layer/3/4/5~metadata', '["text/plain", 1234.56, "ABCD"]') + def tearDown(self): self.cache.close() @@ -66,9 +70,18 @@ def test_put_ttl(self): tile = Tile(index, b'another tile', 'text/plain', timestamp) self.cache.put('ttl-test-layer', tile, 1) self.assertTrue(self.cache.has('ttl-test-layer', TileIndex(2, 3, 4))) - time.sleep(1) + time.sleep(1.1) self.assertFalse(self.cache.has('ttl-test-layer', TileIndex(2, 3, 4))) + def test_lock(self): + index = TileIndex(2, 3, 4) + cas = self.cache.lock('lock-test-layer', index, 0.1) + self.assertNotEqual(cas, 0) + self.assertEqual(self.cache.lock('lock-test-layer', index, 1), 0) + self.assertFalse(self.cache.unlock('lock-test-layer', index, 1234)) + self.assertTrue(self.cache.unlock('lock-test-layer', index, cas)) + self.assertTrue(self.cache.unlock('lock-test-layer', index, cas)) + def test_stats(self): self.assertTrue(self.cache.stats()) From a0411fa6122b8ebdee7c2b045149efb1b37b8109 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sun, 18 Jan 2015 11:22:42 +0800 Subject: [PATCH 046/179] DOC: Updated install.rst --- docs/install.rst | 62 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/docs/install.rst b/docs/install.rst index c7dbcce..953cc9a 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -2,24 +2,21 @@ Installation ============ -Development Environment (ubuntu-14.04-LTS) ------------------------------------------- +Development Environment +----------------------- -Install system package dependency: -.. code-block:: console +ubuntu-14.04-LTS +~~~~~~~~~~~~~~~~ - sudo apt-get install git - sudo apt-get install python python-dev python-pip - sudo apt-get install python3 python3-dev python3-pip - sudo apt-get install libjpeg-dev libz-dev libtiff-dev libfreetype6-dev libwebp-dev liblcms-dev liblcms2-dev libmemcached-dev +Install binary package dependency: - -Clone the code: - .. code-block:: console - git clone https://github.com/Kotaimen/stonemason.git + sudo apt-get install python python-dev python-pip + sudo apt-get install python3 python3-dev python3-pip + sudo apt-get install libjpeg-dev libz-dev libtiff-dev libfreetype6-dev libwebp-dev liblcms2-dev + sudo apt-get install memcached libmemcached-dev Install python dependency: @@ -32,10 +29,43 @@ Install python dependency: sudo pip3 install -rrequirements.txt -Run nose: +Homebrew +~~~~~~~~ + + +Install binary package dependency: .. code-block:: console - + + brew install python python3 + brew install libjpeg libz libtiff freetype libwebp lcms2 + brew install memcached libmemcached + + +Install python dependency: + +.. code-block:: console + + pip install -rrequirements-dev.txt + pip install -rrequirements.txt + pip3 install -rrequirements-dev.txt + pip3 install -rrequirements.txt + + +Test +---- + +Clone the code: + +.. code-block:: console + + git clone https://github.com/Kotaimen/stonemason.git + +Run nosetests: + +.. code-block:: console + + cd stonemason python setup.py build_ext --inplace nosetests @@ -44,6 +74,4 @@ Run tox: .. code-block:: console tox - - - \ No newline at end of file + From 2c72cd4f4b91c5d60183dadae3338ef041096b1d Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sun, 18 Jan 2015 23:06:53 +0800 Subject: [PATCH 047/179] TEST: Fix invalid tile coordinate in unittest and doctest --- stonemason/provider/pyramid/tile.py | 33 +++++++++++-------- stonemason/provider/tilecache/memcache_.py | 12 +++---- .../stonemason/provider/pyramid/test_tile.py | 14 ++++---- .../provider/tilecache/test_memcache.py | 26 +++++++-------- 4 files changed, 46 insertions(+), 39 deletions(-) diff --git a/stonemason/provider/pyramid/tile.py b/stonemason/provider/pyramid/tile.py index ceff37e..5929185 100644 --- a/stonemason/provider/pyramid/tile.py +++ b/stonemason/provider/pyramid/tile.py @@ -6,7 +6,7 @@ """ stonemason.provider.pyramid.tile ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Tile and its index. + Square area in a map. """ @@ -23,7 +23,7 @@ class TileIndex(_TileIndex): - """ Coordinate of a map Tile. + """Coordinate of a map Tile. Coordinate (aka: index) of a map :class:`~stonemason.provider.pyramid.Tile` using GoogleMaps style tile map system. @@ -32,13 +32,15 @@ class TileIndex(_TileIndex): >>> from stonemason.provider.pyramid import TileIndex - >>> index = TileIndex(2, 3, 4) + >>> index = TileIndex(3, 4, 5) + >>> index + TileIndex(3/4/5) >>> index.z - 2 - >>> index.x 3 - >>> index.y + >>> index.x 4 + >>> index.y + 5 :param z: Zoom level. :type z: int @@ -49,8 +51,9 @@ class TileIndex(_TileIndex): """ def __new__(cls, z=0, x=0, y=0): - assert 0 <= x <= 2 ** z - assert 0 <= y <= 2 ** z + assert z >= 0 + assert 0 <= x < 2 ** z + assert 0 <= y < 2 ** z return _TileIndex.__new__(cls, z, x, y) @property @@ -68,9 +71,9 @@ def __repr__(self): class Tile(_Tile): - """ A piece of square area in a map. + """A piece of square area in a map. - A `Tile` is a piece of square area in a rendered digital map, sliced + A `tile` is a piece of square area in a rendered digital map, sliced using quad-tree grid system, called :class:`~stonemason.provider.pyramid.Pyramid`. Tile is uniquely referenced by its :class:`~stonemason.provider.pyramid.TileIndex`. @@ -79,7 +82,7 @@ class Tile(_Tile): `index` - Tile index. + :class:`~stonemason.provider.pyramid.TileIndex`. `data` @@ -107,12 +110,12 @@ class Tile(_Tile): Sample: >>> from stonemason.provider.pyramid import Tile, TileIndex - >>> tile = Tile(index=TileIndex(2, 3, 4), + >>> tile = Tile(index=TileIndex(3, 4, 5), ... data=b'a tile', ... mimetype='text/plain', ... mtime=1234.) >>> tile - Tile(2/3/4) + Tile(3/4/5) >>> tile.data 'a tile' >>> tile.mimetype @@ -138,12 +141,16 @@ def __new__(cls, index=None, data=None, etag=None): if index is None: index = TileIndex() + if data is None: data = bytes() + if mimetype is None: mimetype = 'application/data' + if mtime is None: mtime = time.time() + if etag is None: etag = hashlib.md5(data).hexdigest() diff --git a/stonemason/provider/tilecache/memcache_.py b/stonemason/provider/tilecache/memcache_.py index 585f34a..2af43d0 100644 --- a/stonemason/provider/tilecache/memcache_.py +++ b/stonemason/provider/tilecache/memcache_.py @@ -65,13 +65,13 @@ class MemTileCache(TileCache): >>> from stonemason.provider.pyramid import Tile,TileIndex >>> from stonemason.provider.tilecache import MemTileCache >>> cache = MemTileCache(servers=['localhost:11211',]) - >>> cache.put('layer', Tile(TileIndex(2, 3, 4), b'tile')) - >>> cache.has('layer', TileIndex(2, 3, 4)) + >>> cache.put('layer', Tile(TileIndex(3, 4, 5), b'tile')) + >>> cache.has('layer', TileIndex(3, 4, 5)) True - >>> cache.get('layer', TileIndex(2, 3, 4)) - Tile(2/3/4) - >>> cache.retire('layer', TileIndex(2, 3, 4)) - >>> cache.has('layer', TileIndex(2, 3, 4)) + >>> cache.get('layer', TileIndex(3, 4, 5)) + Tile(3/4/5) + >>> cache.retire('layer', TileIndex(3, 4, 5)) + >>> cache.has('layer', TileIndex(3, 4, 5)) False :param servers: A sequence of strings specifying the servers to use. diff --git a/tests/stonemason/provider/pyramid/test_tile.py b/tests/stonemason/provider/pyramid/test_tile.py index 7361fb0..d641bc3 100644 --- a/tests/stonemason/provider/pyramid/test_tile.py +++ b/tests/stonemason/provider/pyramid/test_tile.py @@ -15,14 +15,14 @@ def test_init(self): self.assertEqual(index1.x, 0) self.assertEqual(index1.y, 0) self.assertEqual(index1.z, 0) - index2 = TileIndex(2, 3, 4) - self.assertEqual(index2.x, 3) - self.assertEqual(index2.y, 4) + index2 = TileIndex(2, 2, 3) + self.assertEqual(index2.x, 2) + self.assertEqual(index2.y, 3) self.assertEqual(index2.z, 2) def test_repr(self): - index = TileIndex(2, 3, 4) - self.assertEqual(str(index), 'TileIndex(2/3/4)') + index = TileIndex(2, 2, 3) + self.assertEqual(str(index), 'TileIndex(2/2/3)') def test_serial(self): index = TileIndex(3, 4, 5) @@ -51,11 +51,11 @@ def test_init1(self): self.assertEqual(tile.etag, hashlib.md5(b'').hexdigest()) def test_init2(self): - tile = Tile(index=TileIndex(2, 3, 4), + tile = Tile(index=TileIndex(2, 2, 3), data=b'a tile', mimetype='text/plain', mtime=1234.) - self.assertEqual(tile.index, (2, 3, 4)) + self.assertEqual(tile.index, (2, 2, 3)) self.assertEqual(tile.data, b'a tile') self.assertEqual(tile.mimetype, 'text/plain') self.assertGreater(tile.mtime, 0.) diff --git a/tests/stonemason/provider/tilecache/test_memcache.py b/tests/stonemason/provider/tilecache/test_memcache.py index 2075785..8c955a1 100644 --- a/tests/stonemason/provider/tilecache/test_memcache.py +++ b/tests/stonemason/provider/tilecache/test_memcache.py @@ -16,9 +16,9 @@ def setUp(self): self.cache.flush() - self.cache.connection.set('layer/2/3/4', + self.cache.connection.set('layer/2/2/3', b'tile') - self.cache.connection.set('layer/2/3/4~metadata', + self.cache.connection.set('layer/2/2/3~metadata', '["text/plain", 1234.56, "abcd"]') self.cache.connection.set('layer/3/4/5', @@ -31,11 +31,11 @@ def tearDown(self): self.cache.close() def test_put(self): - index = TileIndex(2, 3, 4) + index = TileIndex(3, 4, 5) timestamp = time.time() tile = Tile(index, b'another tile', 'text/plain', timestamp) self.cache.put('another-layer', tile) - self.assertTrue(self.cache.has('another-layer', TileIndex(2, 3, 4))) + self.assertTrue(self.cache.has('another-layer', TileIndex(3, 4, 5))) def test_get(self): tile = self.cache.get('layer', TileIndex(3, 4, 5)) @@ -50,31 +50,31 @@ def test_has(self): self.assertFalse(self.cache.has('layer1', TileIndex(3, 4, 5))) def test_retire(self): - self.assertTrue(self.cache.has('layer', TileIndex(2, 3, 4))) - self.cache.retire('layer', TileIndex(2, 3, 4)) - self.assertFalse(self.cache.has('layer', TileIndex(2, 3, 4))) + self.assertTrue(self.cache.has('layer', TileIndex(2, 2, 3))) + self.cache.retire('layer', TileIndex(2, 2, 3)) + self.assertFalse(self.cache.has('layer', TileIndex(2, 2, 3))) def test_put_multi(self): - tiles = [Tile(TileIndex(2, 3, 4), b'tile1', 'text/plain', 1.2), + tiles = [Tile(TileIndex(2, 2, 3), b'tile1', 'text/plain', 1.2), Tile(TileIndex(3, 4, 5), b'tile2', 'text/plain', 1.2), Tile(TileIndex(5, 6, 7), b'tile3', 'text/plain', 1.2), ] self.cache.put_multi('layer2', tiles) - self.cache.has_all('layer2', [TileIndex(2, 3, 4), + self.cache.has_all('layer2', [TileIndex(2, 2, 3), TileIndex(3, 4, 5), TileIndex(5, 6, 7)]) def test_put_ttl(self): - index = TileIndex(2, 3, 4) + index = TileIndex(2, 2, 3) timestamp = time.time() tile = Tile(index, b'another tile', 'text/plain', timestamp) self.cache.put('ttl-test-layer', tile, 1) - self.assertTrue(self.cache.has('ttl-test-layer', TileIndex(2, 3, 4))) + self.assertTrue(self.cache.has('ttl-test-layer', TileIndex(2, 2, 3))) time.sleep(1.1) - self.assertFalse(self.cache.has('ttl-test-layer', TileIndex(2, 3, 4))) + self.assertFalse(self.cache.has('ttl-test-layer', TileIndex(2, 2, 3))) def test_lock(self): - index = TileIndex(2, 3, 4) + index = TileIndex(2, 2, 3) cas = self.cache.lock('lock-test-layer', index, 0.1) self.assertNotEqual(cas, 0) self.assertEqual(self.cache.lock('lock-test-layer', index, 1), 0) From 229e20d2337411d4774c29ff8bcf4e74afe874fd Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sun, 18 Jan 2015 23:07:55 +0800 Subject: [PATCH 048/179] FEATURE: Add MetaTile implement and tests. --- docs/pkg_pyramid.rst | 10 +- docs/pkg_tilecache.rst | 4 + stonemason/provider/pyramid/__init__.py | 3 +- stonemason/provider/pyramid/metatile.py | 177 ++++++++++++++++++ stonemason/provider/pyramid/pyramid.py | 26 +++ .../provider/pyramid/test_metatile.py | 91 +++++++++ 6 files changed, 309 insertions(+), 2 deletions(-) create mode 100644 stonemason/provider/pyramid/metatile.py create mode 100644 stonemason/provider/pyramid/pyramid.py create mode 100644 tests/stonemason/provider/pyramid/test_metatile.py diff --git a/docs/pkg_pyramid.rst b/docs/pkg_pyramid.rst index ee44fc6..d037a4f 100644 --- a/docs/pkg_pyramid.rst +++ b/docs/pkg_pyramid.rst @@ -1,7 +1,7 @@ Pyramid ======= -Tile related data types and algorithms. +Tile system package. Tile @@ -14,6 +14,14 @@ Tile :members: +MetaTile +-------- + +.. autoclass:: stonemason.provider.pyramid.MetaTileIndex + :members: + +.. autoclass:: stonemason.provider.pyramid.MetaTile + :members: Serial ------ diff --git a/docs/pkg_tilecache.rst b/docs/pkg_tilecache.rst index 55b6e09..e4dce5a 100644 --- a/docs/pkg_tilecache.rst +++ b/docs/pkg_tilecache.rst @@ -2,6 +2,10 @@ Tile Cache ========== +TileCache +--------- + + .. autoclass:: stonemason.provider.tilecache.TileCache :members: diff --git a/stonemason/provider/pyramid/__init__.py b/stonemason/provider/pyramid/__init__.py index 769adde..adcdb0c 100644 --- a/stonemason/provider/pyramid/__init__.py +++ b/stonemason/provider/pyramid/__init__.py @@ -3,7 +3,6 @@ __author__ = 'kotaimen' __date__ = '12/26/14' - """ stonemason.provider.pyramid ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -12,4 +11,6 @@ """ from .tile import TileIndex, Tile +from .metatile import MetaTileIndex, MetaTile from .serial import Hilbert, Legacy +from .pyramid import Pyramid diff --git a/stonemason/provider/pyramid/metatile.py b/stonemason/provider/pyramid/metatile.py new file mode 100644 index 0000000..c647094 --- /dev/null +++ b/stonemason/provider/pyramid/metatile.py @@ -0,0 +1,177 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/18/15' + +""" + stonemason.provider.pyramid.metatile + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Large square area in a map. +""" + +import collections +import time +import hashlib + +import six + +from .tile import Tile, TileIndex +from .serial import Hilbert + +_MetaTileIndex = collections.namedtuple('_MetaTileIndex', 'z x y stride') + + +class MetaTileIndex(_MetaTileIndex): + """Coordinate of a `metatile`. + + A `metatile` is always indexed by its left top tile, the constructor will + snap coordinate to left top tile if other tile index is given. + + `stride` must be order of 2, if specified stride makes metatile larger + than current zoom level, it will be rounded down to level size. + + `MetaTileIndex` is a `tuple` and thus is immutable once created. + + >>> from stonemason.provider.pyramid import MetaTileIndex, TileIndex + >>> index = MetaTileIndex(2, 0, 0, 2) + >>> index + MetaTileIndex(2/0/0@2) + >>> list(index.fission()) + [TileIndex(2/0/0), TileIndex(2/0/1), TileIndex(2/1/0), TileIndex(2/1/1)] + >>> MetaTileIndex(2, 0, 0, 8) + MetaTileIndex(2/0/0@4) + >>> MetaTileIndex(8, 11, 7, 8) + MetaTileIndex(8/8/0@8) + + :param z: z zoom level + :type z: int + :param x: x coordinate + :type x: int + :param y: y coordinate + :type y: int + :param stride: number of `tiles` per axis + :type stride: int + """ + + def __new__(cls, z=0, x=0, y=0, stride=1): + # must be power of 2 + assert stride & ( stride - 1 ) == 0 + assert z >= 0 + dim = 2 ** z + # check axis range + assert 0 <= x < dim + assert 0 <= y < dim + + # round coordinate to left top tile in the meta tile + x -= (x % stride) + y -= (y % stride) + + # adjust if stride is too large for current layer + if (stride >> z) > 0: + stride = dim + + return _MetaTileIndex.__new__(cls, z, x, y, stride) + + def __hash__(self): + return Hilbert.coord2serial(*self) + + def fission(self): + """Fission the `MetaTileIndex` into `TileIndexes`. + + Return a iterable of :class:`~stonemason.provider.pyramid.TileIndex` + of all the tiles covered by this metatile. + + :return: :class:`~stonemason.provider.pyramid.TileIndex` + """ + z, x, y, stride = self + for xi in range(x, x + stride): + for yi in range(y, y + stride): + yield TileIndex(z, xi, yi) + + def __repr__(self): + return 'MetaTileIndex(%d/%d/%d@%d)' % self + + +_MetaTile = collections.namedtuple('_MetaTile', + 'index data mimetype mtime etag buffer') + + +class MetaTile(_MetaTile): + """Large piece of square area in a map. + + A `metatile` uses same quad-tree grid as a tile but the grid is sparser, + thus single metatile covers same area of :math:`stride^2` tiles. + + Group tiles into metatile greatly reduces number of operations, + so metatile is the basic unit of storage and map rendering. + + `mimetype` + + Type of the metatile data in mimetypes format, default to + ``application/data``. + + `etag` + + Hash of the tile data. + + `buffer` + + Size of extra pixels around the metatile, only meaningful for raster + image metatiles, default is `0`, which means no buffering. + + >>> from stonemason.provider.pyramid import MetaTileIndex, MetaTile + >>> metatile = MetaTile(MetaTileIndex(2, 0, 0, 2), + ... data=b'a metatile', + ... mimetype='text/plain', + ... mtime=1234., + ... buffer=16) + >>> metatile + MetaTile(2/0/0@2) + >>> metatile.buffer + 16 + + :param index: Metatile index. + :type index: :class:`~stonemason.provider.pyramid.MetaTileIndex`. + :param data: Tile data. + :type data: bytes + :param mimetype: Mimetype of the metatile data. + :type mimetype: str + :param mtime: Timestamp of the metatile. + :type mtime: float + :param etag: Hash of the metatile data. + :type etag: bytes + :param buffer: Pixel size of buffer around the metatile. + :type buffer: int + """ + + def __new__(cls, index=None, data=None, + mimetype=None, mtime=None, etag=None, + buffer=0): + + if index is None: + index = MetaTileIndex() + + if data is None: + data = bytes() + + if mimetype is None: + mimetype = 'application/data' + + if mtime is None: + mtime = time.time() + + if etag is None: + etag = hashlib.md5(data).hexdigest() + + assert isinstance(index, MetaTileIndex) + assert isinstance(data, bytes) + assert isinstance(mimetype, six.string_types) + assert isinstance(mtime, float) + assert isinstance(etag, six.string_types) + assert isinstance(buffer, int) and buffer >= 0 + + return _MetaTile.__new__(cls, index, data, mimetype, mtime, + etag, buffer) + + def __repr__(self): + return 'MetaTile(%d/%d/%d@%d)' % self.index diff --git a/stonemason/provider/pyramid/pyramid.py b/stonemason/provider/pyramid/pyramid.py new file mode 100644 index 0000000..0a7a915 --- /dev/null +++ b/stonemason/provider/pyramid/pyramid.py @@ -0,0 +1,26 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/10/15' + +""" + stonemason.provider.pyramid.pyramid + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + The Quad Tree tile system, with optional CRS&Boundary check. + +""" + +import collections + + +_Pyramid = collections.namedtuple('_Pyramid', '''levels crs proj boundary''') + + +class Pyramid(_Pyramid): + """Quad-tree grid system of a `tile` map. + + """ + + pass + diff --git a/tests/stonemason/provider/pyramid/test_metatile.py b/tests/stonemason/provider/pyramid/test_metatile.py new file mode 100644 index 0000000..06077a7 --- /dev/null +++ b/tests/stonemason/provider/pyramid/test_metatile.py @@ -0,0 +1,91 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/18/15' + +import unittest +import hashlib + +from stonemason.provider.pyramid import MetaTile, MetaTileIndex, TileIndex + + +class TestMetaTileIndex(unittest.TestCase): + def test_init(self): + index1 = MetaTileIndex() + self.assertEqual(index1.z, 0) + self.assertEqual(index1.x, 0) + self.assertEqual(index1.y, 0) + self.assertEqual(index1.stride, 1) + + index2 = MetaTileIndex(4, 4, 8, 4) + self.assertEqual(index2.z, 4) + self.assertEqual(index2.x, 4) + self.assertEqual(index2.y, 8) + self.assertEqual(index2.stride, 4) + + def test_snap_coord(self): + index1 = MetaTileIndex(4, 5, 9, 4) + self.assertEqual(index1.z, 4) + self.assertEqual(index1.x, 4) + self.assertEqual(index1.y, 8) + self.assertEqual(index1.stride, 4) + + index2 = MetaTileIndex(6, 33, 7, 8) + self.assertEqual(index2.z, 6) + self.assertEqual(index2.x, 32) + self.assertEqual(index2.y, 0) + self.assertEqual(index2.stride, 8) + + def test_adjust_stride(self): + index1 = MetaTileIndex(0, 0, 0, 4) + self.assertEqual(index1.z, 0) + self.assertEqual(index1.x, 0) + self.assertEqual(index1.y, 0) + self.assertEqual(index1.stride, 1) + + index2 = MetaTileIndex(3, 1, 2, 16) + self.assertEqual(index2.z, 3) + self.assertEqual(index2.x, 0) + self.assertEqual(index2.y, 0) + self.assertEqual(index2.stride, 8) + + def test_repr(self): + index = MetaTileIndex(2, 2, 3, 8) + self.assertEqual(str(index), 'MetaTileIndex(2/0/0@4)') + + def test_fission(self): + index1 = MetaTileIndex(2, 0, 0, 2) + self.assertSetEqual(set(index1.fission()), + {TileIndex(2, 0, 0), + TileIndex(2, 0, 1), + TileIndex(2, 1, 0), + TileIndex(2, 1, 1), }) + + +class TestMetaTile(unittest.TestCase): + def test_init(self): + meta1 = MetaTile() + self.assertEqual(meta1.index, MetaTileIndex(0, 0, 0, 1)) + self.assertEqual(meta1.data, b'') + self.assertEqual(meta1.mimetype, 'application/data') + self.assertGreater(meta1.mtime, 0) + self.assertEqual(meta1.etag, hashlib.md5(b'').hexdigest()) + self.assertEqual(meta1.buffer, 0) + + meta2 = MetaTile(MetaTileIndex(4, 15, 8, 4), + b'a meta tile', 'text/plain', + mtime=1234.5, etag='abcde', buffer=16) + self.assertEqual(meta2.index, (4, 12, 8, 4)) + self.assertEqual(meta2.data, b'a meta tile') + self.assertEqual(meta2.mimetype, 'text/plain') + self.assertEqual(meta2.mtime, 1234.5) + self.assertEqual(meta2.etag, 'abcde') + self.assertEqual(meta2.buffer, 16) + + def test_repr(self): + index = MetaTile(MetaTileIndex(2, 2, 3, 8)) + self.assertEqual(str(index), 'MetaTile(2/0/0@4)') + + + if __name__ == '__main__': + unittest.main() From bc50ddab4d1829ceec4b106d3cba40b2b033e4f1 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Tue, 20 Jan 2015 22:41:50 +0800 Subject: [PATCH 049/179] FEATURE: Add grid_crop_into_data --- stonemason/util/postprocessing/gridcrop.py | 72 ++++++++++++++++--- .../util/postprocessing/test_gridcrop.py | 23 ++++-- 2 files changed, 81 insertions(+), 14 deletions(-) diff --git a/stonemason/util/postprocessing/gridcrop.py b/stonemason/util/postprocessing/gridcrop.py index 6394ef1..b35ad77 100644 --- a/stonemason/util/postprocessing/gridcrop.py +++ b/stonemason/util/postprocessing/gridcrop.py @@ -74,7 +74,7 @@ def shave(image, buffer_size=0): def grid_crop(image, stride=1, buffer_size=0): - """ Crop a big MetaTile image into a image grid. + """Crop a big MetaTile image into a image grid. Crop a large image into a `stride*stride` image grid, shave extra buffer pixels during the process (aka: MetaTile *fission*). @@ -85,7 +85,9 @@ def grid_crop(image, stride=1, buffer_size=0): - `bytes` contains a image file data - `file` handle of a image file (real file or `io.BytesIO`) - Returns a dictionary of small grid images: `(row, column): image` + Returns a iterator of small grid images: + + `(row, column), image` Due to PIL/Pillow Image internal lazy cropping implement, given `image` object's internal buffer must remain unchanged until @@ -96,14 +98,15 @@ def grid_crop(image, stride=1, buffer_size=0): :param stride: Number of grid images per axis. :param buffer_size: Size of the buffer to be shaved each side in pixels, default is 0, means no buffer is shaved. - :return: A dictionary of cropped image. - :rtype: dict + :return: A iterator of cropped image. + :rtype: iterator """ assert stride >= 1 if stride == 1: - return {(0, 0): shave(image, buffer_size=buffer_size)} + yield (0, 0), shave(image, buffer_size=buffer_size) + return image = open_image(image) @@ -115,7 +118,6 @@ def grid_crop(image, stride=1, buffer_size=0): rows, columns = stride, stride grid_width = grid_height = width // stride - grids = dict() for row in range(0, rows): for column in range(0, columns): left = row * grid_width + buffer_size @@ -125,7 +127,61 @@ def grid_crop(image, stride=1, buffer_size=0): crop_box = (left, top, right, bottom) grid = image.crop(crop_box) - grids[(row, column)] = grid + yield (row, column), grid + + +def grid_crop_into_data(image, stride=1, buffer_size=0, + format=None, parameters=None): + """Crop MetaTile image into a grid and written as image files. + + Same as :func:`grid_crop` except returns image file data instead of + :class:`PIL.Image.Image`. + + `format` + Image format supported by PIL/Pillow, eg: ``JPEG``, ``PNG``, ``WEBP``. + The actual list for formats depends on Pillow installation, see + `image formats`_ for a complete format list. + + `parameters` + Image saving parameters, available list depends on `format` selected. + `image formats`_ for a complete parameter list. + + Some examples: + + format='JPEG' + parameters={'optimize'=True, 'quality'=80} + + .. _image formats: + + See :func:`~stonemason.util.postprocessing.gridrop` for parameter descriptions. + + .. note:: + Pillow won't do convert colorspaces when saving images, so convert + `image` to P mode first if a paletted image is required. + + :param image: Image to crop, must be square. + :type image: :class:`PIL.Image.Image` or `bytes` or `file` + :param stride: Number of grid images per axis. + :param buffer_size: Size of the buffer to be shaved each side in pixels, + default is 0, means no buffer is shaved. + :param format: Image format, default means same as given image. + :param parameters: Image save parameters as a dictionary. + :return: A iterator of cropped image data. + :rtype: iterator + """ + + image = open_image(image) + + # inherit image format if its not given + if format is None: + format = image.format - return grids + if parameters is None: + parameters = {} + for (row, column), grid_image in grid_crop(image, stride, buffer_size): + buf = io.BytesIO() + grid_image.save(buf, format=format, **parameters) + grid_data = buf.getvalue() + del buf + yield (row, column), grid_data \ No newline at end of file diff --git a/tests/stonemason/util/postprocessing/test_gridcrop.py b/tests/stonemason/util/postprocessing/test_gridcrop.py index c8d86ba..e57e04e 100644 --- a/tests/stonemason/util/postprocessing/test_gridcrop.py +++ b/tests/stonemason/util/postprocessing/test_gridcrop.py @@ -5,7 +5,7 @@ import unittest import os -import tempfile +import io from distutils.version import StrictVersion @@ -65,14 +65,14 @@ def test_shave(self): def test_grid_crop(self): - grids = gridcrop.grid_crop(self.grid_data, stride=2, - buffer_size=256) + grids = dict(gridcrop.grid_crop(self.grid_data, stride=2, + buffer_size=256)) # visual confirm # for (row, column), image in six.iteritems(grids): # filename = os.path.join(tempfile.gettempdir(), - # '%d-%d.png' % (row, column)) - # six.print_(filename) - # image.save(filename) + # '%d-%d.png' % (row, column)) + # six.print_(filename) + # image.save(filename) self.assertImageEqual(grids[(0, 0)], self.grid_image.crop((256, 256, 512, 512))) @@ -83,6 +83,17 @@ def test_grid_crop(self): self.assertImageEqual(grids[(1, 0)], self.grid_image.crop((512, 256, 768, 512))) + def test_grid_crop_into_data(self): + + grids = dict(gridcrop.grid_crop_into_data(self.grid_data, + stride=2, + buffer_size=256, + format='PNG' + )) + + self.assertImageEqual(Image.open(io.BytesIO(grids[(0, 0)])), + self.grid_image.crop((256, 256, 512, 512))) + if __name__ == '__main__': unittest.main() From 10f228e8d6861d7680c9bb202c06e021f6ad30ee Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Tue, 20 Jan 2015 22:42:52 +0800 Subject: [PATCH 050/179] DOC: Add package description for pyramid and tile cache package --- docs/pkg_pyramid.rst | 4 ++++ docs/pkg_tilecache.rst | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/pkg_pyramid.rst b/docs/pkg_pyramid.rst index d037a4f..a55aa9d 100644 --- a/docs/pkg_pyramid.rst +++ b/docs/pkg_pyramid.rst @@ -3,6 +3,10 @@ Pyramid Tile system package. +Contains definitions of `tiles`, `metatile` and the quad tree `pyramid`. + +All classes in this package is implemented using :class:`collections.namedtuple` +thus is immutable and pickle serializable. Tile ---- diff --git a/docs/pkg_tilecache.rst b/docs/pkg_tilecache.rst index e4dce5a..6fe9b2e 100644 --- a/docs/pkg_tilecache.rst +++ b/docs/pkg_tilecache.rst @@ -1,11 +1,18 @@ Tile Cache ========== +A `TileCache` temporary stores recently accessed tiles for faster access, or +as a intermediate storage when metatile or tilecluster is retrieved from a +TileStorage. + +TileCache has no persistence and depends on a distributed cache. + +Currently there is only `memcached` cache. +The interface `TileCache` class can be used as a *null* cache. TileCache --------- - .. autoclass:: stonemason.provider.tilecache.TileCache :members: From 6eb14072fd40227f4aab68f48be8cf9cb01b8bff Mon Sep 17 00:00:00 2001 From: ray Date: Tue, 20 Jan 2015 23:39:04 +0800 Subject: [PATCH 051/179] FEATURE: Add Theme Format --- stonemason/mason/theme/theme.py | 125 ++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 stonemason/mason/theme/theme.py diff --git a/stonemason/mason/theme/theme.py b/stonemason/mason/theme/theme.py new file mode 100644 index 0000000..4c2c3af --- /dev/null +++ b/stonemason/mason/theme/theme.py @@ -0,0 +1,125 @@ +# -*- encoding: utf-8 -*- +""" + stonemason.mason.theme.theme + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Defines the format of stonemason theme. + +""" + +from collections import namedtuple + +_ThemeElement = namedtuple('_Foo', 'prototype parameters') + + +class ThemeError(Exception): + """Base Theme Error""" + pass + + +class Validator(object): + """Validator Interface + + A validator subclass should implement the detail of the validation. + """ + + def validate(self): + """Return true if is valid""" + raise NotImplementedError + + +class ThemeElement(_ThemeElement, Validator): + """Theme Element + + Each element in a theme has a property called `prototype`, which is + used to specify the type of the element a provider will use. And a + `parameters` property determines how to create this element. + + `prototype` + + Type of the element a provider will use. + + `parameters` + + Parameters of the element. + + """ + + def validate(self): + raise NotImplementedError + + +class ThemeCache(ThemeElement): + def validate(self): + return False + + +class ThemeStorage(ThemeElement): + def validate(self): + return False + + +class ThemeDesign(ThemeElement): + def validate(self): + return False + + +class Theme(object): + """ Map Theme + + The theme object is a specialized config for providers. + It defines cache, storage, design and a bunch of options of + a map provider. + + `config` + + :class:`stonemason.mason.config.Config` + + """ + + def __init__(self, config): + self._name = config.get('name') + + conf = config.get('cache') + if conf is not None: + self._cache = ThemeCache(conf['prototype'], conf['parameters']) + self._cache.validate() + + conf = config.get('storage') + if conf is not None: + self._storage = ThemeStorage(conf['prototype'], conf['parameters']) + self._storage.validate() + + conf = config.get('design') + if conf is not None: + self._design = ThemeDesign(conf['prototype'], conf['parameters']) + self._design.validate() + + self._metadata = config.get('metadata', dict()) + if not isinstance(self._metadata, dict): + self._metadata = dict() + + @property + def name(self): + """Name of the theme""" + return self._name + + @property + def metadata(self): + """Metadata of the theme""" + return self._metadata + + @property + def cache(self): + """Cache configuration""" + return self._cache + + @property + def storage(self): + """Storage configuration""" + return self._storage + + @property + def design(self): + """Map design for renderer""" + return self._design From 177860ad966f5d0f7af2ba267b9bbeae3aaa0689 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Thu, 22 Jan 2015 17:42:18 +0800 Subject: [PATCH 052/179] FEATURE: Add NullTileCache class --- docs/pkg_tilecache.rst | 8 ++++++++ stonemason/provider/tilecache/__init__.py | 2 +- stonemason/provider/tilecache/tilecache.py | 7 ++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/pkg_tilecache.rst b/docs/pkg_tilecache.rst index 6fe9b2e..94fa58b 100644 --- a/docs/pkg_tilecache.rst +++ b/docs/pkg_tilecache.rst @@ -10,12 +10,20 @@ TileCache has no persistence and depends on a distributed cache. Currently there is only `memcached` cache. The interface `TileCache` class can be used as a *null* cache. +Exception +--------- + +.. autoclass:: stonemason.provider.tilecache.TileCacheError + :members: + TileCache --------- .. autoclass:: stonemason.provider.tilecache.TileCache :members: +.. autoclass:: stonemason.provider.tilecache.NullTileCache + :members: Memcached --------- diff --git a/stonemason/provider/tilecache/__init__.py b/stonemason/provider/tilecache/__init__.py index 50b85aa..47e9c84 100644 --- a/stonemason/provider/tilecache/__init__.py +++ b/stonemason/provider/tilecache/__init__.py @@ -10,6 +10,6 @@ A cache of tiles. """ -from .tilecache import TileCache, TileCacheError +from .tilecache import TileCache, NullTileCache, TileCacheError from .memcache_ import MemTileCache diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py index c099154..3308766 100644 --- a/stonemason/provider/tilecache/tilecache.py +++ b/stonemason/provider/tilecache/tilecache.py @@ -181,4 +181,9 @@ def close(self): .. Warning:: This will clear everything, include data not stored by TileCache. """ - pass \ No newline at end of file + pass + + +class NullTileCache(TileCache): + """A cache that caches nothing.""" + pass From 500440871a0799803ad7c5399a3a8e357a1048b3 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Fri, 23 Jan 2015 11:27:12 +0800 Subject: [PATCH 053/179] FEATURE: Added provider.pyramid.Pyramid --- docs/pkg_pyramid.rst | 7 ++ stonemason/provider/pyramid/pyramid.py | 86 ++++++++++++++++++- .../provider/pyramid/test_pyramid.py | 29 +++++++ 3 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 tests/stonemason/provider/pyramid/test_pyramid.py diff --git a/docs/pkg_pyramid.rst b/docs/pkg_pyramid.rst index a55aa9d..02dcf7a 100644 --- a/docs/pkg_pyramid.rst +++ b/docs/pkg_pyramid.rst @@ -35,3 +35,10 @@ Serial .. autoclass:: stonemason.provider.pyramid.Legacy :members: + + +Pyramid +------- + +.. autoclass:: stonemason.provider.pyramid.Pyramid + :members: diff --git a/stonemason/provider/pyramid/pyramid.py b/stonemason/provider/pyramid/pyramid.py index 0a7a915..d743870 100644 --- a/stonemason/provider/pyramid/pyramid.py +++ b/stonemason/provider/pyramid/pyramid.py @@ -12,15 +12,97 @@ """ import collections +import re +import six -_Pyramid = collections.namedtuple('_Pyramid', '''levels crs proj boundary''') +_Pyramid = collections.namedtuple('_Pyramid', + '''levels stride crs proj boundary''') class Pyramid(_Pyramid): """Quad-tree grid system of a `tile` map. + .. warning:: Attributes of Pyramid is subject to change before design stabilizes. + + + `levels` + + Zoom levels of the pyramid, must be a list of integers, default + value is ``0-22``. + + `stride` + + Stride of the MetaTile in this pyramid, default value is ``1``. + + `crs` + + Coordinate Reference System (Geographic Coordinate System) of the + map data. default value is ``EPSG:4326``, which is the common + WGS84 datum. + + `proj` + + Projected coordinate system of the map, default value is ``EPSG:3857``, + which is Mercator projection used by GoogleMaps and most web map + services. + + `boundary` + + Map boundary in specified `crs`, only simple bounding box is supported + as of now, in the form of ``(left, top, right, bottom)``. + + Default value is ``(-180,-85.0511,180,85.0511)``, which is the default + coverage of Google Maps + + **About Projection** + + `crs` and `proj` accepts projection string formats supported by + `OSRSetFromUserInput`_, which includes: + + - Well known name eg: ``WGS84`` + - EPSG Code, eg: ``EPSG:3857`` + - PROJ.4 definitions, eg: ``+proj=longlat +datum=WGS84 +no_defs`` + + `Pyramid` does not verify projection strings. + + .. _OSRSetFromUserInput: + + + >>> from stonemason.provider.pyramid import Pyramid + >>> pyramid = Pyramid(levels=[4,5,6],stride=4) + >>> pyramid.levels + [4, 5, 6] + >>> pyramid + Pyramid(levels=[4, 5, 6], stride=4, crs='EPSG:4326', proj='EPSG:3857', boundary=(-180, -85.0511, 180, 85.0511)) + + :param levels: Available zoom levels, default is ``0-22``. + :type levels: list + :param stride: Stride of the MetaTile, default is ``1``. + :type stride: int + :param crs: Coordinate reference system of the map data. + :type crs: str + :param proj: Cartographic projection of the map. + :type proj: str + :param boundary: Boundary of the map specified in data `crs`. """ - pass + def __new__(cls, + levels=range(0, 23), + stride=1, + crs='EPSG:4326', + proj='EPSG:3857', + boundary=(-180, -85.0511, 180, 85.0511)): + + levels = list(levels) + assert isinstance(levels, list) + assert isinstance(stride, int) and stride & ( stride - 1 ) == 0 + assert isinstance(boundary, tuple) and len(boundary) == 4 + assert isinstance(crs, six.string_types) + assert isinstance(proj, six.string_types) + + return _Pyramid.__new__(cls, levels, stride, crs, proj, boundary) + def __repr__(self): + # HACK: namedtuple.__repr__() returns '_Pyramid(...' on 2.7 but returns 'Pyramid(...' on 3.4 ... + return super(Pyramid, self).__repr__().replace('_Pyramid', 'Pyramid', 1) diff --git a/tests/stonemason/provider/pyramid/test_pyramid.py b/tests/stonemason/provider/pyramid/test_pyramid.py new file mode 100644 index 0000000..d2a6fc9 --- /dev/null +++ b/tests/stonemason/provider/pyramid/test_pyramid.py @@ -0,0 +1,29 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/23/15' + +import unittest + +from stonemason.provider.pyramid import Pyramid + + +class TestPyramid(unittest.TestCase): + def test_init(self): + pyramid = Pyramid() + self.assertEqual(pyramid.levels, list(range(0, 23))) + self.assertEqual(pyramid.stride, 1) + self.assertListEqual(list(pyramid.boundary), + [-180, -85.0511, 180, 85.0511]) + self.assertEqual(pyramid.crs, 'EPSG:4326') + self.assertEqual(pyramid.proj, 'EPSG:3857') + + def test_repr(self): + pyramid = Pyramid(levels=[4,5], stride=4) + self.assertEqual(str(pyramid), + '''Pyramid(levels=[4, 5], stride=4, crs='EPSG:4326', proj='EPSG:3857', boundary=(-180, -85.0511, 180, 85.0511))''') + + + +if __name__ == '__main__': + unittest.main() From 93a8b5e4434e0846cad21b0a824ce4c08afb697a Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Fri, 23 Jan 2015 23:27:03 +0800 Subject: [PATCH 054/179] DOC: Cleanup docs --- docs/config.rst | 5 +- docs/index.rst | 53 +++++++++++++++++++--- docs/pkg_pyramid.rst | 11 ++--- docs/pkg_tilecache.rst | 2 + docs/pkg_util.rst | 2 +- docs/quickstart.rst | 6 +++ docs/themes.rst | 6 +++ stonemason/provider/pyramid/metatile.py | 3 -- stonemason/provider/pyramid/pyramid.py | 7 +-- stonemason/provider/pyramid/tile.py | 5 -- stonemason/provider/tilecache/memcache_.py | 2 - 11 files changed, 71 insertions(+), 31 deletions(-) create mode 100644 docs/quickstart.rst create mode 100644 docs/themes.rst diff --git a/docs/config.rst b/docs/config.rst index be07eb9..28bf914 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -1,5 +1,6 @@ -StoneMason Config -================= +Configuration +============= + diff --git a/docs/index.rst b/docs/index.rst index e1d60fa..04843d7 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,32 +3,73 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. + +********** Stonemason -========== +********** + +*Stonemason* is a tile map service toolkit developed in Python. + +**TODO** -*Tile service toolkit.* +------------------------------------------------------------------------------- +Synopsis +======== -Manual ------- +**TODO** + + +User's Guide +============ .. toctree:: :maxdepth: 1 install + quickstart config + themes + storages + +API Reference +============= + +Mason +----- -References ----------- .. toctree:: :maxdepth: 2 pkg_config + +Tile Providers +-------------- + +.. toctree:: + :maxdepth: 2 + pkg_pyramid pkg_tilecache + + +Utilties +-------- + +.. toctree:: + :maxdepth: 2 + pkg_util +REST API Reference +================== + +**TODO** + + +------------------------------------------------------------------------------- + Indices and tables ================== diff --git a/docs/pkg_pyramid.rst b/docs/pkg_pyramid.rst index 02dcf7a..6d58f88 100644 --- a/docs/pkg_pyramid.rst +++ b/docs/pkg_pyramid.rst @@ -1,11 +1,10 @@ -Pyramid -======= - -Tile system package. +Tile System +=========== -Contains definitions of `tiles`, `metatile` and the quad tree `pyramid`. +:mod:`stonemason.provider.pyramid` contains definitions of `tiles`, `metatile` +and the quad tree `pyramid`. -All classes in this package is implemented using :class:`collections.namedtuple` +All classes in this package is implemented using :func:`collections.namedtuple` thus is immutable and pickle serializable. Tile diff --git a/docs/pkg_tilecache.rst b/docs/pkg_tilecache.rst index 94fa58b..6e3f63a 100644 --- a/docs/pkg_tilecache.rst +++ b/docs/pkg_tilecache.rst @@ -1,6 +1,8 @@ Tile Cache ========== +:mod:`stonemsaon.provider.tilecache` + A `TileCache` temporary stores recently accessed tiles for faster access, or as a intermediate storage when metatile or tilecluster is retrieved from a TileStorage. diff --git a/docs/pkg_util.rst b/docs/pkg_util.rst index 1b721f8..db8e720 100644 --- a/docs/pkg_util.rst +++ b/docs/pkg_util.rst @@ -1,7 +1,7 @@ Utilities ========= -Utility functions and classes. +:mod:`stonemason.util` contains utility functions and classes. Geo --- diff --git a/docs/quickstart.rst b/docs/quickstart.rst new file mode 100644 index 0000000..049b342 --- /dev/null +++ b/docs/quickstart.rst @@ -0,0 +1,6 @@ +Quick Start +=========== + + + + diff --git a/docs/themes.rst b/docs/themes.rst new file mode 100644 index 0000000..aaa4b44 --- /dev/null +++ b/docs/themes.rst @@ -0,0 +1,6 @@ +Theme Management +================ + + + + diff --git a/stonemason/provider/pyramid/metatile.py b/stonemason/provider/pyramid/metatile.py index c647094..f346392 100644 --- a/stonemason/provider/pyramid/metatile.py +++ b/stonemason/provider/pyramid/metatile.py @@ -106,16 +106,13 @@ class MetaTile(_MetaTile): so metatile is the basic unit of storage and map rendering. `mimetype` - Type of the metatile data in mimetypes format, default to ``application/data``. `etag` - Hash of the tile data. `buffer` - Size of extra pixels around the metatile, only meaningful for raster image metatiles, default is `0`, which means no buffering. diff --git a/stonemason/provider/pyramid/pyramid.py b/stonemason/provider/pyramid/pyramid.py index d743870..f6c85ec 100644 --- a/stonemason/provider/pyramid/pyramid.py +++ b/stonemason/provider/pyramid/pyramid.py @@ -27,28 +27,23 @@ class Pyramid(_Pyramid): `levels` - Zoom levels of the pyramid, must be a list of integers, default value is ``0-22``. `stride` - Stride of the MetaTile in this pyramid, default value is ``1``. `crs` - Coordinate Reference System (Geographic Coordinate System) of the map data. default value is ``EPSG:4326``, which is the common WGS84 datum. `proj` - Projected coordinate system of the map, default value is ``EPSG:3857``, which is Mercator projection used by GoogleMaps and most web map services. `boundary` - Map boundary in specified `crs`, only simple bounding box is supported as of now, in the form of ``(left, top, right, bottom)``. @@ -66,7 +61,7 @@ class Pyramid(_Pyramid): `Pyramid` does not verify projection strings. - .. _OSRSetFromUserInput: + .. _OSRSetFromUserInput: http://www.gdal.org/ogr__srs__api_8h.html#a927749db01cec3af8aa5e577d032956b >>> from stonemason.provider.pyramid import Pyramid diff --git a/stonemason/provider/pyramid/tile.py b/stonemason/provider/pyramid/tile.py index 5929185..4621f1e 100644 --- a/stonemason/provider/pyramid/tile.py +++ b/stonemason/provider/pyramid/tile.py @@ -81,28 +81,23 @@ class Tile(_Tile): A tile object is immutable once created and has following attributes: `index` - :class:`~stonemason.provider.pyramid.TileIndex`. `data` - Arbitrary binary or textual data, though its usually a rendered raster map image, or geo referenced features. `mimetype` - Type of the tile data in mimetypes format, default to ``application/data``. `Tile` will never check whether `mimetype` matches actual tile data format. `mtime` - Modify time of the tile since EPOCH in seconds, if its not given in the constructor, current time is used by calling :func:`time.time()` `etag` - Hash of the tile data, calculated using class:`hashlib:md5` if is not given in the constructor. diff --git a/stonemason/provider/tilecache/memcache_.py b/stonemason/provider/tilecache/memcache_.py index 2af43d0..880fd27 100644 --- a/stonemason/provider/tilecache/memcache_.py +++ b/stonemason/provider/tilecache/memcache_.py @@ -40,14 +40,12 @@ class MemTileCache(TileCache): .. _nutcracker: `servers` - A list of servers, the list is sent to :class:`pylibmc.Client`, default value is ``['localhost:11211',]``. .. seealso:: `pylibmc` `example `_. `behaviors` - Set `pylibmc` client behavior, default value is: .. code-block:: python From 6b383da0f118f70b0807eddf005fe3341285a338 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Fri, 23 Jan 2015 23:27:47 +0800 Subject: [PATCH 055/179] REFACTOR: Move the do-nothing tile cache implement to NullTileCache --- stonemason/provider/tilecache/tilecache.py | 44 +++++++++++++++++----- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py index 3308766..e1a2f7f 100644 --- a/stonemason/provider/tilecache/tilecache.py +++ b/stonemason/provider/tilecache/tilecache.py @@ -43,9 +43,6 @@ class TileCache(object): cache system implement, check implement for details. """ - def __init__(self): - pass - def get(self, tag, index): """Retrieve a tile from cache, return `None` on miss. @@ -56,7 +53,7 @@ def get(self, tag, index): :return: `Tile` object on hit, `None` on miss. :rtype: `Tile` or `None` """ - return None + raise NotImplementedError def has(self, tag, index): """Check whether give tag&index exists in the cache. @@ -88,7 +85,7 @@ def put(self, tag, tile, ttl=0): :return: None :raise: :class:`~stonemason.provider.tilecache.TileCacheError` when fail. """ - pass + raise NotImplementedError def retire(self, tag, index): """Delete tile with given tag&index from cache. @@ -101,7 +98,7 @@ def retire(self, tag, index): :type index: :class:`~stonemason.provider.pyramid.TileIndex` :return: None """ - pass + raise NotImplementedError def put_multi(self, tag, tiles, ttl=0): """Put many tiles of with same tag in one call. @@ -173,7 +170,7 @@ def unlock(self, tag, index, cas): def flush(self): """Delete everything in the cache.""" - pass + raise NotImplementedError def close(self): """Release any underlying resources. @@ -181,9 +178,38 @@ def close(self): .. Warning:: This will clear everything, include data not stored by TileCache. """ - pass + raise NotImplementedError class NullTileCache(TileCache): """A cache that caches nothing.""" - pass + + def get(self, tag, index): + return None + + def has(self, tag, index): + return False + + def put(self, tag, tile, ttl=0): + return + + def retire(self, tag, index): + return + + def put_multi(self, tag, tiles, ttl=0): + return + + def has_all(self, tag, indexes): + return False + + def lock(self, tag, index, ttl=0.1): + return 0xfeed + + def unlock(self, tag, index, cas): + return True + + def flush(self): + return + + def close(self): + return \ No newline at end of file From b9d622343c4437ee751ee1b6897aaac002e767e3 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sun, 25 Jan 2015 16:36:02 +0800 Subject: [PATCH 056/179] TEST: Improve test coverage, disable coverage on interfaces --- stonemason/provider/tilecache/tilecache.py | 2 +- tests/__init__.py | 16 ++++++++++++ tests/data/grid_crop/grid.png | Bin 0 -> 23951 bytes tests/data/grid_crop/grid.tif | Bin 0 -> 35690 bytes .../provider/tilecache/test_memcache.py | 21 +++++++++++++++- .../provider/tilecache/test_tilecache.py | 23 ++++++++++++++++++ .../util/postprocessing/test_gridcrop.py | 22 ++++++----------- 7 files changed, 67 insertions(+), 17 deletions(-) create mode 100644 tests/data/grid_crop/grid.png create mode 100644 tests/data/grid_crop/grid.tif create mode 100644 tests/stonemason/provider/tilecache/test_tilecache.py diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py index e1a2f7f..76a991a 100644 --- a/stonemason/provider/tilecache/tilecache.py +++ b/stonemason/provider/tilecache/tilecache.py @@ -23,7 +23,7 @@ class TileNotFound(TileCacheError): pass -class TileCache(object): +class TileCache(object): # pragma: no cover """A cache for Tiles. Cache recent or frequently visited tiles for fast access, also works diff --git a/tests/__init__.py b/tests/__init__.py index e633b46..854df8a 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -4,6 +4,22 @@ __date__ = '12/25/14' import os +import unittest + +from PIL import Image DATA_DIRECTORY = os.path.join(os.path.dirname(__file__), 'data') + +class ImageTestCase(unittest.TestCase): + def assertImageEqual(self, first, second): + assert isinstance(first, Image.Image) + assert isinstance(second, Image.Image) + # NOTE: We can't use TestCase.assertEqual() here since it will try to + # generate a extremely large "diff report" if test fails. + self.assertTrue(list(first.getdata()) == list(second.getdata())) + + def assertImageNotEqual(self, first, second): + assert isinstance(first, Image.Image) + assert isinstance(second, Image.Image) + self.assertFalse(list(first.getdata()) == list(second.getdata())) diff --git a/tests/data/grid_crop/grid.png b/tests/data/grid_crop/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..b09b015ae802c7e13f96b7d4ec7d0a173cbbc89c GIT binary patch literal 23951 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 OHcS2lO_2J}_x}J_AvjY2 literal 0 HcmV?d00001 diff --git a/tests/stonemason/provider/tilecache/test_memcache.py b/tests/stonemason/provider/tilecache/test_memcache.py index 8c955a1..d0b853f 100644 --- a/tests/stonemason/provider/tilecache/test_memcache.py +++ b/tests/stonemason/provider/tilecache/test_memcache.py @@ -7,7 +7,7 @@ import time from stonemason.provider.pyramid import Tile, TileIndex -from stonemason.provider.tilecache import MemTileCache +from stonemason.provider.tilecache import MemTileCache, TileCacheError class TestMemTileCache(unittest.TestCase): @@ -23,9 +23,15 @@ def setUp(self): self.cache.connection.set('layer/3/4/5', b'a tile') + self.cache.connection.set('layer/3/4/5~metadata', '["text/plain", 1234.56, "ABCD"]') + self.cache.connection.set('badlayer/0/0/0', + b'bad metadata') + self.cache.connection.set('badlayer/0/0/0~metadata', + 'bad metadata') + def tearDown(self): self.cache.close() @@ -44,6 +50,12 @@ def test_get(self): self.assertEqual(tile.mtime, 1234.56) self.assertEqual(tile.etag, 'ABCD') + self.assertIsNone(self.cache.get('layer', TileIndex(0, 0, 0))) + + self.assertRaises(TileCacheError, + self.cache.get, + 'badlayer', TileIndex(0, 0, 0)) + def test_has(self): self.assertTrue(self.cache.has('layer', TileIndex(3, 4, 5))) self.assertFalse(self.cache.has('layer', TileIndex(3, 4, 6))) @@ -87,5 +99,12 @@ def test_stats(self): self.assertTrue(self.cache.stats()) +class TestMemTileCacheConnectionFailure(unittest.TestCase): + def test_conn_fail(self): + self.assertRaises(TileCacheError, + MemTileCache, + servers=['0.0.0.0:80']) + + if __name__ == '__main__': unittest.main() diff --git a/tests/stonemason/provider/tilecache/test_tilecache.py b/tests/stonemason/provider/tilecache/test_tilecache.py new file mode 100644 index 0000000..462c470 --- /dev/null +++ b/tests/stonemason/provider/tilecache/test_tilecache.py @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/24/15' + +import unittest + +from stonemason.provider.tilecache import NullTileCache +from stonemason.provider.pyramid import Tile, TileIndex + + +class TestNullTileCache(unittest.TestCase): + def test_nullcache(self): + cache = NullTileCache() + self.assertIsNone(cache.put('tag', Tile(TileIndex(3, 4, 5)))) + self.assertIsNone(cache.get('tag', TileIndex(3, 4, 5))) + self.assertFalse(cache.has('tag', TileIndex(3, 4, 5))) + self.assertFalse(cache.has_all('tag', [])) + + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/stonemason/util/postprocessing/test_gridcrop.py b/tests/stonemason/util/postprocessing/test_gridcrop.py index e57e04e..22617b5 100644 --- a/tests/stonemason/util/postprocessing/test_gridcrop.py +++ b/tests/stonemason/util/postprocessing/test_gridcrop.py @@ -14,22 +14,10 @@ from PIL import Image import stonemason.util.postprocessing.gridcrop as gridcrop -from tests import DATA_DIRECTORY +from tests import DATA_DIRECTORY, ImageTestCase -class TestPIL(unittest.TestCase): - def assertImageEqual(self, first, second): - assert isinstance(first, Image.Image) - assert isinstance(second, Image.Image) - # NOTE: We can't use TestCase.assertEqual() here since it will try to - # generate a extremely large "diff report" if test fails. - self.assertTrue(list(first.getdata()) == list(second.getdata())) - - def assertImageNotEqual(self, first, second): - assert isinstance(first, Image.Image) - assert isinstance(second, Image.Image) - self.assertFalse(list(first.getdata()) == list(second.getdata())) - +class TestPIL(ImageTestCase): def setUp(self): grid_image = os.path.join(DATA_DIRECTORY, 'grid_crop', 'paletted_grid.png') @@ -63,6 +51,10 @@ def test_shave(self): self.assertImageNotEqual(expected_cropped_image, gridcrop.shave(self.grid_data, 0)) + self.assertImageEqual(expected_cropped_image, + list(gridcrop.grid_crop(self.grid_data, stride=1, + buffer_size=256))[0][1]) + def test_grid_crop(self): grids = dict(gridcrop.grid_crop(self.grid_data, stride=2, @@ -89,7 +81,7 @@ def test_grid_crop_into_data(self): stride=2, buffer_size=256, format='PNG' - )) + )) self.assertImageEqual(Image.open(io.BytesIO(grids[(0, 0)])), self.grid_image.crop((256, 256, 512, 512))) From c5dbc3c292b1170b3cba658db1c671b84b8089ba Mon Sep 17 00:00:00 2001 From: ray Date: Sun, 25 Jan 2015 17:02:02 +0800 Subject: [PATCH 057/179] FEATURE: Add Metadata ThemeBlock --- stonemason/mason/theme/__init__.py | 6 +- stonemason/mason/theme/theme.py | 81 ++-------- stonemason/mason/theme/themeblock.py | 227 +++++++++++++++++++++++++++ 3 files changed, 246 insertions(+), 68 deletions(-) create mode 100644 stonemason/mason/theme/themeblock.py diff --git a/stonemason/mason/theme/__init__.py b/stonemason/mason/theme/__init__.py index 275af68..4a1393b 100644 --- a/stonemason/mason/theme/__init__.py +++ b/stonemason/mason/theme/__init__.py @@ -1,6 +1,4 @@ # -*- encoding: utf-8 -*- -__author__ = 'kotaimen' -__date__ = '1/5/15' - - +from .themeblock import MetadataBlock +from .themeblock import MetadataValueError, ThemeBlockError diff --git a/stonemason/mason/theme/theme.py b/stonemason/mason/theme/theme.py index 4c2c3af..69f43a2 100644 --- a/stonemason/mason/theme/theme.py +++ b/stonemason/mason/theme/theme.py @@ -7,9 +7,7 @@ """ -from collections import namedtuple - -_ThemeElement = namedtuple('_Foo', 'prototype parameters') +from .themeblock import MetadataBlock, DesignBlock, CacheBlock, StorageBlock class ThemeError(Exception): @@ -17,51 +15,9 @@ class ThemeError(Exception): pass -class Validator(object): - """Validator Interface - - A validator subclass should implement the detail of the validation. - """ - - def validate(self): - """Return true if is valid""" - raise NotImplementedError - - -class ThemeElement(_ThemeElement, Validator): - """Theme Element - - Each element in a theme has a property called `prototype`, which is - used to specify the type of the element a provider will use. And a - `parameters` property determines how to create this element. - - `prototype` - - Type of the element a provider will use. - - `parameters` - - Parameters of the element. - - """ - - def validate(self): - raise NotImplementedError - - -class ThemeCache(ThemeElement): - def validate(self): - return False - - -class ThemeStorage(ThemeElement): - def validate(self): - return False - - -class ThemeDesign(ThemeElement): - def validate(self): - return False +class ModeNotSupported(ThemeError): + """Unsupported theme mode""" + pass class Theme(object): @@ -80,30 +36,27 @@ class Theme(object): def __init__(self, config): self._name = config.get('name') - conf = config.get('cache') - if conf is not None: - self._cache = ThemeCache(conf['prototype'], conf['parameters']) - self._cache.validate() - - conf = config.get('storage') - if conf is not None: - self._storage = ThemeStorage(conf['prototype'], conf['parameters']) - self._storage.validate() + conf = config.get('metadata', dict()) + if not isinstance(self._metadata, dict): + raise ThemeError('A metadata should be a dict of options!') + self._metadata = MetadataBlock(**conf) - conf = config.get('design') - if conf is not None: - self._design = ThemeDesign(conf['prototype'], conf['parameters']) - self._design.validate() + self._mode = None + self._design = None + self._cache = None + self._storage = None - self._metadata = config.get('metadata', dict()) - if not isinstance(self._metadata, dict): - self._metadata = dict() @property def name(self): """Name of the theme""" return self._name + @property + def mode(self): + """Provider mode""" + return self._mode + @property def metadata(self): """Metadata of the theme""" diff --git a/stonemason/mason/theme/themeblock.py b/stonemason/mason/theme/themeblock.py new file mode 100644 index 0000000..22bfc75 --- /dev/null +++ b/stonemason/mason/theme/themeblock.py @@ -0,0 +1,227 @@ +# -*- encoding: utf-8 -*- +""" + stonemason.mason.theme.themeblock + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Blocks of a stonemason theme. + +""" + +import re +import six +import json + + +class ThemeBlockError(Exception): + """Theme Block Error Base + """ + pass + + +class MetadataValueError(ThemeBlockError): + """Invalid attribute value + """ + pass + + +class ThemeBlock(object): + """Theme Block Base + """ + pass + + +class MetadataBlock(ThemeBlock): + """Theme Metadata + + The MetadataBlock contains metadata of a stonemason theme. It is a + namedtuple with additional functions. + + For python2, namedtuple._replace should not be used because it will bypass + the validation check defined the new + + The following metadata is required: + + `name` + + A string literal that uniquely identify a theme. Different theme + should have different names. + + `crs` + + A coordinate reference system(CRS) defines a specific map projection, + as well as transformations between different spatial reference systems. + Validation is delayed to backend. + + `scale` + + A positive integer represents a proportional ratio to a projected map + on a 72dpi device, for example, 2, 3, 4. If you are rendering maps for + a retina display, you should probably use scale factor 2. + Range [1, 5). + + `buffer` + + The padding space on all sides of a `metatile`. It will be + multiplied by the `scale` factor. + + `stride` + + The number of steps along the x/y axis of a `metatile` grid. For a 1x1 + metatile, the stride is 1. + + `format` + + Specifies the output format. + + `format_options` + + Parameters for the output format + + `attribution` + + Description about authors or copyright information. + + + :param name: Theme name. + :type name: str + :param crs: A coordinate reference system(CRS). + :type crs: str + :param scale: A proportional scale ratio. + :type scale: int + :param buffer: Extra boundary area size in pixels. + :type buffer: int + :param stride: The number of steps along a axis of a metatile grid. + :type stride: int + :param format: Output format. + :type format: str + :param format_options: Output format options. + :type format_options: dict + :param attribution: Information about authors or copyright. + :type attribution: str + """ + + def __init__(self, + name='default', + crs='epsg:3857', + scale=1, + buffer=0, + stride=1, + format='png', + format_options=None, + attribution=''): + if not isinstance(name, six.string_types) or \ + not re.match('^[a-zA-Z]+[a-zA-Z0-9]*$', name): + raise MetadataValueError( + 'Name should be a string literal with ONLY ascii alpha ' + 'characters!') + + if not isinstance(crs, six.string_types): + raise MetadataValueError( + 'CRS could be a projection string, a spatial reference system ' + 'identifier(SRID), or a conventional name(WGS84)!') + + if not isinstance(scale, int) or scale < 1 or scale >= 5: + raise MetadataValueError( + 'A positive integer (1-5) is required.') + + if not isinstance(buffer, int) or buffer < 0: + raise MetadataValueError( + 'Zero or a positive integer.') + + # check if stride is power of 2 + if not isinstance(stride, int) or \ + ((stride & (stride - 1)) != 0) or stride <= 0: + raise MetadataValueError( + 'A positive integer powers of 2 is required!') + + if not isinstance(format, six.string_types) or \ + format not in ('png', 'jpeg', 'geojson'): + raise MetadataValueError( + 'Available Output format includes raster format like png, jpeg ' + 'or vector format geojson.') + + if format_options and not isinstance(format_options, dict): + raise MetadataValueError( + 'A dict object of parameters of the format is required.') + + if not isinstance(attribution, six.string_types): + raise MetadataValueError( + 'Attribution Should be a string literal.') + + self._metadata = dict( + name=name, + crs=crs, + scale=scale, + buffer=buffer, + stride=stride, + format=format, + format_options=format_options, + attribution=attribution, + ) + + @property + def name(self): + return self._metadata['name'] + + @property + def crs(self): + return self._metadata['crs'] + + @property + def scale(self): + return self._metadata['scale'] + + @property + def buffer(self): + return self._metadata['buffer'] * self._metadata['scale'] + + @property + def stride(self): + return self._metadata['stride'] + + @property + def format(self): + return self._metadata['format'] + + @property + def format_options(self): + return self._metadata['format_options'] + + @property + def attribution(self): + return self._metadata['attribution'] + + @property + def tag(self): + suffix = '' + if self.scale > 1: + suffix = '@%dx' % self.scale + + tag = self.name + suffix + + return tag + + def to_json(self): + return json.dumps(self._metadata) + + def __repr__(self): + return "MetadataBlock(name=%(name)r, crs=%(crs)r, " \ + "scale=%(scale)r, buffer=%(buffer)r, stride=%(stride)r, " \ + "format=%(format)r, format_options=%(format_options)r, " \ + "attribution=%(attribution)r)" % self._metadata + + +class ModeBlock(ThemeBlock): + pass + + +class CacheBlock(ThemeBlock): + pass + + +class StorageBlock(ThemeBlock): + pass + + +class DesignBlock(ThemeBlock): + pass From 8869961c8e68c83f6c23c62d7c218a0b74ff26ce Mon Sep 17 00:00:00 2001 From: ray Date: Sun, 25 Jan 2015 17:02:57 +0800 Subject: [PATCH 058/179] TEST: Add tests for MetadataBlock --- tests/stonemason/mason/theme/__init__.py | 1 + tests/stonemason/mason/theme/test_theme.py | 152 +++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 tests/stonemason/mason/theme/__init__.py create mode 100644 tests/stonemason/mason/theme/test_theme.py diff --git a/tests/stonemason/mason/theme/__init__.py b/tests/stonemason/mason/theme/__init__.py new file mode 100644 index 0000000..dae354a --- /dev/null +++ b/tests/stonemason/mason/theme/__init__.py @@ -0,0 +1 @@ +# -*- encoding: utf-8 -*- diff --git a/tests/stonemason/mason/theme/test_theme.py b/tests/stonemason/mason/theme/test_theme.py new file mode 100644 index 0000000..9db6a3f --- /dev/null +++ b/tests/stonemason/mason/theme/test_theme.py @@ -0,0 +1,152 @@ +# -*- encoding: utf-8 -*- + + +import unittest + +from stonemason.mason.theme import MetadataBlock, MetadataValueError + + +class TestMetadataBlock(unittest.TestCase): + def test_name(self): + # test default name + metadata = MetadataBlock() + self.assertEqual('default', metadata.name) + + # test specified name + metadata = MetadataBlock(name='test') + self.assertEqual('test', metadata.name) + + # test bad names + self.assertRaises(MetadataValueError, MetadataBlock, name=1) + self.assertRaises(MetadataValueError, MetadataBlock, name='4d') + self.assertRaises(MetadataValueError, MetadataBlock, name='d~~~') + + def test_crs(self): + # test default crs + metadata = MetadataBlock() + self.assertEqual('epsg:3857', metadata.crs) + + # test specified crs + metadata = MetadataBlock(crs='wgs84') + self.assertEqual('wgs84', metadata.crs) + + # test bad crs + self.assertRaises(MetadataValueError, MetadataBlock, crs=1) + + def test_scale(self): + # test default scale + metadata = MetadataBlock() + self.assertEqual(1, metadata.scale) + + # test specified scale + metadata = MetadataBlock(scale=3) + self.assertEqual(3, metadata.scale) + + # test bad scale + self.assertRaises(MetadataValueError, MetadataBlock, scale='blabla') + self.assertRaises(MetadataValueError, MetadataBlock, scale=6) + self.assertRaises(MetadataValueError, MetadataBlock, scale=0) + + def test_buffer(self): + # test default buffer + metadata = MetadataBlock() + self.assertEqual(0, metadata.buffer) + + # test specified buffer + metadata = MetadataBlock(buffer=32) + self.assertEqual(32, metadata.buffer) + + # test buffer with scale + metadata = MetadataBlock(buffer=32, scale=2) + self.assertEqual(64, metadata.buffer) + + # test bad buffer + self.assertRaises(MetadataValueError, MetadataBlock, buffer='blabla') + self.assertRaises(MetadataValueError, MetadataBlock, buffer=-1) + + def test_stride(self): + # test default stride + metadata = MetadataBlock() + self.assertEqual(1, metadata.stride) + + # test specified stride + metadata = MetadataBlock(stride=2) + self.assertEqual(2, metadata.stride) + + # test bad stride + self.assertRaises(MetadataValueError, MetadataBlock, stride='1') + self.assertRaises(MetadataValueError, MetadataBlock, stride=3) + + def test_format(self): + # test default format + metadata = MetadataBlock() + self.assertEqual('png', metadata.format) + + # test specified format + metadata = MetadataBlock(format='jpeg') + self.assertEqual('jpeg', metadata.format) + + # test bad format + self.assertRaises(MetadataValueError, MetadataBlock, format=1) + self.assertRaises(MetadataValueError, MetadataBlock, format='abc') + + def test_format_options(self): + # test default format options + metadata = MetadataBlock() + self.assertEqual(None, metadata.format_options) + + # test specified format options + metadata = MetadataBlock(format_options=dict(quality=85)) + self.assertEqual(dict(quality=85), metadata.format_options) + + # test bad format options + self.assertRaises(MetadataValueError, MetadataBlock, format_options=1) + self.assertRaises(MetadataValueError, MetadataBlock, format_options='1') + + def test_attribution(self): + # test default attribution + metadata = MetadataBlock() + self.assertEqual('', metadata.attribution) + + # test specified attribution + metadata = MetadataBlock(attribution='copyright@stonemason') + self.assertEqual('copyright@stonemason', metadata.attribution) + + # test bad attribution + self.assertRaises(MetadataValueError, MetadataBlock, attribution=1) + + def test_tag(self): + # test default tag + metadata = MetadataBlock() + self.assertEqual('default', metadata.tag) + + metadata = MetadataBlock(name='bob', scale=2) + self.assertEqual('bob@2x', metadata.tag) + + def test_to_json(self): + + metadata = MetadataBlock() + + expected = { + "crs": "epsg:3857", + "scale": 1, + "attribution": "", + "name": "default", + "format": "png", + "buffer": 0, + "format_options": None, + "stride": 1 + } + + import json + self.assertDictEqual(expected, json.loads(metadata.to_json())) + + def test_repr(self): + + metadata = MetadataBlock() + + expected = "MetadataBlock(name='default', crs='epsg:3857', scale=1, " \ + "buffer=0, stride=1, format='png', format_options=None, " \ + "attribution='')" + + self.assertEqual(expected, repr(metadata)) From a761f6e23e53e76f7a98a6dd172b1933e99761f3 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sun, 25 Jan 2015 17:27:32 +0800 Subject: [PATCH 059/179] FEATURE: Add provider.tilestorage package (still incomplete, only disk cluster storage, untested.) --- docs/index.rst | 2 +- docs/pkg_tilestorage.rst | 138 +++++++ stonemason/provider/pyramid/metatile.py | 11 +- stonemason/provider/tilestorage/__init__.py | 13 + stonemason/provider/tilestorage/cluster.py | 343 ++++++++++++++++++ stonemason/provider/tilestorage/disk.py | 219 +++++++++++ .../provider/tilestorage/tilestorage.py | 137 +++++++ tests/data/storage/19-468416-187664@8.zip | Bin 0 -> 12857 bytes tests/data/storage/4-0-0@8.zip | Bin 0 -> 894425 bytes tests/data/storage/4-4-8@2/4-4-8.txt | 1 + tests/data/storage/4-4-8@2/4-4-9.txt | 1 + tests/data/storage/4-4-8@2/4-5-9.txt | 1 + tests/data/storage/4-4-8@2/index.json | 19 + tests/data/storage/test-cluster.zip | Bin 0 -> 2054 bytes .../provider/tilestorage/__init__.py | 6 + .../provider/tilestorage/test_cluster.py | 224 ++++++++++++ 16 files changed, 1113 insertions(+), 2 deletions(-) create mode 100644 docs/pkg_tilestorage.rst create mode 100644 stonemason/provider/tilestorage/cluster.py create mode 100644 stonemason/provider/tilestorage/disk.py create mode 100644 stonemason/provider/tilestorage/tilestorage.py create mode 100644 tests/data/storage/19-468416-187664@8.zip create mode 100644 tests/data/storage/4-0-0@8.zip create mode 100644 tests/data/storage/4-4-8@2/4-4-8.txt create mode 100644 tests/data/storage/4-4-8@2/4-4-9.txt create mode 100644 tests/data/storage/4-4-8@2/4-5-9.txt create mode 100644 tests/data/storage/4-4-8@2/index.json create mode 100644 tests/data/storage/test-cluster.zip create mode 100644 tests/stonemason/provider/tilestorage/__init__.py create mode 100644 tests/stonemason/provider/tilestorage/test_cluster.py diff --git a/docs/index.rst b/docs/index.rst index 04843d7..4402a10 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -30,7 +30,6 @@ User's Guide quickstart config themes - storages API Reference ============= @@ -52,6 +51,7 @@ Tile Providers pkg_pyramid pkg_tilecache + pkg_tilestorage Utilties diff --git a/docs/pkg_tilestorage.rst b/docs/pkg_tilestorage.rst new file mode 100644 index 0000000..38713bf --- /dev/null +++ b/docs/pkg_tilestorage.rst @@ -0,0 +1,138 @@ +Tile Storage +============ + +:mod:`stonemsaon.provider.tilestorage` + +Implements persistent tile storage. + +There are two types of storage: + +- `ClusterStorage` stores a cluster of tiles as zipped file. +- `MetaTileStorage` stores raw, uncropped metatile data. + +A MetaTileStorage can be converted to a read only ClusterStorage using a +`ClusteringMixin`, but not vise vesa. + + +Exceptions +---------- + +.. autoclass:: stonemason.provider.tilestorage.TileStorageError + :members: + +.. autoclass:: stonemason.provider.tilestorage.TileClusterError + :members: + + +Tile Cluster +------------ + +.. autoclass:: stonemason.provider.tilestorage.Splitter + :members: __call__ + +.. autoclass:: stonemason.provider.tilestorage.ImageSplitter + :members: + +.. autoclass:: stonemason.provider.tilestorage.TileCluster + :members: + +Cluster Zip File Format +~~~~~~~~~~~~~~~~~~~~~~~ + + +`TileCluster` is stored as a `zip` file, zip format is chosen because +there is no easy way to read a tar.gz file on non `*nix` platforms. + +A cluster zip file contains following files:: + + z-x-y@stride.zip + +-+ + |- index.json + |- z1-x1-y1.ext + ... + |- z2-x2-y2.ext + +`z-x-y.ext` is the tile data, ``index.json`` describes the contents in +the zip file: + +.. code-block:: javascript + + { + "version": 1, + "datas": [ + "1-0-0", + "1-1-1" + ], + "tiles": { + "1-0-0": "1-0-0", + "1-0-1": "1-0-0", + "1-1-0": "1-0-0", + "1-1-1": "1-1-1" + }, + "stride": 4, + "extension": ".png", + "mimetype": application/data, + "mtime": 1421857314.309366, + "etag": "d41d8cd98f00b204e9800998ecf8427e" + } + +JSON fields: + +`version` + + Version of the index.json, always ``1`` at the time of writing. + +`datas` + + A list of tile data file name with out extension in ``z-x-y`` format. + +`tiles` + + A mapping of ``(tile_index, tile_data)``, multiple indexes can point + to same tile data if they are identical. + +`extension` + + File extension of the tile data, with the starting ``.``, the + extension is guessed from `mimetype`. + +`stride` + + Optional, stride of the metatile. + +`mimetype` + + Optional, mimetype of the metatile. + +`mtime` + + Optional, last modified time of the metattile. + + +.. note:: + + Optional fields are designed to work with legacy renders, current + cluster will always write these fields. + + +Cluster Storage +--------------- + +.. autoclass:: stonemason.provider.tilestorage.ClusterStorage + :members: + +.. autoclass:: stonemason.provider.tilestorage.NullClusterStorage + :members: + +.. autoclass:: stonemason.provider.tilestorage.DiskClusterStorage + :members: + + +MetaTile Storage +---------------- + +.. autoclass:: stonemason.provider.tilestorage.MetaTileStorage + :members: + +.. autoclass:: stonemason.provider.tilestorage.NullMetaTileStorage + :members: diff --git a/stonemason/provider/pyramid/metatile.py b/stonemason/provider/pyramid/metatile.py index f346392..4102b8a 100644 --- a/stonemason/provider/pyramid/metatile.py +++ b/stonemason/provider/pyramid/metatile.py @@ -105,12 +105,21 @@ class MetaTile(_MetaTile): Group tiles into metatile greatly reduces number of operations, so metatile is the basic unit of storage and map rendering. + `index` + Index of the metatile. + + `data` + Arbitrary binary or textual data. + `mimetype` Type of the metatile data in mimetypes format, default to ``application/data``. + `mtime` + Modify time of the metatile since EPOCH in seconds. + `etag` - Hash of the tile data. + Hash of the metatile data. `buffer` Size of extra pixels around the metatile, only meaningful for raster diff --git a/stonemason/provider/tilestorage/__init__.py b/stonemason/provider/tilestorage/__init__.py index 5e4d831..490210b 100644 --- a/stonemason/provider/tilestorage/__init__.py +++ b/stonemason/provider/tilestorage/__init__.py @@ -3,4 +3,17 @@ __author__ = 'kotaimen' __date__ = '12/26/14' +""" + stonemason.provider.tilestorage + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Persistence storage of metatiles. +""" + +from .tilestorage import TileStorageError +from .cluster import Splitter, ImageSplitter, TileCluster, \ + TileClusterError +from .tilestorage import ClusterStorage, MetaTileStorage, \ + NullClusterStorage, NullMetaTileStorage, \ + TileStorageError +from .disk import DiskClusterStorage diff --git a/stonemason/provider/tilestorage/cluster.py b/stonemason/provider/tilestorage/cluster.py new file mode 100644 index 0000000..87dc458 --- /dev/null +++ b/stonemason/provider/tilestorage/cluster.py @@ -0,0 +1,343 @@ +# -*- encoding: utf-8 -*- +from __future__ import print_function +from __future__ import unicode_literals + +__author__ = 'kotaimen' +__date__ = '1/18/15' + +""" + stonemason.provider.tilestorage.cluster + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Metatile split into Tiles. +""" + +import collections +import zipfile +import json +import mimetypes +import math + +import six + +from stonemason.util.postprocessing.gridcrop import grid_crop_into_data + +from stonemason.provider.pyramid import Tile, TileIndex, MetaTile, \ + MetaTileIndex + +from .tilestorage import TileStorageError + + +class TileClusterError(TileStorageError): + pass + + +class Splitter(object): # pragma: no cover + """Base class for metatile data splitter.""" + + def __call__(self, data, stride, buffer): + """Crop given metatile data into smaller tile data. + + :param data: Metatile data. + :type data: bytes + :param stride: Number of tiles per axis. + :type stride: int + :param buffer: Size of pixel buffer around metatile. + :type buffer: int + :return: A iterable of ``((row, column), grid_data)``. + :rtype: iterator + """ + raise NotImplementedError + + +class ImageSplitter(Splitter): + """Split metatile using grid cropper and provided format and parameters. + + Split given metatile image data into tiles by calling grid cropping. + + .. seealso:: :func:`~stonemason.util.postprocessing.gridcrop.grid_crop_into_data` and + :func:`~stonemason.util.postprocessing.gridcrop.grid_crop` + + >>> from stonemason.provider.tilestorage import ImageSplitter + >>> from PIL import Image + >>> import io + >>> image = Image.new('RGB', (768, 768)) + >>> splitter = ImageSplitter(format='JPEG', + ... parameters={'optimized':True, + ... 'quality': 60}) + >>> for (row, column), image_data in splitter(image, 2, 128): + ... grid_image = Image.open(io.BytesIO(image_data)) + ... print grid_image.format, grid_image.size + JPEG (256, 256) + JPEG (256, 256) + JPEG (256, 256) + JPEG (256, 256) + + :param format: Format of the cropped tile data. + :param parameters: Image save format parameters. + """ + + def __init__(self, format=None, parameters=None): + if parameters is None: + parameters = {} + self._format = format + self._parameters = parameters + + def __call__(self, data, stride, buffer): + return grid_crop_into_data(data, + stride=stride, + buffer_size=buffer, + format=self._format, + parameters=self._parameters) + +# The index file name +CLUSTER_ZIP_INDEX = 'index.json' +CLUSTER_ZIP_INDEX_LEGACY = 'tiles.json' +CLUSTER_ZIP_VERSION = 1 + + +def guess_extension(mimetype): + """Guess extension from mimetype, return empty string on failure. + + :func:`mimetype.guess_extension` sometimes returns different value on + python2 and python3:: + + $ python -c 'import mimetypes; print(mimetypes.guess_extension("image/tiff"))' + .tif + $ python3 -c 'import mimetypes; print(mimetypes.guess_extension("image/tiff"))' + .tiff + + """ + if mimetype is None: + return '' + + if mimetype == 'application/data': + return '.dat' + elif mimetype in ['image/jpg', 'image/jpeg']: + return '.jpg' + elif mimetype == 'image/tiff': + return '.tif' + elif mimetype == 'text/plain': + return '.txt' + + ext = mimetypes.guess_extension(mimetype) + + if ext is None: + return '' + else: + return ext + + +def guess_mimetype(extension): + """Guess mimetype from extension, return ``application/data`` on failure. + """ + + if extension is None: + return 'application/data' + + mimetype, encoding = mimetypes.guess_type('foo' + extension) + + if mimetype is None: + return 'application/data' + else: + return mimetype + + +class TileCluster(collections.namedtuple('_TileCluster', 'index tiles')): + """A cluster of `Tiles` split from a `MetaTile`. + + `TileCluster` is the base storage unit of `ClusterStorage`. + + Properties: + + `index` + :class:`~stonemason.provider.MetaTileIndex` of this cluster. + + `tiles` + List of :class:`~stonemason.provider.Tile`s in this cluster. + """ + + @staticmethod + def from_metatile(metatile, splitter=None): + """Create a `TileCluster` object from a `MetaTile`. + + Besides `metatile`, a :class:`~stonemason.provider.tilestorage.Splitter` + instance must also be provided. The splitter is used to split metatile + data into smaller tiles. + + To split a raster image tile, use included + :class:`~stonemason.provider.tilestorage.ImageSplitter` class. + + :param metatile: The metatile. + :type metatile: :class:`~stonemason.provider.tilecache.TileCluster` + :param splitter: A splitter to tansform metatile data into small tiles. + :type splitter: Splitter + :return: created cluster object. + :rtype: :class:`~stonemason.provider.tilestorage.TileCluster` + """ + assert isinstance(metatile, MetaTile) + + if splitter is None and metatile.mimetype.startswith('image/'): + splitter = ImageSplitter() + assert isinstance(splitter, Splitter) + + # calculate (row, column) index to relative left top tile + tile_indexes = dict() + for tile_index in metatile.index.fission(): + row = tile_index.x - metatile.index.x + column = tile_index.y - metatile.index.y + tile_indexes[(row, column)] = tile_index + + # reference tile index using split tile data + tiles = list() + for (row, column), data in splitter(metatile.data, + metatile.index.stride, + metatile.buffer): + tile = Tile(tile_indexes[(row, column)], + data, + mimetype=metatile.mimetype, + mtime=metatile.mtime) + tiles.append(tile) + + return TileCluster(metatile.index, tiles) + + @staticmethod + def from_zip(zip_file, metadata=None): + """Load `TileCluster` from a clustered zip file. + + :param zip_file: The zip file, can be a file name or a file like object. + :type zip_file: file + :param metadata: Extra metadata as a dict, overwriting any metadata + in the zip file. + :type metadata: dict + :return: Created cluster object. + :rtype: :class:`~stonemason.provider.tilestorage.TileCluster` + :raises: :class:`~stonemason.provider.tilestorage.TileClusterError` + """ + + try: + zip_file = zipfile.ZipFile(file=zip_file, mode='r') + + # decode the metadata + try: + index_file_info = zip_file.getinfo(CLUSTER_ZIP_INDEX) + except KeyError: + # try legacy index file name again + index_file_info = zip_file.getinfo(CLUSTER_ZIP_INDEX_LEGACY) + + index = json.loads(zip_file.read(index_file_info).decode('utf-8')) + + # read required fields + tile_datas = index['datas'] + tile_indexes = index['tiles'] + extension = index['extension'] + + # load optional fields + def load_optional_field(fieldname): + if metadata is not None and fieldname in metadata: + field = metadata[fieldname] + elif fieldname in index: + field = index[fieldname] + else: + field = None + if six.PY2: + if isinstance(field, unicode): + # make sure fields values are *not* unicode under py27 + field = field.encode('ascii') + return field + + mimetype = load_optional_field('mimetype') + if mimetype is None: + mimetype = guess_mimetype(extension) + mtime = load_optional_field('mtime') + + # load tile datas + datas = dict() + for k in tile_datas: + datas[k] = zip_file.read(k + extension) + + # create tile object + tiles = list() + for k, v in six.iteritems(tile_indexes): + z, x, y = tuple(map(int, k.split('-'))) + tile = Tile(TileIndex(z, x, y), + datas[v], + mimetype=mimetype, + mtime=mtime) + tiles.append(tile) + + # calculate stride from number of indexes + stride = load_optional_field('stride') + if stride is None: + stride = int(math.sqrt(len(tile_indexes))) + assert stride & ( stride - 1 ) == 0 + + # recreate the metatile index from any tile + sample_tile = tiles[0] + # XXX: should do some validation here on MetaTileIndex + metatile_index = MetaTileIndex(sample_tile.index.z, + sample_tile.index.x, + sample_tile.index.y, + stride) + + return TileCluster(metatile_index, tiles) + + except Exception as e: + raise # TileClusterError(repr(e)) + + def save_as_zip(self, zip_file, compressed=False): + """Save `TileCluster` as a zip file. + + .. note:: + The `compress` parameter has no real effect on most + raster image types, since they are already compressed. + ``index.json`` can be compressed but the save on space is + not worth extra CPU cycle. + + :param zip_file: A file object points to the zip file. + :param compressed: Whether to compress zip file, default is ``False``. + :raises: :class:`~stonemason.provider.tilestorage.TileClusterError` + """ + + keys = list('%d-%d-%d' % tile.index for tile in self.tiles) + hashes = list(tile.etag for tile in self.tiles) + datas = list(tile.data for tile in self.tiles) + + # key->data map for index.json + mapping = dict(zip(keys, datas)) + + # build a key->key dict and delete duplicated tile data + dedup = dict() + for i in range(len(self.tiles)): + k = keys[i] + h = hashes[i] + try: + # use first data of indexes which have same hash + j = hashes[0:i].index(h) + dedup[k] = keys[j] + del mapping[k] + except ValueError: + dedup[k] = k + + # write zipfile in memory as buffer + compression = zipfile.ZIP_DEFLATED if compressed else zipfile.ZIP_STORED + + with zipfile.ZipFile(file=zip_file, mode='w', + compression=compression) as zipobj: + + # build index.json + sample_tile = self.tiles[0] # XXX: should check all tiles + extension = guess_extension(sample_tile.mimetype) + # try keep json dump ordered + index = collections.OrderedDict([ + ('version', CLUSTER_ZIP_VERSION), + ('tiles', dedup), + ('datas', mapping.keys()), + ('extension', extension), + ('mimetype', sample_tile.mimetype), + ('stride', self.index.stride), + ('mtime', sample_tile.mtime,) + ]) + + zipobj.writestr(CLUSTER_ZIP_INDEX, json.dumps(index, indent=2)) + for k, data in six.iteritems(mapping): + zipobj.writestr(k + extension, data) diff --git a/stonemason/provider/tilestorage/disk.py b/stonemason/provider/tilestorage/disk.py new file mode 100644 index 0000000..28c9265 --- /dev/null +++ b/stonemason/provider/tilestorage/disk.py @@ -0,0 +1,219 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/23/15' + +import os +import io +import gzip +import errno +import tempfile +import sys + +from stonemason.provider.pyramid import MetaTileIndex, MetaTile, \ + Hilbert, Legacy, Pyramid + +from .cluster import guess_extension, TileCluster +from .tilestorage import ClusterStorage, \ + TileStorageError, InvalidMetaTile, InvalidMetaTileIndex + + +def hilbert_path_mode(self, prefix, index, extension): + dirs = [prefix] + dirs.extend(Hilbert.coord2dir(index.z, index.x, index.y)) + dirs.append('%d-%d-%d@%d%s' % (index.z, index.x, index.y, + index.stride, extension)) + os.pathsep + return '/'.join(dirs) + + +def legacy_path_mode(self, prefix, index, extension): + dirs = [prefix] + dirs.extend(Legacy.coord2dir(index.z, index.x, index.y)) + dirs.append('%d-%d-%d@%d%s' % (index.z, index.x, index.y, + index.stride, extension)) + return '/'.join(dirs) + + +def simple_path_mode(self, prefix, index, extension): + dirs = [prefix] + dirs.extend([str(index.z), str(index.x), str(index.y)]) + dirs.append('%d-%d-%d@%d%s' % (index.z, index.x, index.y, + index.stride, extension)) + return '/'.join(dirs) + + +PATH_MODES = dict( + simple=simple_path_mode, + legacy=legacy_path_mode, + hilbert=hilbert_path_mode, +) + + +def safe_makedirs(name, mode=0o0777): + try: + os.makedirs(name, mode) + except OSError as e: + if e.errno == errno.EEXIST: + # Ignore "already exists" error because os.makedirs + # does not check dir exists at each creation step + pass + else: + raise + + +class DiskClusterStorage(ClusterStorage): + """Store TileCluster on a filesystem (disk). + + + Parameters: + + `prefix` + Root directory of the storage, will be created if its not already exists. + Must be a writable path if the storage is not in `readonly` mode. + + `pyramid` + The :class:`~stonemason.provider.pyramid.Pyramid` of the storage + describes tile pyramid model. + + `mimetype` + Mimetype of MetaTiles stored in this storage, default value is + ``application/data``. Mimetype of MetaTiles put into the storage + must match storage mimetype. + + `extension` + Filename extension used by storage, by default, its guessed from + `mimetype`. + + `pathmode` + How directories names are calculated from metatile coordinate. + + `simple` + same as the tile api url schema, ``z/x/y.ext``. + + `hilbert` + generate a hashed directory tree using Hilbert Curve. + + `legacy` + path mode used by old `mason` codebase. + + `leagacy` and `hilbert` will limit files and subdirs under a directory + by calculating a "hash" string from tile coordinate. + The directory tree structure also groups adjacent geographical + items together, improves filesystem cache performance. + + `compressed` + Whether the cluster zip file will be compressed, default is ``False``. + + `readonly` + Whether set the storage in readonly mode, default is ``False`` + + :param prefix: Root directory of the storage. + :param pyramid: Pyramid model of the storage. + :param mimetype: Mimetype of MetaTiles. + :param extension: Optional file extension in ``.ext``. + :param pathmode: How pathname is calculated from tile coordinate. + :param compressed: Whether to compress the zip file. + :param splitter: + """ + + def __init__(self, + prefix='', + pyramid=None, + mimetype='application/data', + extension=None, + pathmode='hilbert', + compressed=False, + readonly=False, + splitter=None): + + assert isinstance(prefix, six.string_types) + assert isinstance(pyramid, Pyramid) + + self._prefix = prefix + + self._pyramid = pyramid + + if extension is None: + self._extension = guess_extension(mimetype) + else: + self._extension = extension + + self._pathmode = PATH_MODES[pathmode] + + self._compressed = compressed + + self._use_gzip = False + if self._use_gzip: + self._extension = self._extension + '.gz' + + self._readonly = readonly + + def retrieve(self, pathname): + if not os.path.exists(pathname): + # not exist + return None + + if self._use_gzip: + fp = gzip.GzipFile(pathname, 'rb') + else: + fp = open(pathname, 'rb') + + mtime = os.stat(pathname).st_mtime + return fp, dict(mimetype=None, mtime=mtime, etag=None) + + def store(self, pathname, blob, metadata): + dirname, basename = os.path.split(pathname) + + # create directory first + if not (os.path.exists(pathname) and os.path.isdir(pathname)): + safe_makedirs(dirname) + + # generate temp file name + tempname = None + for n, temp in enumerate(tempfile._get_candidate_names()): + tempname = os.path.join(dirname, '%s~%s' % (basename, temp)) + if n >= tempfile.TMP_MAX: + raise TileStorageError('Exhausted temp file name') + + # write the file + if self._use_gzip: + with gzip.GzipFile(tempname, 'wb') as fp: + fp.write(blob) + else: + with open(tempname, 'wb') as fp: + fp.write(blob) + + # move it into place + if sys.platform == 'win32': + if os.path.exists(pathname): + # os.rename is not atomic on windows + os.remove(pathname) + os.rename(tempname, pathname) + + def get(self, index): + assert isinstance(index, MetaTileIndex) + pathname = self._pathmode(self._prefix, index, self._extension) + blob, metadata = self.retrieve(pathname) + return TileCluster.from_zip(blob, metadata=metadata) + + def put(self, metatile): + assert isinstance(metatile, MetaTile) + pathname = self._pathmode(self._prefix, metatile.index, self._extension) + metadata = dict(mimetype=metatile.mimetype, + mtime=metatile.mtime, + etag=metatile.etag) + + TileCluster.from_metatile() + self.store(pathname, metatile.data, metadata) + + def retire(self, index): + pathname = self._pathmode(self._prefix, index, self._extension) + try: + os.unlink(pathname) + except OSError as e: + if e.errno == errno.ENOENT: + # file not found, ignore + pass + else: + raise diff --git a/stonemason/provider/tilestorage/tilestorage.py b/stonemason/provider/tilestorage/tilestorage.py new file mode 100644 index 0000000..25eced5 --- /dev/null +++ b/stonemason/provider/tilestorage/tilestorage.py @@ -0,0 +1,137 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/18/15' + +""" + stonemason.provider.tilestorage.tilestorage + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Persistence storage of tiles. +""" + + +class TileStorageError(Exception): + pass + + +class InvalidMetaTileIndex(TileStorageError): + pass + + +class InvalidMetaTile(TileStorageError): + pass + + +class ReadonlyStorage(TileStorageError): + pass + + +class ClusterStorage(object): # pragma: no cover + """Homologous persistence storage of `TileCluster`. + + Homologous means single storage can only store single type of TileClusters. + All MetaTiles put into the storage must have same `mimetype`, `stride` and + `buffering`. + """ + + def get(self, index): + """Retrieve a `TileCluster` from the storage. + + Retrieve a `TileCluster` from the storage, returns ``None`` if its not + found ind the storage + + :param index: MetaTile index of the tile cluster. + :type index: :class:`~stonemason.provider.tilestorage.MetaTileIndex` + :returns: Retrieved TileCluster. + :rtype: :class:`~stonemason.provider.tilestorage.TileCluster` or ``None`` + """ + raise NotImplementedError + + def put(self, metatile): + """Store a `MetaTile` in the storage as `TileCluster`. + + Store a `MetaTile` in the storage as `TileCluster`, overriding + any existing one. + + :param metatile: MetaTile to store. + :type metatile: :class:`~stonemason.provider.pyramid.MetaTile` + """ + + raise NotImplementedError + + def retire(self, index): + """Delete `TileCluster` with given index. + + If `TileCluster` does not present in cache, this operation has no effect. + + + :param index: MetaTile index of the TileCluster. + :type index: :class:`~stonemason.provider.tilestorage.MetaTileIndex` + """ + raise NotImplementedError + + +class MetaTileStorage(object): # pragma: no cover + """Persistence storage of `MetaTile`.""" + + def get(self, index): + """Retrieve a `MetaTile` from the storage. + + Retrieve a `MetaTile` from the storage, returns ``None`` if its not + found ind the storage + + :param index: MetaTile index of the MetaTile. + :type index: :class:`~stonemason.provider.tilestorage.MetaTileIndex` + :returns: Retrieved tile cluster. + :rtype: :class:`~stonemason.provider.tilestorage.MetaTile` + """ + raise NotImplementedError + + def put(self, metatile): + """Store a `MetaTile` in the storage. + + Store a `MetaTile` in the storage, overriding any existing one. + + :param metatile: MetaTile to store. + :type metatile: :class:`~stonemason.provider.pyramid.MetaTile` + """ + + raise NotImplementedError + + def retire(self, index): + """Delete `MetaTile` with given index. + + If `MetaTile` does not present in cache, this operation has no effect. + + + :param index: MetaTile index of the tile cluster. + :type index: :class:`~stonemason.provider.tilestorage.MetaTileIndex` + """ + raise NotImplementedError + + +class NullClusterStorage(ClusterStorage): + """A storage stores nothing.""" + + def get(self, index): + return None + + def put(self, metatile): + return + + def retire(self, index): + return + + +class NullMetaTileStorage(MetaTileStorage): + """A storage stores nothing.""" + + def get(self, index): + return None + + def put(self, metatile): + return + + def retire(self, index): + return diff --git a/tests/data/storage/19-468416-187664@8.zip b/tests/data/storage/19-468416-187664@8.zip new file mode 100644 index 0000000000000000000000000000000000000000..ab1ecaa8fec395ce327b13a9b3f195021105bcad GIT binary patch literal 12857 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 Np9LFW;%wsEe*r^!0kHr8 literal 0 HcmV?d00001 diff --git a/tests/data/storage/4-0-0@8.zip b/tests/data/storage/4-0-0@8.zip new file mode 100644 index 0000000000000000000000000000000000000000..733f0a3f71c67de47997be9b2ef7e3219fbf469e GIT binary patch literal 894425 zcmb5VWmKC@xHTNyCAd2j3vNYAA-GGScyWi|S}0K5Dei8?-P+<-97=JgxVw}O&S`si z*YoSUN!Hr;p3Tf9Ggl^)L`fC~76^1rzi3w=VW1R;>cp@XlLt* zOhG~QKetr;6i+vgw_G4z5bxvdAHe*Vv*grOKJ-6X8?*HrC6L_ZmV*}T7 z8@T?);R!s`{)rja|7*jaIB-3W1J~cYJ%N8c@c#AU3H)O@|K{xp{9}3l+VBLPv44Ey zeeN6kqUTJ{8I@6JY)aNb&ls=aQyZ72|UyO8I9w4E;# z&%NOIo1rK0Ps{nYhbQoi{WGIDpL@ai*W)MfPs{r^7f;|H%lUV-C-9Hu`P;)2c*g#T zFVAxuc>d<%3H;M?{$-!QKbGfj)StjJ_RoCac^-A1zxFon|wEtG*r#k&_fd5qGXD!bn^i+fYweUXo@jr$3 zpX@(n^;yd^7ynZ`pUIvX`kw;%Pxha3_^job)&Hq^&t%W$<9`a

{-|UsTTia|EUenTArEnp91ht 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 Gt0MaMzkNxIn9w>SkzYZVnasl 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:TuA1&oI)0Q0@Zu(B6Iv* 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

j|!d_NxS}34JSk-Ue8@0%pNwllzcaU^t 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 z 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"`Pd@@20N*)QuI^U|+xS(=eGt)-*H_UII#(U<% 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 &Q_lR)kEILJ165jlDbUll#?p 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

cG`t$M=(Iin8ObB&NSbrpKx|UUD@d9vO+g2gTor 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 + + + + + + -

+ + + + +
+ +
+ + {% for theme in themes %} + +
+

+ + {{ theme['tag'] }} {{ theme['metadata']['version'] }} + +

+ +

{{ theme['metadata']['description'] }}

+ +

©{{ + theme['metadata']['attribution'] }}

+
+ + {% endfor %} + +
+ +
+ + + + + - - diff --git a/stonemason/service/tileserver/templates/map.html b/stonemason/service/tileserver/templates/map.html new file mode 100644 index 0000000..233aede --- /dev/null +++ b/stonemason/service/tileserver/templates/map.html @@ -0,0 +1,48 @@ + + + + + + + + Stonemason {{ theme.tag|upper }} + + + + + + + + + +
+ + + + + + + + diff --git a/stonemason/service/tileserver/tileserver.py b/stonemason/service/tileserver/tileserver.py index ec1d91f..cf6ba21 100644 --- a/stonemason/service/tileserver/tileserver.py +++ b/stonemason/service/tileserver/tileserver.py @@ -7,8 +7,10 @@ """ import os +from logging import StreamHandler, Formatter import six +from werkzeug.http import http_date from flask import Flask, render_template, abort, make_response from flask.views import MethodView from flask.json import jsonify @@ -47,10 +49,10 @@ def get(self, tag): """ if tag is None: - themes = self._mason.list_metadata() + themes = self._mason.themes() return jsonify(result=themes) else: - theme = self._mason.get_metadata(tag) + theme = self._mason.get_theme(tag) return jsonify(result=theme) @@ -117,15 +119,32 @@ def get(self, tag, z, x, y, scale, ext): abort(404) response = make_response(tile.data) + + # set response headers response.headers['Content-Type'] = tile.mimetype + response.headers['ETag'] = tile.etag + response.headers['Last-Modified'] = http_date(tile.mtime) + response.headers['Cache-Control'] = 'public, max-age=86400' return response -def home(): - import stonemason +class MapAPI(MethodView): + def __init__(self, mason): + MethodView.__init__(self) + self._mason = mason + + def get(self, tag): + return render_template('map.html', theme=self._mason.get_theme(tag)) + + +class Home(MethodView): + def __init__(self, mason): + MethodView.__init__(self) + self._mason = mason - return render_template('index.html', version=stonemason.__version__) + def get(self): + return render_template('index.html', themes=self._mason.themes()) class TileServerApp(Flask): @@ -178,11 +197,8 @@ def __init__(self, config=None, **kwargs): static_folder=os.path.join(package_root, 'static'), instance_relative_config=True) - # load configs - self._load_config(config) - - # update config with application arguments - self.config.update(kwargs) + # load configs and parameters + self._load_config(config, **kwargs) # initialize mason self._mason = Mason() @@ -193,9 +209,16 @@ def __init__(self, config=None, **kwargs): # XXX: Just a sample index page self.add_url_rule(rule='/', - view_func=home, + view_func=Home.as_view('home', self._mason), methods=['GET']) + map_view = MapAPI.as_view('map_api', self._mason) + self.add_url_rule( + rule='/maps/', + view_func=map_view, + methods=['GET'] + ) + # TODO: Move APIs to a separate BluePrint theme_view = ThemeAPI.as_view('theme_api', self._mason) self.add_url_rule( @@ -223,7 +246,7 @@ def __init__(self, config=None, **kwargs): methods=['GET'] ) - def _load_config(self, config): + def _load_config(self, config, **kwargs): # config from default values self.config.from_object(default_settings) @@ -231,8 +254,45 @@ def _load_config(self, config): if config is not None: self.config.from_pyfile(config, silent=True) + # config from environment variables for key, val in six.iteritems(os.environ): if key.startswith(self.ENV_PARAM_PREFIX): - self.logger.info('Loading %s=%s' % (key, val)) self.config[key] = val + + # config from command-line options + self.config.update(kwargs) + + # log debug info + if self.config.get('STONEMASON_DEBUG'): + self.config['DEBUG'] = True + + if self.config.get('STONEMASON_VERBOSE') is not None: + try: + verbosity = int(self.config['STONEMASON_VERBOSE']) + except ValueError: + verbosity = 0 + + # create a log handler for none debug use + if verbosity > 0: + class VerboseHandler(StreamHandler): + def emit(x, record): + StreamHandler.emit(x, record) + + handler = VerboseHandler() + handler.setLevel('INFO') + handler.setFormatter(Formatter(self.debug_log_format)) + + self.logger.addHandler(handler) + self.logger.setLevel('INFO') + + if config is not None: + self.logger.info('LOADED CONFIG: filename=%s' % + os.path.join(self.instance_path, config)) + + for key, val in six.iteritems(os.environ): + if key.startswith(self.ENV_PARAM_PREFIX): + self.logger.info('LOADED ENV PARAM: %s=%s' % (key, val)) + + for key, val in six.iteritems(kwargs): + self.logger.info('Loading CMD PARAM: %s=%s' % (key, val)) diff --git a/tests/stonemason/mason/test_mason.py b/tests/stonemason/mason/test_mason.py index 0cc6e7d..769d23b 100644 --- a/tests/stonemason/mason/test_mason.py +++ b/tests/stonemason/mason/test_mason.py @@ -26,7 +26,7 @@ def test_load_theme_from_directory(self): self.assertIsNone( self._mason.get_tile('antique', 0, 0, 0, 1, 'png')) - def test_get_metadata(self): + def test_get_theme(self): self._mason.load_theme_from_file(SAMPLE_THEME) expected = { @@ -43,7 +43,7 @@ def test_get_metadata(self): } } - m = self._mason.get_metadata('antique') + m = self._mason.get_theme('antique') self.assertEqual('antique', m['tag']) - self.assertEqual('I am a sample.', m['metadata']['attribution']) + self.assertEqual('K&R', m['metadata']['attribution']) diff --git a/tests/stonemason/mason/theme/test_theme.py b/tests/stonemason/mason/theme/test_theme.py index da382e2..12e9d0f 100644 --- a/tests/stonemason/mason/theme/test_theme.py +++ b/tests/stonemason/mason/theme/test_theme.py @@ -22,6 +22,18 @@ def test_description(self): m = MetadataConfig(description='a sample') self.assertEqual('a sample', m.description) + def test_thumbnail(self): + m = MetadataConfig(thumbnail='http://example.com/1.jpeg') + self.assertEqual('http://example.com/1.jpeg', m.thumbnail) + + def test_center(self): + m = MetadataConfig(center=[1, 1]) + self.assertEqual([1, 1], m.center) + + def test_center_zoom(self): + m = MetadataConfig(center_zoom=5) + self.assertEqual(5, m.center_zoom) + class TestPyramidConfig(unittest.TestCase): def test_default(self): @@ -92,7 +104,7 @@ def test_sample_theme(self): theme = parser.read_from_file(SAMPLE_THEME)[0] self.assertEqual('antique', theme.name) - self.assertEqual('I am a sample.', theme.metadata.attribution) + self.assertEqual('K&R', theme.metadata.attribution) self.assertEqual(range(0, 23), theme.pyramid.levels) self.assertEqual(16, theme.pyramid.stride) From 9f98a809a95b67257a2666ec7ebdcec59b789faf Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Fri, 13 Feb 2015 17:00:21 +0800 Subject: [PATCH 115/179] FEATURE: Use gunicorn as tileserver in non debug mode --- requirements.txt | 1 + setup.py | 1 + stonemason/__main__.py | 81 +++++++++++++++++++++++++++++++++++------- 3 files changed, 71 insertions(+), 12 deletions(-) diff --git a/requirements.txt b/requirements.txt index 97f4f48..3e27038 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ Pillow>=2.3.0 pylibmc>=1.4.0 boto>=2.35.0 Click>=3.0.0 +gunicorn>=19.0.0 diff --git a/setup.py b/setup.py index 2068377..298aa65 100644 --- a/setup.py +++ b/setup.py @@ -54,6 +54,7 @@ def find_version(*file_paths): 'pylibmc>=1.4.0', 'boto>=2.35.0', 'Click>=3.0.0', + 'gunicorn>=19.0.0', ] tests_require = [ diff --git a/stonemason/__main__.py b/stonemason/__main__.py index 7aef880..0b5e216 100755 --- a/stonemason/__main__.py +++ b/stonemason/__main__.py @@ -6,12 +6,20 @@ __author__ = 'kotaimen' __date__ = '2/3/15' -import sys import os +import sys +import multiprocessing + import click import six -# NOTE: click will add "_" between prefix and variable, but flask don't... +import gunicorn.app.base + +# +# Click contexts +# + +# NOTE: click add "_" between prefix and variable, but Flask don't... ENVVAR_PREFIX = 'STONEMASON' CONTEXT_SETTINGS = dict( @@ -32,6 +40,27 @@ def __init__(self): pass_context = click.make_pass_decorator(Context) + +# +# Gunicorn based standalone server +# + +class TileServer(gunicorn.app.base.BaseApplication): + def __init__(self, app, options=None): + self.options = options or {} + self.application = app + super(TileServer, self).__init__() + + def load_config(self): + config = dict( + [(key, value) for key, value in six.iteritems(self.options) + if key in self.cfg.settings and value is not None]) + for key, value in six.iteritems(config): + self.cfg.set(key.lower(), value) + + def load(self): + return self.application + # # Main entry # @@ -42,7 +71,7 @@ def __init__(self): @click.option('--debug/--no-debug', default=False, help='debug mode.') @click.option('-v', '--verbose', default=False, count=True, help='being verbose.') -@click.option('--themes', type=click.Path(exists=False), required=True, +@click.option('-t', '--themes', type=click.Path(exists=False), required=True, help='themes root directory, can be overridden using envvar ' 'STONEMASON_THEMES.') @click.version_option(stonemason.__version__, message='Stonemason %(version)s') @@ -63,10 +92,14 @@ def cli(ctx, debug, verbose, themes): @cli.command('tileserver', short_help='frontend tile server.') @click.option('-b', '--bind', default='127.0.0.1:7086', type=str, help='address and port to bind to') +@click.option('-w', '--workers', default=0, type=click.IntRange(0, None), + help='number of worker processes, default is cpu_num * 2') +@click.option('--threads', default=1, type=click.IntRange(1, None), + help='number of worker threads per process, default is 1') @click.option('--read-only', is_flag=True, help='start the server in read only mode', ) @pass_context -def tile_server(ctx, bind, read_only): +def tile_server(ctx, bind, read_only, workers, threads): """Starts tile server using given themes root.""" assert isinstance(ctx, Context) @@ -77,19 +110,33 @@ def tile_server(ctx, bind, read_only): host, port = bind.split(':') port = int(port) - config = { + app_config = { 'THEMES': ctx.themes, 'READ_ONLY': read_only, 'DEBUG': ctx.debug, 'VERBOSITY': ctx.verbosity } # add prefix to all config keys to confront with flask config - config = dict((ENVVAR_PREFIX + '_' + k, v) - for (k, v) in six.iteritems(config)) - - app = TileServerApp(**config) - app.run(host=host, port=port, - debug=ctx.debug) + app_config = dict((ENVVAR_PREFIX + '_' + k, v) + for (k, v) in six.iteritems(app_config)) + + # Flask based WSGI application + app = TileServerApp(**app_config) + + if ctx.debug: + # run Flask server in debug mode + app.run(host=host, port=port, debug=ctx.debug) + else: + # otherwise, start gunicorn server + if workers == 0: + workers = multiprocessing.cpu_count() * 2 + options = dict( + workers=workers, + threads=threads, + bind=bind, + ) + server = TileServer(app, options) + server.run() # @@ -97,11 +144,21 @@ def tile_server(ctx, bind, read_only): # @cli.command('init', short_help='init themes root.') @pass_context -def tile_server(ctx, sample): +def init_theme(ctx, sample): click.secho('Initializing themes root at %s...' % ctx.themes) # TODO: Init theme root +# +# Theme Root Init Command +# +@cli.command('check', short_help='check theme configuration.') +@pass_context +def check_config(ctx, sample): + click.secho('Checking themes configuration at %s...' % ctx.themes) + # TODO: Check config + + if __name__ == '__main__': cli() From 76d5c6b55785e21eac5ece76fde92025d0ea84b2 Mon Sep 17 00:00:00 2001 From: ray Date: Fri, 13 Feb 2015 17:24:07 +0800 Subject: [PATCH 116/179] FIX: Enable '@' character in theme name --- stonemason/mason/theme/theme.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/stonemason/mason/theme/theme.py b/stonemason/mason/theme/theme.py index 9fe7425..2a07de2 100644 --- a/stonemason/mason/theme/theme.py +++ b/stonemason/mason/theme/theme.py @@ -85,8 +85,8 @@ class Theme(_Theme): A string literal that uniquely identify a theme. A valid theme name should start with an alphabet character and only contain alphanumeric - character and the underscore. This is equivalent to the regular - expression :regexp:`^[a-zA-Z][a-zA-Z0-9_]+`. + character, the underscore and the '@' character. This is equivalent to + the regular expression :regexp:`^[a-zA-Z][a-zA-Z0-9@_]*$`. :type metadata: :class:`~stonemason.mason.theme.MetadataConfig` :param metadata: @@ -120,10 +120,11 @@ def __new__(cls, name=None, metadata=None, if name is None: raise ThemeError('A Theme must have a Name!') - if not re.match('^[a-zA-Z]\w*$', name): + if not re.match('^[a-zA-Z][a-zA-Z0-9@_]*$', name): raise ThemeError( - """A valid theme name should start with an alphabet character - and only contain alphanumeric character and the underscore.""") + """A valid theme name should start with an alphabet character + and only contain alphanumeric character, the underscore and + the '@' character.""") if metadata is None: metadata = MetadataConfig() From 508f67bfcb43ec620dec32345542fd02886fdbf7 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Fri, 13 Feb 2015 17:34:44 +0800 Subject: [PATCH 117/179] FIX: Also limit min zoom in maps --- stonemason/service/tileserver/templates/map.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/stonemason/service/tileserver/templates/map.html b/stonemason/service/tileserver/templates/map.html index 233aede..7bcfa06 100644 --- a/stonemason/service/tileserver/templates/map.html +++ b/stonemason/service/tileserver/templates/map.html @@ -38,7 +38,10 @@ L.tileLayer('/tiles/{{ theme.tag }}/{z}/{x}/{y}.jpg', { attribution: "{{ theme.metadata.attribution }}", - maxZoom: {{ theme.pyramid.levels|last }} + minZoom: {{ theme.pyramid.levels|first }}, + maxZoom: {{ theme.pyramid.levels|last }}, + detectRetina: true, + }).addTo(map); From 651b41693c873cd68ed9f3a14c316f60b25f2323 Mon Sep 17 00:00:00 2001 From: ray Date: Fri, 13 Feb 2015 17:40:38 +0800 Subject: [PATCH 118/179] FEATURE: Add health check for tileserver --- docs/service_tileserver.rst | 29 +++++++++++++++++++++ stonemason/service/tileserver/tileserver.py | 14 +++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/docs/service_tileserver.rst b/docs/service_tileserver.rst index cba9b8c..2eb07da 100644 --- a/docs/service_tileserver.rst +++ b/docs/service_tileserver.rst @@ -180,3 +180,32 @@ Retrieve Map :status 200: No error. :status 404: No such map. + + +Health Check +------------ + +.. http:get:: /health_check + + Check availability of the tile server. + + **Example request**: + + .. code-block:: http + + GET /health_check HTTP/1.1 + Host: example.com + Accept: */* + + **Example response**: + + .. code-block:: http + + HTTP/1.1 200 OK + Content-Type: text/plain + Cache-Control: private, max-age=0 + + :resheader Content-Type: Plain text. + :resheader Cache-Control: Do not cache. + + :status 200: No error. diff --git a/stonemason/service/tileserver/tileserver.py b/stonemason/service/tileserver/tileserver.py index cf6ba21..a7ba593 100644 --- a/stonemason/service/tileserver/tileserver.py +++ b/stonemason/service/tileserver/tileserver.py @@ -147,6 +147,13 @@ def get(self): return render_template('index.html', themes=self._mason.themes()) +def health_check(): + response = make_response() + response.headers['Content-Type'] = 'text/plain' + response.headers['Cache-Control'] = 'public, max-age=0' + return response + + class TileServerApp(Flask): """StoneMason tile server application. @@ -207,11 +214,16 @@ def __init__(self, config=None, **kwargs): theme_dir = self.config.get('STONEMASON_THEMES') self._mason.load_theme_from_directory(theme_dir) - # XXX: Just a sample index page + # A list of available maps self.add_url_rule(rule='/', view_func=Home.as_view('home', self._mason), methods=['GET']) + # health check + self.add_url_rule(rule='/health_check', + view_func=health_check, + methods=['GET']) + map_view = MapAPI.as_view('map_api', self._mason) self.add_url_rule( rule='/maps/', From 01e70fbdaf5cf327a5073b6c18b43650cc657e63 Mon Sep 17 00:00:00 2001 From: ray Date: Sat, 14 Feb 2015 00:59:37 +0800 Subject: [PATCH 119/179] FIX: Use [lon, lat] for map center in sample config instead of a [lat, lon] pattern in leaflet --- stonemason/mason/theme/samples/sample_theme.json | 2 +- stonemason/service/tileserver/templates/map.html | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/stonemason/mason/theme/samples/sample_theme.json b/stonemason/mason/theme/samples/sample_theme.json index e07caa6..91e52a3 100644 --- a/stonemason/mason/theme/samples/sample_theme.json +++ b/stonemason/mason/theme/samples/sample_theme.json @@ -5,7 +5,7 @@ "description": "Daniel Reeve's Map of Middle-earth is well known to fans of The Lord of the Rings. So we took his idea and made this parchment map of our own earth. Be careful, Sea monsters are waiting for you if you dig deep into sea.", "attribution": "K&R", "thumbnail": "https://raw.githubusercontent.com/Kotaimen/maps-ModernAntique/master/sample.jpg", - "center": [35.71, 139.79], + "center": [139.79, 35.71], "center_zoom": 6 }, diff --git a/stonemason/service/tileserver/templates/map.html b/stonemason/service/tileserver/templates/map.html index 7bcfa06..db1c84e 100644 --- a/stonemason/service/tileserver/templates/map.html +++ b/stonemason/service/tileserver/templates/map.html @@ -3,7 +3,8 @@ - + Stonemason {{ theme.tag|upper }} @@ -34,7 +35,12 @@ From efb10d5e087cf3954acb427f402d3d96c0256acf Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 14 Feb 2015 19:06:58 +0800 Subject: [PATCH 120/179] CHORE: Bump up version to dev1 --- stonemason/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stonemason/__init__.py b/stonemason/__init__.py index f277565..614c93a 100644 --- a/stonemason/__init__.py +++ b/stonemason/__init__.py @@ -11,7 +11,7 @@ """ # Version used in the setup.py -__version__ = '0.0.1.dev0' +__version__ = '0.0.1.dev1' # Prevent nosetests peek into this package __test__ = False From 5d458bbd1ff312d9acb77cb85081d543b66e9784 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 14 Feb 2015 19:07:19 +0800 Subject: [PATCH 121/179] FIX: Also allows list as pyramid boundary parameter --- stonemason/provider/pyramid/pyramid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stonemason/provider/pyramid/pyramid.py b/stonemason/provider/pyramid/pyramid.py index 6cc1828..a3f0977 100644 --- a/stonemason/provider/pyramid/pyramid.py +++ b/stonemason/provider/pyramid/pyramid.py @@ -84,7 +84,7 @@ def __new__(cls, levels = list(levels) assert isinstance(levels, list) assert isinstance(stride, int) and stride & ( stride - 1 ) == 0 - assert isinstance(boundary, tuple) and len(boundary) == 4 + assert isinstance(boundary, (tuple, list)) and len(boundary) == 4 assert isinstance(crs, six.string_types) assert isinstance(proj, six.string_types) From 6808b0f3435eebde4e5dbbd47b8d90b05f56a5c2 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Sat, 14 Feb 2015 19:07:54 +0800 Subject: [PATCH 122/179] FEATURE: Cleanup tileserver html template, use panels for better visual (as for now) --- .../service/tileserver/templates/index.html | 67 ++++++++++++++----- .../service/tileserver/templates/map.html | 2 +- 2 files changed, 50 insertions(+), 19 deletions(-) diff --git a/stonemason/service/tileserver/templates/index.html b/stonemason/service/tileserver/templates/index.html index 5f229c2..e73d86b 100644 --- a/stonemason/service/tileserver/templates/index.html +++ b/stonemason/service/tileserver/templates/index.html @@ -5,7 +5,7 @@ - Stonemason Tile Server + Stonemason - Stonemason Console + Stonemason Tile Server Console @@ -55,29 +55,60 @@ {% for theme in themes %} -
-

- - {{ theme['tag'] }} {{ theme['metadata']['version'] }} - -

+
+
+ +
+

+

{{ theme.tag }} + {{ theme.metadata.version }} + + + +

+

+
+ +
+

+ {{ theme.metadata.description}} +

+
+ + + + + + + + {% for key, value in theme.pyramid.iteritems() %} + + + + + {% endfor %} +
KeyValue
{{ key }}{{ value }}
+ + +
-

{{ theme['metadata']['description'] }}

-

©{{ - theme['metadata']['attribution'] }}

- {% endfor %} -
- - - - - + + + diff --git a/stonemason/service/tileserver/templates/map.html b/stonemason/service/tileserver/templates/map.html index 7bcfa06..16dd054 100644 --- a/stonemason/service/tileserver/templates/map.html +++ b/stonemason/service/tileserver/templates/map.html @@ -5,7 +5,7 @@ - Stonemason {{ theme.tag|upper }} + Stonemason - {{ theme.tag }} Date: Sat, 14 Feb 2015 23:44:12 +0800 Subject: [PATCH 123/179] FIX: Navibar and panel heading styles --- .../service/tileserver/templates/index.html | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/stonemason/service/tileserver/templates/index.html b/stonemason/service/tileserver/templates/index.html index e73d86b..b2aaa3d 100644 --- a/stonemason/service/tileserver/templates/index.html +++ b/stonemason/service/tileserver/templates/index.html @@ -21,8 +21,8 @@ -
-
- - + +
@@ -59,18 +57,22 @@
-

-

{{ theme.tag }} - {{ theme.metadata.version }} +

+

+ {{ theme.tag }}

-

+ + + {{ theme.metadata.version }} + +
@@ -80,14 +82,9 @@

- - - - - {% for key, value in theme.pyramid.iteritems() %} - + {% endfor %} From 6fbb7aff70a8fc4bbd4bbcd6480d6b6951e320d6 Mon Sep 17 00:00:00 2001 From: ray Date: Sun, 15 Feb 2015 12:17:26 +0800 Subject: [PATCH 124/179] FEATURE: Implements photo wall like admin interface --- .../tileserver/static/js/salvattore.min.js | 7 ++ .../service/tileserver/templates/index.html | 68 +++++++++++++++---- 2 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 stonemason/service/tileserver/static/js/salvattore.min.js diff --git a/stonemason/service/tileserver/static/js/salvattore.min.js b/stonemason/service/tileserver/static/js/salvattore.min.js new file mode 100644 index 0000000..b53f52d --- /dev/null +++ b/stonemason/service/tileserver/static/js/salvattore.min.js @@ -0,0 +1,7 @@ +/*! + * Salvattore 1.0.5 by @rnmp and @ppold + * https://github.com/rnmp/salvattore + */ +!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():e.salvattore=t()}(this,function(){/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */ +window.matchMedia||(window.matchMedia=function(){"use strict";var e=window.styleMedia||window.media;if(!e){var t=document.createElement("style"),n=document.getElementsByTagName("script")[0],r=null;t.type="text/css",t.id="matchmediajs-test",n.parentNode.insertBefore(t,n),r="getComputedStyle"in window&&window.getComputedStyle(t,null)||t.currentStyle,e={matchMedium:function(e){var n="@media "+e+"{ #matchmediajs-test { width: 1px; } }";return t.styleSheet?t.styleSheet.cssText=n:t.textContent=n,"1px"===r.width}}}return function(t){return{matches:e.matchMedium(t||"all"),media:t||"all"}}}()),/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */ +function(){"use strict";if(window.matchMedia&&window.matchMedia("all").addListener)return!1;var e=window.matchMedia,t=e("only all").matches,n=!1,r=0,a=[],i=function(){clearTimeout(r),r=setTimeout(function(){for(var t=0,n=a.length;n>t;t++){var r=a[t].mql,i=a[t].listeners||[],o=e(r.media).matches;if(o!==r.matches){r.matches=o;for(var c=0,l=i.length;l>c;c++)i[c].call(window,r)}}},30)};window.matchMedia=function(r){var o=e(r),c=[],l=0;return o.addListener=function(e){t&&(n||(n=!0,window.addEventListener("resize",i,!0)),0===l&&(l=a.push({mql:o,listeners:c})),c.push(e))},o.removeListener=function(e){for(var t=0,n=c.length;n>t;t++)c[t]===e&&c.splice(t,1)},o}}(),function(){"use strict";for(var e=0,t=["ms","moz","webkit","o"],n=0;n *:nth-child("+c+"n-"+d+")",s.push(r.querySelectorAll(a));s.forEach(function(e){var n=t.createElement("div"),r=t.createDocumentFragment();n.className=l.join(" "),Array.prototype.forEach.call(e,function(e){r.appendChild(e)}),n.appendChild(r),u.appendChild(n)}),e.appendChild(u),o(e,"columns",c)},n.removeColumns=function(n){var r=t.createRange();r.selectNodeContents(n);var a=Array.prototype.filter.call(r.extractContents().childNodes,function(t){return t instanceof e.HTMLElement}),i=a.length,c=a[0].childNodes.length,l=new Array(c*i);Array.prototype.forEach.call(a,function(e,t){Array.prototype.forEach.call(e.children,function(e,n){l[n*i+t]=e})});var s=t.createElement("div");return o(s,"columns",0),l.filter(function(e){return!!e}).forEach(function(e){s.appendChild(e)}),s},n.recreateColumns=function(t){e.requestAnimationFrame(function(){n.addColumns(t,n.removeColumns(t));var e=new CustomEvent("columnsChange");t.dispatchEvent(e)})},n.mediaQueryChange=function(e){e.matches&&Array.prototype.forEach.call(r,n.recreateColumns)},n.getCSSRules=function(e){var t;try{t=e.sheet.cssRules||e.sheet.rules}catch(n){return[]}return t||[]},n.getStylesheets=function(){return Array.prototype.concat.call(Array.prototype.slice.call(t.querySelectorAll("style[type='text/css']")),Array.prototype.slice.call(t.querySelectorAll("link[rel='stylesheet']")))},n.mediaRuleHasColumnsSelector=function(e){var t,n;try{t=e.length}catch(r){t=0}for(;t--;)if(n=e[t],n.selectorText&&n.selectorText.match(/\[data-columns\](.*)::?before$/))return!0;return!1},n.scanMediaQueries=function(){var t=[];if(e.matchMedia){n.getStylesheets().forEach(function(e){Array.prototype.forEach.call(n.getCSSRules(e),function(e){e.media&&e.cssRules&&n.mediaRuleHasColumnsSelector(e.cssRules)&&t.push(e)})});var r=a.filter(function(e){return-1===t.indexOf(e)});i.filter(function(e){return-1!==r.indexOf(e.rule)}).forEach(function(e){e.mql.removeListener(n.mediaQueryChange)}),i=i.filter(function(e){return-1===r.indexOf(e.rule)}),t.filter(function(e){return-1==a.indexOf(e)}).forEach(function(t){var r=e.matchMedia(t.media.mediaText);r.addListener(n.mediaQueryChange),i.push({rule:t,mql:r})}),a.length=0,a=t}},n.rescanMediaQueries=function(){n.scanMediaQueries(),Array.prototype.forEach.call(r,n.recreateColumns)},n.nextElementColumnIndex=function(e,t){var n,r,a,i=e.children,o=i.length,c=0,l=0;for(a=0;o>a;a++)n=i[a],r=n.children.length+(t[a].children||t[a].childNodes).length,0===c&&(c=r),c>r&&(l=a,c=r);return l},n.createFragmentsList=function(e){for(var n=new Array(e),r=0;r!==e;)n[r]=t.createDocumentFragment(),r++;return n},n.appendElements=function(e,t){var r=e.children,a=r.length,i=n.createFragmentsList(a);Array.prototype.forEach.call(t,function(t){var r=n.nextElementColumnIndex(e,i);i[r].appendChild(t)}),Array.prototype.forEach.call(r,function(e,t){e.appendChild(i[t])})},n.prependElements=function(e,r){var a=e.children,i=a.length,o=n.createFragmentsList(i),c=i-1;r.forEach(function(e){var t=o[c];t.insertBefore(e,t.firstChild),0===c?c=i-1:c--}),Array.prototype.forEach.call(a,function(e,t){e.insertBefore(o[t],e.firstChild)});for(var l=t.createDocumentFragment(),s=r.length%i;0!==s--;)l.appendChild(e.lastChild);e.insertBefore(l,e.firstChild)},n.registerGrid=function(a){if("none"!==e.getComputedStyle(a).display){var i=t.createRange();i.selectNodeContents(a);var c=t.createElement("div");c.appendChild(i.extractContents()),o(c,"columns",0),n.addColumns(a,c),r.push(a)}},n.init=function(){var e=t.createElement("style");e.innerHTML="[data-columns]::before{visibility:hidden;position:absolute;font-size:1px;}",t.head.appendChild(e);var r=t.querySelectorAll("[data-columns]");Array.prototype.forEach.call(r,n.registerGrid),n.scanMediaQueries()},n.init(),{appendElements:n.appendElements,prependElements:n.prependElements,registerGrid:n.registerGrid,recreateColumns:n.recreateColumns,rescanMediaQueries:n.rescanMediaQueries,append_elements:n.appendElements,prepend_elements:n.prependElements,register_grid:n.registerGrid,recreate_columns:n.recreateColumns,rescan_media_queries:n.rescanMediaQueries}}(window,window.document);return e}); diff --git a/stonemason/service/tileserver/templates/index.html b/stonemason/service/tileserver/templates/index.html index b2aaa3d..de496f7 100644 --- a/stonemason/service/tileserver/templates/index.html +++ b/stonemason/service/tileserver/templates/index.html @@ -18,6 +18,40 @@ + + @@ -49,29 +83,27 @@
-
+ +
{% for theme in themes %} -
+
+
-

-

- {{ theme.tag }} - +

{{ theme.tag }} + - -

+

- - {{ theme.metadata.version }} - + + {{ theme.metadata.version }}
@@ -82,9 +114,14 @@

KeyValue
{{ key }}{{ key }} {{ value }}
+ + + + + {% for key, value in theme.pyramid.iteritems() %} - + {% endfor %} @@ -97,15 +134,16 @@

- {% endfor %} + + From a268dbaed7e0fc0473c53694c94a6db903c7f642 Mon Sep 17 00:00:00 2001 From: ray Date: Sun, 15 Feb 2015 18:03:05 +0800 Subject: [PATCH 125/179] DOCS: Add documents for env parameters. --- stonemason/service/tileserver/tileserver.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/stonemason/service/tileserver/tileserver.py b/stonemason/service/tileserver/tileserver.py index a7ba593..97dff7e 100644 --- a/stonemason/service/tileserver/tileserver.py +++ b/stonemason/service/tileserver/tileserver.py @@ -193,6 +193,23 @@ class TileServerApp(Flask): Extra configurations specified on the creation of ``TileServerApp``. Used to accept variables from command line options. + The following parameters are available now: + + - STONEMASON_THEMES: + + The directory path of the themes. + + - STONEMASON_DEBUG: + + Turn on debug mode. True or False. + + - STONEMASON_VERBOSE: + + Print verbose logs. 1 or 0. + + - STONEMASON_MEMCACHE_SERVERS: + + Specify memcache servers. A list of servers. """ ENV_PARAM_PREFIX = 'STONEMASON_' From e948012d8dd78da546f33dc8eaf163b79e21a123 Mon Sep 17 00:00:00 2001 From: ray Date: Sun, 15 Feb 2015 21:51:07 +0800 Subject: [PATCH 126/179] FEATURE: Add navigation sidebar for admin page --- .../service/tileserver/templates/index.html | 164 ++++++++++++------ 1 file changed, 115 insertions(+), 49 deletions(-) diff --git a/stonemason/service/tileserver/templates/index.html b/stonemason/service/tileserver/templates/index.html index de496f7..db45f86 100644 --- a/stonemason/service/tileserver/templates/index.html +++ b/stonemason/service/tileserver/templates/index.html @@ -25,7 +25,6 @@ content: '1 .column.size-1of1'; } } - @media screen and (min-width: 768px) and (max-width: 992px) { #grid[data-columns]::before { content: '2 .column.size-1of2'; @@ -50,13 +49,58 @@ margin-bottom: 0; } + .container-wrapper { + margin-top: 50px; + } + + /* + * Sidebar + */ + + /* Hide for mobile, show later */ + .sidebar { + display: none; + } + @media (min-width: 768px) { + .sidebar { + position: fixed; + top: 50px; + bottom: 0; + left: 0; + z-index: 1000; + display: block; + padding: 20px; + overflow-x: hidden; + overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + background-color: #f5f5f5; + border-right: 1px solid #eee; + } + } + + /* Sidebar navigation */ + .nav-sidebar { + margin-right: -21px; /* 20px padding + 1px border */ + margin-bottom: 20px; + margin-left: -20px; + } + .nav-sidebar > li > a { + padding-right: 20px; + padding-left: 20px; + } + .nav-sidebar > .active > a, + .nav-sidebar > .active > a:hover, + .nav-sidebar > .active > a:focus { + color: #fff; + background-color: #428bca; + } + -

KeyValue
{{ key }}{{ key }} {{ value }}
- - - - - - {% for key, value in theme.pyramid.iteritems() %} - - - - + + + + {{ theme.metadata.version }} + + + +
+

+ {{ theme.metadata.description}} +

+
+ +
KeyValue
{{ key }}{{ value }}
+ + + + + + {% for key, value in theme.pyramid.iteritems() + %} + + + + + {% endfor %} +
KeyValue
{{ key }}{{ value }}
+ + +
+ +
{% endfor %} - - + - - {% endfor %} + + - - - - - + + + + From c7b2a810fbda7c2a62f52d65df3aaff1e065023b Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Mon, 16 Feb 2015 11:56:39 +0800 Subject: [PATCH 127/179] FEATURE: Implement "init" and "check" subcommands --- stonemason/__main__.py | 81 ++++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 23 deletions(-) diff --git a/stonemason/__main__.py b/stonemason/__main__.py index 5bb64fb..2a8533a 100755 --- a/stonemason/__main__.py +++ b/stonemason/__main__.py @@ -1,14 +1,15 @@ #!/usr/bin/env python # -*- encoding: utf-8 -*- -"""Main CLI entry point, using Click as argument parser.""" +"""Main CLI entry point, using Click as argparser.""" __author__ = 'kotaimen' __date__ = '2/3/15' import os -import sys +import shutil import multiprocessing +import sys import click import six @@ -19,7 +20,7 @@ # Click contexts # -# NOTE: click add "_" between prefix and variable, but Flask don't... +# NOTE: Click adds "_" between prefix and variable, but Flask doesn't... ENVVAR_PREFIX = 'STONEMASON' CONTEXT_SETTINGS = dict( @@ -29,12 +30,12 @@ class Context(object): - """Custom context object, passing options collected from group command. - """ + """Custom context object, collecting options from group command, + and pass them to sub commands.""" def __init__(self): self.themes = None - self.verbosity = 0 + self.verbose = 0 self.debug = False @@ -52,6 +53,7 @@ def __init__(self, app, options=None): super(TileServer, self).__init__() def load_config(self): + # TODO: Also supports Gunicorn configuration files config = dict( [(key, value) for key, value in six.iteritems(self.options) if key in self.cfg.settings and value is not None]) @@ -68,18 +70,28 @@ def load(self): @click.group(context_settings=CONTEXT_SETTINGS) -@click.option('--debug/--no-debug', default=False, help='debug mode.') +@click.option('--debug/--no-debug', default=False, + help='enable/disable debug mode.') @click.option('-v', '--verbose', default=False, count=True, - help='being verbose.') -@click.option('-t', '--themes', type=click.Path(exists=False), required=True, - help='themes root directory, can be overridden using envvar ' - 'STONEMASON_THEMES.') + help='being verbose, this option can be specified several times') +@click.option('-t', '--themes', + type=click.Path(exists=False, file_okay=True, + readable=True), + required=False, default='themes', + help='''themes root directory, by default, it tries lookup "themes" + under current directory. Only local file system directory + is supported as of now.''') @click.version_option(stonemason.__version__, message='Stonemason %(version)s') @click.pass_context def cli(ctx, debug, verbose, themes): - """Stonemason Tile Map Service Toolkit.""" + """Stonemason Tile Map Service Toolkit. + + Options and arguments can be specified using environment variables + as STONEMASON_

&U8+9 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 v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +html_sidebars = { + '**': [ + 'about.html', 'navigation.html', 'searchbox.html', + ] +} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'stonemasondoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + #'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + #'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + #'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ('index', 'stonemason.tex', u'stonemason Documentation', + u'K\\&R', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'stonemason', u'stonemason Documentation', + [u'K&R'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + +intersphinx_mapping = {'http://docs.python.org/': None} + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'stonemason', u'stonemason Documentation', + u'K&R', 'stonemason', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/docs/config.rst b/docs/config.rst new file mode 100644 index 0000000..6993808 --- /dev/null +++ b/docs/config.rst @@ -0,0 +1,5 @@ +Config +====== + + + diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..460cf4d --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,37 @@ +.. stonemason documentation master file, created by + sphinx-quickstart on Tue Jan 13 12:30:07 2015. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Stonemason +========== + +*Tile service toolkit.* + + +Manual +------ + +.. toctree:: + :maxdepth: 1 + + install + config + +References +---------- + +.. toctree:: + :maxdepth: 2 + + pkg_tilecache + pkg_util + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/docs/install.rst b/docs/install.rst new file mode 100644 index 0000000..0ad56ce --- /dev/null +++ b/docs/install.rst @@ -0,0 +1,34 @@ +Installation +============ + + +Development Environment (ubuntu-14.04-LTS) +------------------------------------------ + +Install system package dependency: + +.. code-block:: console + + sudo apt-get install git + sudo apt-get install python python-dev python-pip + sudo apt-get install python3 python3-dev python3-pip + sudo apt-get install libjpeg-dev libz-dev libtiff-dev libfreetype6-dev libwebp-dev liblcms-dev liblcms2-dev libmemcached-dev + + +Clone: + +.. code-block:: console + + git clone https://github.com/Kotaimen/stonemason.git + + +Install python dependency: + +.. code-block:: console + + sudo pip install -rrequirements-dev.txt + sudo pip install -rrequirements.txt + sudo pip3 install -rrequirements-dev.txt + sudo pip3 install -rrequirements.txt + + diff --git a/docs/pkg_tilecache.rst b/docs/pkg_tilecache.rst new file mode 100644 index 0000000..dff6ba7 --- /dev/null +++ b/docs/pkg_tilecache.rst @@ -0,0 +1,9 @@ +Tile Cache +=========== + + +Interface +--------- + +.. autoclass:: stonemason.provider.tilecache.TileCache + :members: diff --git a/docs/pkg_util.rst b/docs/pkg_util.rst new file mode 100644 index 0000000..973fe50 --- /dev/null +++ b/docs/pkg_util.rst @@ -0,0 +1,17 @@ +Utilities +========= + + +Geo +--- + +.. automodule:: stonemason.util.geo.hilbert + :members: + +Postprocessing +-------------- + +.. automodule:: stonemason.util.postprocessing.gridcrop + :members: + + diff --git a/requirements-dev.txt b/requirements-dev.txt index ef38438..06909f7 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,3 +2,6 @@ nose coverage tox>=1.8 Cython>=0.19 +Pygments>=1.6 +alabaster>=0.6.2 +Sphinx>=1.2.3 diff --git a/setup.py b/setup.py index 70bac99..ab8b885 100644 --- a/setup.py +++ b/setup.py @@ -53,13 +53,6 @@ def find_version(*file_paths): 'pylibmc>=1.4.1', ] - -# Memcached have a different name under python 3 -if not IS_PY3: - install_requires += ['python-memcached>=1.53', ] -else: - install_requires += ['python3-memcached>=1.51', ] - tests_require = [ 'nose', 'coverage', From 2a5f892a8754c85d271735fa6fde15795f8df437 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Tue, 13 Jan 2015 16:57:41 +0800 Subject: [PATCH 024/179] DOC: Updated docstring to confront with sphinx standard --- INSTALL.md | 4 --- docs/conf.py | 13 +++++---- docs/index.rst | 1 + docs/install.rst | 17 ++++++++++- docs/pkg_pyramid.rst | 16 ++++++++++ docs/pkg_tilecache.rst | 2 +- docs/pkg_util.rst | 1 + stonemason/provider/pyramid/serial.py | 25 ++++++++++------ stonemason/provider/pyramid/tile.py | 3 +- stonemason/provider/tilecache/tilecache.py | 34 ++++++++++++---------- stonemason/util/geo/hilbert.py | 18 +++++++----- stonemason/util/postprocessing/gridcrop.py | 24 +++++++-------- tox.ini | 10 +++++-- 13 files changed, 109 insertions(+), 59 deletions(-) delete mode 100644 INSTALL.md create mode 100644 docs/pkg_pyramid.rst diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index 1a1bd1e..0000000 --- a/INSTALL.md +++ /dev/null @@ -1,4 +0,0 @@ -Install -======= - -TBD. diff --git a/docs/conf.py b/docs/conf.py index 699e6ee..23fff73 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -31,7 +31,8 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', 'alabaster', 'sphinx.ext.intersphinx' + 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.mathjax', + 'alabaster', ] # Add any paths that contain templates here, relative to this directory. @@ -69,7 +70,7 @@ # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' +# today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -77,10 +78,10 @@ # The reST default role (used for this markup: `text`) to use for all # documents. -#default_role = None +# default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True +# add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). @@ -251,8 +252,10 @@ # If true, show URL addresses after external links. #man_show_urls = False -intersphinx_mapping = {'http://docs.python.org/': None} +intersphinx_mapping = {'python': ('http://docs.python.org/', None), + 'PIL': ('https://pillow.readthedocs.org/', None)} +autodoc_member_order ='bysource' # -- Options for Texinfo output ------------------------------------------- diff --git a/docs/index.rst b/docs/index.rst index 460cf4d..17a3bae 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -24,6 +24,7 @@ References .. toctree:: :maxdepth: 2 + pkg_pyramid pkg_tilecache pkg_util diff --git a/docs/install.rst b/docs/install.rst index 0ad56ce..c7dbcce 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -15,7 +15,7 @@ Install system package dependency: sudo apt-get install libjpeg-dev libz-dev libtiff-dev libfreetype6-dev libwebp-dev liblcms-dev liblcms2-dev libmemcached-dev -Clone: +Clone the code: .. code-block:: console @@ -32,3 +32,18 @@ Install python dependency: sudo pip3 install -rrequirements.txt +Run nose: + +.. code-block:: console + + python setup.py build_ext --inplace + nosetests + +Run tox: + +.. code-block:: console + + tox + + + \ No newline at end of file diff --git a/docs/pkg_pyramid.rst b/docs/pkg_pyramid.rst new file mode 100644 index 0000000..1b76061 --- /dev/null +++ b/docs/pkg_pyramid.rst @@ -0,0 +1,16 @@ +Pyramid +======= + +Tile related data types and algorithms. + +Serial +------ + +.. automodule:: stonemason.provider.pyramid + :members: Hilbert, Legacy + +Tile +---- + +.. automodule:: stonemason.provider.pyramid + :members: Tile, TileIndex diff --git a/docs/pkg_tilecache.rst b/docs/pkg_tilecache.rst index dff6ba7..c6fb645 100644 --- a/docs/pkg_tilecache.rst +++ b/docs/pkg_tilecache.rst @@ -1,5 +1,5 @@ Tile Cache -=========== +========== Interface diff --git a/docs/pkg_util.rst b/docs/pkg_util.rst index 973fe50..1b721f8 100644 --- a/docs/pkg_util.rst +++ b/docs/pkg_util.rst @@ -1,6 +1,7 @@ Utilities ========= +Utility functions and classes. Geo --- diff --git a/stonemason/provider/pyramid/serial.py b/stonemason/provider/pyramid/serial.py index 55e4e8b..429740c 100644 --- a/stonemason/provider/pyramid/serial.py +++ b/stonemason/provider/pyramid/serial.py @@ -16,6 +16,9 @@ class Hilbert(object): + + """ Calculate serial using Hilbert curve """ + @staticmethod def coord2serial(z, x, y): """ Convert tile coordinate to a unique serial @@ -56,24 +59,28 @@ def coord2dir(z, x, y): class Legacy(object): """ Legacy serial used in Mason and older Pathologist systems. - Copied code, works fine but is not cool anymore (besides stupid and slow). + Works fine but is not cool anymore (besides being stupid and slow). """ @staticmethod def coord2serial(z, x, y): """ Convert tile coordinate to an integer serial - Flatten tile coordinate (z, x, y) to a serial by:: + Flatten tile coordinate `(z, x, y)` to a serial by: + + .. math:: + + (4^z - 1) / 3 + 2^z * y + x - (4^(z)-1) / 3 + 2^z * y + x + This formula is calculated form total number of tiles of layer `0~k`: - This formula is calculated form total number of tiles of layer 0~k:: + .. math:: - Sum[4^n, {n, 0, k}] = (4^(k+1)-1) / 3 + Sum[4^n, {n, 0, k}] = (4 ^ k + 1) - 1) / 3 - For a 32 bit integer serial, the largest supported tile layer is 15. - For a 64 bit integer serial, the largest supported tile layer is 31. + For a 32 bit integer serial, the largest supported tile layer is ``15``. + For a 64 bit integer serial, the largest supported tile layer is ``31``. """ # Limit serial to 64 bit signed integer @@ -89,9 +96,9 @@ def coord2dir(z, x, y): """ Return a directory name list for a given tile coordinate - Groups adjacent m*m tiles in a sub directory to improve file system + Groups adjacent `m*m` tiles in a sub directory to improve file system performance. Returns a list of directory names, to create a - directory str, use os.path.join(*list) + directory string, use ``os.path.join(*list)``. """ assert 0 <= z <= 31 diff --git a/stonemason/provider/pyramid/tile.py b/stonemason/provider/pyramid/tile.py index 623c77b..9de2882 100644 --- a/stonemason/provider/pyramid/tile.py +++ b/stonemason/provider/pyramid/tile.py @@ -53,6 +53,8 @@ def __repr__(self): class Tile(collections.namedtuple('_Tile', 'index data mimetype mtime')): + """ A Tile + """ def __init__(self, index=None, data=None, mimetype=None, mtime=None): if index is None: index = TileIndex() @@ -71,4 +73,3 @@ def __init__(self, index=None, data=None, mimetype=None, mtime=None): def __repr__(self): return 'Tile(%d/%d/%d)' % self.index - \ No newline at end of file diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py index 897f1e7..bf0172a 100644 --- a/stonemason/provider/tilecache/tilecache.py +++ b/stonemason/provider/tilecache/tilecache.py @@ -20,18 +20,20 @@ class TileNotFound(Exception): class TileCache(object): - """A cache for Tiles + """A cache for Tiles. Cache recent or frequently visited tiles for fast access, also works - as a intermediate temporary storage for Tiles retrieved from TileStorage. + as a intermediate temporary storage for tiles retrieved from `TileStorage`. - A `Tile` in the cache is identified by its *tag* and `TileIndex`. - `tag` must be a string matching regular expression ``"[a-zA-Z][a-zA-Z0-9_-%]+"``. - While `index` must be an TileIndex object. + A tile in the cache is identified by its `tag` and `index`. + `tag` must be a string matching regular expression + ``'[a-zA-Z][a-zA-Z0-9_-%]+``, while `index` must be an + :class:`~stonemason.provider.pyramid.TileIndex` object. - Note: The cache object designed to be shared between all themes and layers. - Being a thin wrapper layer, CAP model is dependent on the actual - cache system implement. + .. note:: + The cache object designed to be shared between all themes and layers. + Being a thin wrapper layer, CAP model is dependent on the actual + cache system implement. """ def __init__(self): @@ -44,12 +46,12 @@ def _make_key(self, tag, index): return '%s/%s' % (tag, '/' % index) def get(self, tag, index): - """ Retrieve a Tile from cache, return `None` on miss. + """ Retrieve a tile from cache, return `None` on miss. :param tag: Tag of the tile. :type tag: str :param index: Index of the tile. - :type index: TileIndex + :type index: :class:`~stonemason.provider.pyramid.TileIndex` :return: `Tile` object on hit, `None` on miss. :returns: `Tile` or `None` """ @@ -64,7 +66,7 @@ def has(self, tag, index): :param tag: Tag of the tile. :type tag: str :param index: Index of the tile. - :type index: TileIndex + :type index: :class:`~stonemason.provider.pyramid.TileIndex` :return: Whether the tile exists in the cache. :returns: bool """ @@ -79,7 +81,7 @@ def put(self, tag, tile, ttl=0): :param tag: Tag of the tile. :type tag: str :param tile: Tile to put. - :type tile: Tile + :type tile: :class:`~stonemason.provider.pyramid.Tile` :param ttl: Number of seconds before expiration, `0` means never. :type ttl: int :return: None @@ -94,7 +96,7 @@ def retire(self, tag, index): :param tag: Tag of the tile. :type tag: str :param index: Index of the tile. - :type index: TileIndex + :type index: :class:`~stonemason.provider.pyramid.TileIndex` :return: None """ pass @@ -125,7 +127,7 @@ def has_all(self, tag, indexes): :param tag: Tag of the tile. :type tag: str - :param indexes: A iterable of tiles to put. + :param indexes: A list of tiles to put. :type indexes: list :return: Whether all given tiles exist in the cache. """ @@ -142,7 +144,7 @@ def lock(self, tag, index, ttl=0.1): :param tag: Tag of the tile. :type tag: str :param index: Index of the tile. - :type index: TileIndex + :type index: :class:`~stonemason.provider.pyramid.TileIndex` :param ttl: Number of seconds before lock expiration. :type ttl: int :return: CAS on success or zero when tile is already locked. @@ -158,7 +160,7 @@ def unlock(self, tag, index, cas): :param tag: Tag of the tile. :type tag: str :param index: Index of the tile. - :type index: ::calTileIndex. + :type index: :class:`~stonemason.provider.pyramid.TileIndex` :param cas: CAS value of the tile. :type cas: int :return: `True` if unlock is successful, `False` otherwise. diff --git a/stonemason/util/geo/hilbert.py b/stonemason/util/geo/hilbert.py index c327d2d..80a490b 100644 --- a/stonemason/util/geo/hilbert.py +++ b/stonemason/util/geo/hilbert.py @@ -16,11 +16,14 @@ def hil_xy_from_s(s, n): - """ Compute coordinate from given Hilbert curve length. + """ Compute point coordinate from given Hilbert curve length. + + Given the order `n` of a Hilbert curve, compute point coordinate `(x, y)` + using length `n`. This is the reverse operation of :func:`hil_s_from_xy` :param s: Length of the Hilbert curve. :param n: Order of the Hilbert curve - :return: Coordinate as a tuple (x, y). + :return: Coordinate as a tuple `(x, y)`. :returns: tuple """ assert n < 64 @@ -29,15 +32,16 @@ def hil_xy_from_s(s, n): def hil_s_from_xy(x, y, n): - """ Compute Hilbert curve length from given coordinate + """ Compute Hilbert curve length from given point coordinate. - Given the "order" n of a Hilbert curve and coordinates x and y, - computes the length s of the curve from the origin to (x, y). + Given the order `n` of a Hilbert curve and coordinates `x` and `y`, + computes the length `s` of the curve from the origin to `(x, y)`. :param x: x coordinate. :param y: y coordinate. - :param n: Order of the Hilbert curve - :return: Hilbert curve length + :param n: Order of the Hilbert curve. + :type n: int + :return: Hilbert curve length. :returns: int """ assert n < 64 diff --git a/stonemason/util/postprocessing/gridcrop.py b/stonemason/util/postprocessing/gridcrop.py index 87da991..ebac32b 100644 --- a/stonemason/util/postprocessing/gridcrop.py +++ b/stonemason/util/postprocessing/gridcrop.py @@ -36,25 +36,25 @@ def shave(image, buffer_size=0): """ Shave buffer pixel from given image. Shave buffer pixels from the given tile image, returns a - `PIL.Image.Image` object. If `buffer_size` is zero, given image + :class:`PIL.Image.Image` object. If `buffer_size` is zero, given image is returned without modification. Given image can be one of: - PIL/Pillow image - `bytes` contains a image file data - - `fp` of a image file (real file or `io.BytesIO`) + - `fp` of a image file (real file or :class:`io.BytesIO`) Due to PIL/Pillow Image internal lazy cropping implement, given `image` object's internal buffer must remain unchanged until cropped image is serialized. :param image: Image to crop, must be square. - :type image: `PIL.Image.Image` or `bytes` or `file` + :type image: :class:`PIL.Image.Image` or `bytes` or `file` :param buffer_size: Size of the buffer to be shaved each side in pixels, - default is 0, means no buffer is shaved. + default is ``0``, which means no buffer is shaved. :return: Cropped image. - :returns: `PIL.Image.Image` + :returns: :class:`PIL.Image.Image` """ assert buffer_size >= 0 image = open_image(image) @@ -74,27 +74,25 @@ def shave(image, buffer_size=0): def grid_crop(image, stride=1, buffer_size=0): - """ Crop given MetaTile image into a grid + """ Crop a big MetaTile image into a image grid. - Crop a large image into a ``stride x stride`` image grid, shave + Crop a large image into a `stride*stride` image grid, shave extra buffer pixels during the process (aka: MetaTile *fission*). Given image can be one of: - - PIL/Pillow image + - A PIL/Pillow image - `bytes` contains a image file data - - `fp` of a image file (real file or `io.BytesIO`) - - Returns a dictionary of small grid images:: + - `file` handle of a image file (real file or `io.BytesIO`) - (row, column): image + Returns a dictionary of small grid images: `(row, column): image` Due to PIL/Pillow Image internal lazy cropping implement, given `image` object's internal buffer must remain unchanged until cropped image is serialized. :param image: Image to crop, must be square. - :type image: `PIL.Image.Image` or `bytes` or `file` + :type image: :class:`PIL.Image.Image` or `bytes` or `file` :param stride: Number of grid images per axis. :param buffer_size: Size of the buffer to be shaved each side in pixels, default is 0, means no buffer is shaved. diff --git a/tox.ini b/tox.ini index ec8d529..1b3bf68 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = py27, py34 +envlist = py27, py34, docs [testenv] changedir=tests @@ -12,4 +12,10 @@ commands = nosetests --no-path-adjustment deps = -rrequirements-dev.txt - \ No newline at end of file + +[testenv:docs] +basepython=python +changedir=docs +commands= + make html + From d55eeebca4217f44e81e9e3394109be80bdc9f80 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Wed, 14 Jan 2015 10:57:50 +0800 Subject: [PATCH 025/179] DOC: Use rtype replacing returns in the docstring --- stonemason/provider/tilecache/tilecache.py | 8 ++++---- stonemason/util/geo/hilbert.py | 4 ++-- stonemason/util/postprocessing/gridcrop.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py index bf0172a..7eed94b 100644 --- a/stonemason/provider/tilecache/tilecache.py +++ b/stonemason/provider/tilecache/tilecache.py @@ -53,7 +53,7 @@ def get(self, tag, index): :param index: Index of the tile. :type index: :class:`~stonemason.provider.pyramid.TileIndex` :return: `Tile` object on hit, `None` on miss. - :returns: `Tile` or `None` + :rtype: `Tile` or `None` """ return None @@ -68,7 +68,7 @@ def has(self, tag, index): :param index: Index of the tile. :type index: :class:`~stonemason.provider.pyramid.TileIndex` :return: Whether the tile exists in the cache. - :returns: bool + :rtype: bool """ return self.get(tag, index) is not None @@ -155,7 +155,7 @@ def lock(self, tag, index, ttl=0.1): def unlock(self, tag, index, cas): """ Unlock a particular tile using given `cas`. - The tile must have been must have been locked with the specified `cas`. + The tile must have been locked with the specified `cas`. :param tag: Tag of the tile. :type tag: str @@ -164,7 +164,7 @@ def unlock(self, tag, index, cas): :param cas: CAS value of the tile. :type cas: int :return: `True` if unlock is successful, `False` otherwise. - :returns: bool + :rtype: bool """ return True diff --git a/stonemason/util/geo/hilbert.py b/stonemason/util/geo/hilbert.py index 80a490b..38bc7cf 100644 --- a/stonemason/util/geo/hilbert.py +++ b/stonemason/util/geo/hilbert.py @@ -24,7 +24,7 @@ def hil_xy_from_s(s, n): :param s: Length of the Hilbert curve. :param n: Order of the Hilbert curve :return: Coordinate as a tuple `(x, y)`. - :returns: tuple + :rtype: tuple """ assert n < 64 assert s < 4 ** n @@ -42,7 +42,7 @@ def hil_s_from_xy(x, y, n): :param n: Order of the Hilbert curve. :type n: int :return: Hilbert curve length. - :returns: int + :rtype: int """ assert n < 64 return _hilbert.hil_s_from_xy(x, y, n) diff --git a/stonemason/util/postprocessing/gridcrop.py b/stonemason/util/postprocessing/gridcrop.py index ebac32b..6394ef1 100644 --- a/stonemason/util/postprocessing/gridcrop.py +++ b/stonemason/util/postprocessing/gridcrop.py @@ -54,7 +54,7 @@ def shave(image, buffer_size=0): :param buffer_size: Size of the buffer to be shaved each side in pixels, default is ``0``, which means no buffer is shaved. :return: Cropped image. - :returns: :class:`PIL.Image.Image` + :rtype: :class:`PIL.Image.Image` """ assert buffer_size >= 0 image = open_image(image) @@ -97,7 +97,7 @@ def grid_crop(image, stride=1, buffer_size=0): :param buffer_size: Size of the buffer to be shaved each side in pixels, default is 0, means no buffer is shaved. :return: A dictionary of cropped image. - :returns: dict + :rtype: dict """ assert stride >= 1 From c2626e415d43be6340a9751bb9a15312c28161fb Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Wed, 14 Jan 2015 21:08:21 +0800 Subject: [PATCH 026/179] TEST: Tested pyramid.tile --- stonemason/provider/pyramid/tile.py | 113 ++++++++++++++---- .../stonemason/provider/pyramid/test_tile.py | 74 ++++++++++++ 2 files changed, 167 insertions(+), 20 deletions(-) create mode 100644 tests/stonemason/provider/pyramid/test_tile.py diff --git a/stonemason/provider/pyramid/tile.py b/stonemason/provider/pyramid/tile.py index 9de2882..4d13720 100644 --- a/stonemason/provider/pyramid/tile.py +++ b/stonemason/provider/pyramid/tile.py @@ -13,30 +13,47 @@ import collections import time import mimetypes - +import hashlib import six from .serial import Hilbert -class TileIndex(collections.namedtuple('_TileIndex', 'z x y')): - """ Coordinate index of a map Tile +_TileIndex = collections.namedtuple('_TileIndex', 'z x y') + + +class TileIndex(_TileIndex): + """ Coordinate of a map Tile. + + Coordinate (aka: index) of a map :class:`~stonemason.provider.pyramid.Tile` + using GoogleMaps style tile map system. - Coordinate index of a map Tile using GoogleMaps tile system. + .. note:: - z: - zoom level - x: - coordinate at longitude axis - y: - coordinate at latitude axis + `TileIndex` is a `tuple` and thus is immutable once created. + + + >>> from stonemason.provider.pyramid import TileIndex + >>> index = TileIndex(2, 3, 4) + >>> index.z + 2 + >>> index.x + 3 + >>> index.y + 4 + + :param z: Zoom level. + :type z: int + :param x: Coordinate at x axis. + :type x: int + :param y: Coordinate at y axis. + :type y: int """ - def __init__(self, z=0, x=0, y=0): + def __new__(cls, z=0, x=0, y=0): assert 0 <= x <= 2 ** z assert 0 <= y <= 2 ** z - - _TileIndex.__init__(self, z, x, y) + return _TileIndex.__new__(cls, z, x, y) @property def serial(self): @@ -45,17 +62,65 @@ def serial(self): def __hash__(self): return hash(self.serial) - def __cmp__(self, other): - return self.serial < other.serial - def __repr__(self): return 'TileIndex(%d/%d/%d)' % self -class Tile(collections.namedtuple('_Tile', 'index data mimetype mtime')): - """ A Tile +_Tile = collections.namedtuple('_Tile', 'index data mimetype mtime etag') + + +class Tile(_Tile): + """ A piece of square area in a map. + + A `Tile` is a piece of square area in a rendered digital map, sliced + using quad-tree grid system, called :class:`~stonemason.provider.pyramid.Pyramid`. + + Tile is uniquely referenced by its :class:`~stonemason.provider.pyramid.TileIndex`. + + A tile object is immutable once created and has following attributes: + + `index` + + Tile index. + + `data` + + Arbitrary binary or textual data, though its usually a rendered + raster map image, or geo referenced features. + + `mimetype` + + Type of the tile data in mimetypes format, default to + ``application/data``. `Tile` will never check whether `mimetype` + matches actual tile data format. + + `mtime` + + Modify time of the tile since EPOCH in seconds, if its not given in + the constructor, current time is used by calling :func:`time.time()` + + + `etag` + + Hash of the tile data, calculated using class:`hashlib:md5` if is not + given in the constructor. + + + :param index: Tile index. + :type index: :class:`~stonemason.provider.pyramid.TileIndex`. + :param data: Tile data. + :type data: bytes + :param mimetype: Mimetype of the tile data. + :type mimetype: str + :param mtime: Timestamp of the tile. + :type mtime: float + :param etag: Hash of the tile data. + :type etag: bytes """ - def __init__(self, index=None, data=None, mimetype=None, mtime=None): + + def __new__(cls, index=None, data=None, + mimetype=None, mtime=None, + etag=None): if index is None: index = TileIndex() if data is None: @@ -64,11 +129,19 @@ def __init__(self, index=None, data=None, mimetype=None, mtime=None): mimetype = 'application/data' if mtime is None: mtime = time.time() + if etag is None: + etag = hashlib.md5(data).digest() assert isinstance(index, TileIndex) assert isinstance(data, bytes) - _Tile.__init__(self, index, data, mimetype, mtime) + assert isinstance(mimetype, six.string_types) + assert isinstance(mtime, float) + assert isinstance(etag, six.binary_type) + + return _Tile.__new__(cls, index, data, mimetype, mtime, etag) + def __hash__(self): + return hash(self.index.serial) def __repr__(self): return 'Tile(%d/%d/%d)' % self.index diff --git a/tests/stonemason/provider/pyramid/test_tile.py b/tests/stonemason/provider/pyramid/test_tile.py new file mode 100644 index 0000000..8147970 --- /dev/null +++ b/tests/stonemason/provider/pyramid/test_tile.py @@ -0,0 +1,74 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/14/15' + +import unittest +import hashlib + +from stonemason.provider.pyramid import Tile, TileIndex + + +class TestTileIndex(unittest.TestCase): + def test_init(self): + index1 = TileIndex() + self.assertEqual(index1.x, 0) + self.assertEqual(index1.y, 0) + self.assertEqual(index1.z, 0) + index2 = TileIndex(2, 3, 4) + self.assertEqual(index2.x, 3) + self.assertEqual(index2.y, 4) + self.assertEqual(index2.z, 2) + + def test_repr(self): + index = TileIndex(2, 3, 4) + self.assertEqual(str(index), 'TileIndex(2/3/4)') + + def test_serial(self): + index = TileIndex(3, 4, 5) + self.assertEqual(index.serial, 0xc00000000000023) + + def test_eq(self): + index2 = TileIndex(4, 4, 5) + index1 = TileIndex(3, 4, 5) + index3 = TileIndex(3, 4, 5) + self.assertNotEqual(index1, index2) + self.assertEqual(index1, index3) + self.assertEqual(index1, (3, 4, 5)) + + def test_hash(self): + index = TileIndex(3, 4, 5) + self.assertEqual(hash(index), 0xc00000000000023) + + +class TestTile(unittest.TestCase): + def test_init1(self): + tile = Tile() + self.assertEqual(tile.index, (0, 0, 0)) + self.assertEqual(tile.data, b'') + self.assertEqual(tile.mimetype, 'application/data') + self.assertGreater(tile.mtime, 0) + self.assertEqual(tile.etag, hashlib.md5(b'').digest()) + + def test_init2(self): + tile = Tile(index=TileIndex(2, 3, 4), + data=b'a tile', + mimetype='text/plain', + mtime=1234.) + self.assertEqual(tile.index, (2, 3, 4)) + self.assertEqual(tile.data, b'a tile') + self.assertEqual(tile.mimetype, 'text/plain') + self.assertGreater(tile.mtime, 0.) + self.assertEqual(tile.etag, hashlib.md5(b'a tile').digest()) + + def test_hash(self): + tile = Tile(TileIndex(3, 4, 5)) + self.assertEqual(hash(tile), 0xc00000000000023) + + def test_repr(self): + tile = Tile(TileIndex(3, 4, 5)) + self.assertEqual(str(tile), 'Tile(3/4/5)') + + +if __name__ == '__main__': + unittest.main() From 347f5c4ff8106fd00e132e0424fbaf79b3384019 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Wed, 14 Jan 2015 21:09:10 +0800 Subject: [PATCH 027/179] TEST: Test class by import from their package export instead of source file. --- .../provider/pyramid/test_serial.py | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tests/stonemason/provider/pyramid/test_serial.py b/tests/stonemason/provider/pyramid/test_serial.py index 4d77805..4a3c6f7 100644 --- a/tests/stonemason/provider/pyramid/test_serial.py +++ b/tests/stonemason/provider/pyramid/test_serial.py @@ -5,48 +5,48 @@ import unittest -import stonemason.provider.pyramid.serial as serial +from stonemason.provider.pyramid import Hilbert, Legacy class TestHilbert(unittest.TestCase): def test_serial(self): - self.assertEqual(serial.Hilbert.coord2serial(0, 0, 0), 0) - self.assertEqual(serial.Hilbert.coord2serial(1, 0, 0), + self.assertEqual(Hilbert.coord2serial(0, 0, 0), 0) + self.assertEqual(Hilbert.coord2serial(1, 0, 0), 0x400000000000000) - self.assertEqual(serial.Hilbert.coord2serial(3, 4, 5), + self.assertEqual(Hilbert.coord2serial(3, 4, 5), 0xc00000000000023) - self.assertEqual(serial.Hilbert.coord2serial(8, 8, 8), + self.assertEqual(Hilbert.coord2serial(8, 8, 8), 0x2000000000000080) - self.assertEqual(serial.Hilbert.coord2serial(28, 134217727, 134217728), + self.assertEqual(Hilbert.coord2serial(28, 134217727, 134217728), 0x707fffffffffffff) def test_cood(self): - self.assertListEqual(serial.Hilbert.coord2dir(0, 0, 0), ['00']) - self.assertListEqual(serial.Hilbert.coord2dir(3, 4, 5), ['03']) - self.assertListEqual(serial.Hilbert.coord2dir(7, 1, 1), ['07', '00']) - self.assertListEqual(serial.Hilbert.coord2dir(7, 64, 1), ['07', '03']) - self.assertListEqual(serial.Hilbert.coord2dir(19, 468432, 187688), + self.assertListEqual(Hilbert.coord2dir(0, 0, 0), ['00']) + self.assertListEqual(Hilbert.coord2dir(3, 4, 5), ['03']) + self.assertListEqual(Hilbert.coord2dir(7, 1, 1), ['07', '00']) + self.assertListEqual(Hilbert.coord2dir(7, 64, 1), ['07', '03']) + self.assertListEqual(Hilbert.coord2dir(19, 468432, 187688), ['19', '03', '1F', '7C', '85']) - self.assertListEqual(serial.Hilbert.coord2dir(20, 1000, 2000), + self.assertListEqual(Hilbert.coord2dir(20, 1000, 2000), ['20', '00', '00', '03', '00']) class TestLegacy(unittest.TestCase): def test_serial(self): - self.assertEqual(serial.Legacy.coord2serial(0, 0, 0), 0) - self.assertEqual(serial.Legacy.coord2serial(1, 0, 0), 1) - self.assertEqual(serial.Legacy.coord2serial(3, 4, 5), 65) - self.assertEqual(serial.Legacy.coord2serial(8, 8, 8), 23901) - self.assertEqual(serial.Legacy.coord2serial(29, 0, 0), + self.assertEqual(Legacy.coord2serial(0, 0, 0), 0) + self.assertEqual(Legacy.coord2serial(1, 0, 0), 1) + self.assertEqual(Legacy.coord2serial(3, 4, 5), 65) + self.assertEqual(Legacy.coord2serial(8, 8, 8), 23901) + self.assertEqual(Legacy.coord2serial(29, 0, 0), 96076792050570581) def test_coord(self): - self.assertListEqual(serial.Legacy.coord2dir(0, 0, 0), ['00']) - self.assertListEqual(serial.Legacy.coord2dir(7, 1, 1), ['07', '00']) - self.assertListEqual(serial.Legacy.coord2dir(7, 64, 1), ['07', '01']) - self.assertListEqual(serial.Legacy.coord2dir(19, 468432, 187688), + self.assertListEqual(Legacy.coord2dir(0, 0, 0), ['00']) + self.assertListEqual(Legacy.coord2dir(7, 1, 1), ['07', '00']) + self.assertListEqual(Legacy.coord2dir(7, 64, 1), ['07', '01']) + self.assertListEqual(Legacy.coord2dir(19, 468432, 187688), ['19', '01', '6E', '9C', '97']) - self.assertListEqual(serial.Legacy.coord2dir(20, 1000, 2000), + self.assertListEqual(Legacy.coord2dir(20, 1000, 2000), ['20', '00', '07', 'C0', '0F']) From 40063cf85fb41de754067073d22254a7950e553f Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Wed, 14 Jan 2015 21:11:06 +0800 Subject: [PATCH 028/179] DOC: Use autoclass instead of automodule --- docs/pkg_pyramid.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/pkg_pyramid.rst b/docs/pkg_pyramid.rst index 1b76061..afde258 100644 --- a/docs/pkg_pyramid.rst +++ b/docs/pkg_pyramid.rst @@ -3,14 +3,13 @@ Pyramid Tile related data types and algorithms. -Serial ------- - -.. automodule:: stonemason.provider.pyramid - :members: Hilbert, Legacy Tile ---- -.. automodule:: stonemason.provider.pyramid - :members: Tile, TileIndex +.. autoclass:: stonemason.provider.pyramid.TileIndex + :members: + +.. autoclass:: stonemason.provider.pyramid.Tile + :members: + From 7ad8728d07dfc7d567bbb8b0c75a3c87d4089dd0 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Wed, 14 Jan 2015 21:31:21 +0800 Subject: [PATCH 029/179] DOC: Add doctest to tox.ini --- docs/conf.py | 13 +++++++---- docs/pkg_pyramid.rst | 10 ++++++++ stonemason/provider/pyramid/tile.py | 23 +++++++++++++++---- .../stonemason/provider/pyramid/test_tile.py | 2 +- tox.ini | 4 ++++ 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 23fff73..92ba5a9 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -31,7 +31,8 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.mathjax', + 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', + 'sphinx.ext.doctest', 'sphinx.ext.mathjax', 'alabaster', ] @@ -85,11 +86,11 @@ # If true, the current module name will be prepended to all description # unit titles (such as .. function::). -#add_module_names = True +# add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. -#show_authors = False +# show_authors = False # The name of the Pygments (syntax highlighting) style to use. # pygments_style = 'sphinx' @@ -253,9 +254,11 @@ #man_show_urls = False intersphinx_mapping = {'python': ('http://docs.python.org/', None), - 'PIL': ('https://pillow.readthedocs.org/', None)} + 'PIL': ('https://pillow.readthedocs.org/', None), + 'pylibmc': ( + 'http://sendapatch.se/projects/pylibmc/', None)} -autodoc_member_order ='bysource' +autodoc_member_order = 'bysource' # -- Options for Texinfo output ------------------------------------------- diff --git a/docs/pkg_pyramid.rst b/docs/pkg_pyramid.rst index afde258..ee44fc6 100644 --- a/docs/pkg_pyramid.rst +++ b/docs/pkg_pyramid.rst @@ -13,3 +13,13 @@ Tile .. autoclass:: stonemason.provider.pyramid.Tile :members: + + +Serial +------ + +.. autoclass:: stonemason.provider.pyramid.Hilbert + :members: + +.. autoclass:: stonemason.provider.pyramid.Legacy + :members: diff --git a/stonemason/provider/pyramid/tile.py b/stonemason/provider/pyramid/tile.py index 4d13720..fea337e 100644 --- a/stonemason/provider/pyramid/tile.py +++ b/stonemason/provider/pyramid/tile.py @@ -28,9 +28,7 @@ class TileIndex(_TileIndex): Coordinate (aka: index) of a map :class:`~stonemason.provider.pyramid.Tile` using GoogleMaps style tile map system. - .. note:: - - `TileIndex` is a `tuple` and thus is immutable once created. + `TileIndex` is a `tuple` and thus is immutable once created. >>> from stonemason.provider.pyramid import TileIndex @@ -106,6 +104,23 @@ class Tile(_Tile): given in the constructor. + Sample: + + >>> from stonemason.provider.pyramid import Tile, TileIndex + >>> tile = Tile(index=TileIndex(2, 3, 4), + ... data=b'a tile', + ... mimetype='text/plain', + ... mtime=1234.) + >>> tile + Tile(2/3/4) + >>> tile.data + 'a tile' + >>> tile.mimetype + 'text/plain' + >>> tile.etag + 'c37ee78cb8b04fa64e295342b3e229cd' + + :param index: Tile index. :type index: :class:`~stonemason.provider.pyramid.TileIndex`. :param data: Tile data. @@ -130,7 +145,7 @@ def __new__(cls, index=None, data=None, if mtime is None: mtime = time.time() if etag is None: - etag = hashlib.md5(data).digest() + etag = hashlib.md5(data).hexdigest() assert isinstance(index, TileIndex) assert isinstance(data, bytes) diff --git a/tests/stonemason/provider/pyramid/test_tile.py b/tests/stonemason/provider/pyramid/test_tile.py index 8147970..a947985 100644 --- a/tests/stonemason/provider/pyramid/test_tile.py +++ b/tests/stonemason/provider/pyramid/test_tile.py @@ -59,7 +59,7 @@ def test_init2(self): self.assertEqual(tile.data, b'a tile') self.assertEqual(tile.mimetype, 'text/plain') self.assertGreater(tile.mtime, 0.) - self.assertEqual(tile.etag, hashlib.md5(b'a tile').digest()) + self.assertEqual(tile.etag, 'c37ee78cb8b04fa64e295342b3e229cd') def test_hash(self): tile = Tile(TileIndex(3, 4, 5)) diff --git a/tox.ini b/tox.ini index 1b3bf68..68c23e3 100644 --- a/tox.ini +++ b/tox.ini @@ -16,6 +16,10 @@ deps = [testenv:docs] basepython=python changedir=docs +whitelist_externals=make commands= make html + make doctest + + From 2f1ae0bd9b6724c827bbdb05ec376e25b1501657 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Thu, 15 Jan 2015 14:13:02 +0800 Subject: [PATCH 030/179] FIX: Should test against hexdigest here --- tests/stonemason/provider/pyramid/test_tile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/stonemason/provider/pyramid/test_tile.py b/tests/stonemason/provider/pyramid/test_tile.py index a947985..7361fb0 100644 --- a/tests/stonemason/provider/pyramid/test_tile.py +++ b/tests/stonemason/provider/pyramid/test_tile.py @@ -48,7 +48,7 @@ def test_init1(self): self.assertEqual(tile.data, b'') self.assertEqual(tile.mimetype, 'application/data') self.assertGreater(tile.mtime, 0) - self.assertEqual(tile.etag, hashlib.md5(b'').digest()) + self.assertEqual(tile.etag, hashlib.md5(b'').hexdigest()) def test_init2(self): tile = Tile(index=TileIndex(2, 3, 4), From a921d2f8debb01c8102ce8d66740729a8bb2167e Mon Sep 17 00:00:00 2001 From: ray Date: Thu, 15 Jan 2015 15:02:52 +0800 Subject: [PATCH 031/179] FEATURE: Add config module --- stonemason/mason/config/__init__.py | 5 +- stonemason/mason/config/config.py | 117 ++++++++++++++++++++++++ stonemason/mason/config/configparser.py | 48 ++++++++++ stonemason/mason/config/grammar.py | 56 ++++++++++++ 4 files changed, 223 insertions(+), 3 deletions(-) create mode 100644 stonemason/mason/config/config.py create mode 100644 stonemason/mason/config/configparser.py create mode 100644 stonemason/mason/config/grammar.py diff --git a/stonemason/mason/config/__init__.py b/stonemason/mason/config/__init__.py index 275af68..eeaa34d 100644 --- a/stonemason/mason/config/__init__.py +++ b/stonemason/mason/config/__init__.py @@ -1,6 +1,5 @@ # -*- encoding: utf-8 -*- -__author__ = 'kotaimen' -__date__ = '1/5/15' - +from .config import Config +from .config import ConfigError, FileNotFound, InvalidConfig diff --git a/stonemason/mason/config/config.py b/stonemason/mason/config/config.py new file mode 100644 index 0000000..7db7135 --- /dev/null +++ b/stonemason/mason/config/config.py @@ -0,0 +1,117 @@ +# -*- encoding: utf-8 -*- +""" + stonemason.mason.config.config + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Implements the config of stonemason. + +""" +import os +import six +import importlib + +from .configparser import ConfigParser, ConfigParserError + + +class ConfigError(Exception): + pass + + +class FileNotFound(ConfigError): + pass + + +class InvalidConfig(ConfigError): + pass + + +class Config(dict): + """A dict-like config object Configuration + + The Config is a dict like configuration object with some additional + functions. It can be set from files or stream of different format that + defined in :class:`~stonemason.mason.config.grammar` module and from + python object. + + The Config does not interpret the contents of a config. It just + translates supported file formats into a dict. + + Sample: + + >>> from stonemason.mason.config import Config + >>> obj = dict(name='stonemason') + >>> conf = Config() + >>> conf.read_from_dict(obj) + True + >>> conf['name'] + 'stonemason' + + """ + + def read_from_file(self, filename): + """Read config from a file. + + Read config from a file and return true if succeed. + + :param filename: The name of the config file. + :type filename: str + :return: return true if succeed. + :returns: bool + """ + if not os.path.exists(filename): + raise FileNotFound("Config file not found: %s." % filename) + + with open(filename) as fp: + return self.read_from_stream(fp) + + + def read_from_stream(self, fp): + """Read config from stream. + + Read config from a file-like object and return true if succeed. + + :param fp: A file-like object. + :type fp: FileIO + :return: return true if succeed. + :returns: bool + """ + + p = ConfigParser() + try: + properties = p.parse(fp.read()) + except ConfigParserError: + raise InvalidConfig + + self.update(properties) + return True + + + def read_from_object(self, obj): + """Read config from a python object. + + Read config from a python object and return true if succeed. + + :param obj: A python object. + :type obj: object + :return: Return true if succeed. + :returns: bool + """ + if isinstance(obj, six.string_types): + obj = importlib.import_module(obj) + for key in dir(obj): + self[key] = getattr(obj, key) + return True + + def read_from_dict(self, obj): + """Read config from a dict object. + + Read config from a dict object and return true if succeed. + + :param obj: A python dict. + :type obj: object + :return: Return true if succeed. + :returns: bool + """ + assert isinstance(obj, dict) + self.update(obj) + return True diff --git a/stonemason/mason/config/configparser.py b/stonemason/mason/config/configparser.py new file mode 100644 index 0000000..7a2e6db --- /dev/null +++ b/stonemason/mason/config/configparser.py @@ -0,0 +1,48 @@ +# -*- encoding: utf-8 -*- +""" + stonemason.mason.config.parser + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Implements the Parser of stonemason config. + +""" +from . import grammar + + +class ConfigParserError(Exception): + pass + + +class UnsupportedGrammar(ConfigParserError): + pass + + +class ConfigParser(object): + """Config Parser + + A ConfigParser reads config from a file or stream + and returns a parsed tree-like object. + """ + + def parse(self, expr): + """Parse an expression + + Find a proper grammar parser to parse an expression to dict. + + :param expr: A string expression. + :type expr: str + :return: A dict object. + :returns: dict + """ + + for g_cls in grammar.Grammar.__subclasses__(): + try: + g = g_cls() + return g.parse(expr) + except grammar.GrammarError: + continue + + else: + raise UnsupportedGrammar( + 'Can not find proper grammar to parse!') + diff --git a/stonemason/mason/config/grammar.py b/stonemason/mason/config/grammar.py new file mode 100644 index 0000000..f551d49 --- /dev/null +++ b/stonemason/mason/config/grammar.py @@ -0,0 +1,56 @@ +# -*- encoding: utf-8 -*- +""" + stonemason.mason.config.grammar + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Implements the grammar of different config format. + +""" + +import json + +__all__ = ['JsonGrammar', ] + + +class GrammarError(Exception): + pass + + +class Grammar(object): + """Basic Grammar Parser + + A Grammar Parser analyzes and translates an expression + into a dict. + """ + + def parse(self, expr): + """Parse a expression into a dict + + Interface for subclass to override. + + :param expr: An expression string. + :type expr: str + :return: A dict contains the parsed result. + :returns: dict + """ + raise NotImplementedError + + +class JsonGrammar(Grammar): + """Json Grammar Parser + + The json parser loads a json and returns a dict. + """ + + def parse(self, expr): + """Parse a json into a dict + + :param expr: An expression string. + :type expr: str + :return: A dict contains the parsed result. + :returns: dict + """ + try: + return json.loads(expr) + except ValueError: + raise GrammarError From df0d8b950bc20c05a08bac7571991d0d7d2ebc2f Mon Sep 17 00:00:00 2001 From: ray Date: Thu, 15 Jan 2015 15:04:13 +0800 Subject: [PATCH 032/179] TEST: Add tests for config module --- tests/data/config/bad_config.json | 3 ++ tests/data/config/config.json | 3 ++ tests/stonemason/mason/__init__.py | 1 + tests/stonemason/mason/config/__init__.py | 1 + tests/stonemason/mason/config/test_config.py | 53 ++++++++++++++++++++ 5 files changed, 61 insertions(+) create mode 100644 tests/data/config/bad_config.json create mode 100644 tests/data/config/config.json create mode 100644 tests/stonemason/mason/__init__.py create mode 100644 tests/stonemason/mason/config/__init__.py create mode 100644 tests/stonemason/mason/config/test_config.py diff --git a/tests/data/config/bad_config.json b/tests/data/config/bad_config.json new file mode 100644 index 0000000..095d1df --- /dev/null +++ b/tests/data/config/bad_config.json @@ -0,0 +1,3 @@ +{ + "stonemason" +} diff --git a/tests/data/config/config.json b/tests/data/config/config.json new file mode 100644 index 0000000..5b42a34 --- /dev/null +++ b/tests/data/config/config.json @@ -0,0 +1,3 @@ +{ + "name": "stonemason" +} diff --git a/tests/stonemason/mason/__init__.py b/tests/stonemason/mason/__init__.py new file mode 100644 index 0000000..dae354a --- /dev/null +++ b/tests/stonemason/mason/__init__.py @@ -0,0 +1 @@ +# -*- encoding: utf-8 -*- diff --git a/tests/stonemason/mason/config/__init__.py b/tests/stonemason/mason/config/__init__.py new file mode 100644 index 0000000..dae354a --- /dev/null +++ b/tests/stonemason/mason/config/__init__.py @@ -0,0 +1 @@ +# -*- encoding: utf-8 -*- diff --git a/tests/stonemason/mason/config/test_config.py b/tests/stonemason/mason/config/test_config.py new file mode 100644 index 0000000..4f3782b --- /dev/null +++ b/tests/stonemason/mason/config/test_config.py @@ -0,0 +1,53 @@ +# -*- encoding: utf-8 -*- + +import os +import unittest +from collections import namedtuple +from stonemason.mason.config import Config, FileNotFound, InvalidConfig +from tests import DATA_DIRECTORY + + +class TestConfig(unittest.TestCase): + def test_read_from_file(self): + filename = os.path.join(DATA_DIRECTORY, 'config', 'config.json') + + conf = Config() + conf.read_from_file(filename) + + self.assertEqual(conf['name'], 'stonemason') + + def test_read_from_stream(self): + filename = os.path.join(DATA_DIRECTORY, 'config', 'config.json') + + conf = Config() + with open(filename, 'r') as fp: + conf.read_from_stream(fp) + + self.assertEqual(conf['name'], 'stonemason') + + def test_read_from_object(self): + Foo = namedtuple('Foo', 'name') + obj = Foo('stonemason') + + conf = Config() + conf.read_from_object(obj) + + self.assertEqual(conf['name'], 'stonemason') + + def test_read_from_dict(self): + obj = dict(name='stonemason') + conf = Config() + conf.read_from_dict(obj) + self.assertEqual(conf['name'], 'stonemason') + + def test_error_file_not_found(self): + bad_filename = os.path.join(DATA_DIRECTORY, 'config', 'foo') + + conf = Config() + self.assertRaises(FileNotFound, conf.read_from_file, bad_filename) + + def test_error_parse(self): + filename = os.path.join(DATA_DIRECTORY, 'config', 'bad_config.json') + + conf = Config() + self.assertRaises(InvalidConfig, conf.read_from_file, filename) From b700eb84264ff94a35e89dc7d41bbd21804587cd Mon Sep 17 00:00:00 2001 From: ray Date: Thu, 15 Jan 2015 15:04:54 +0800 Subject: [PATCH 033/179] DOC: Add documents for config module --- docs/config.rst | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/config.rst b/docs/config.rst index 6993808..3177556 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -1,5 +1,23 @@ +StoneMason Config +================= + + +The StoneMason Config is used to control how providers and renderers work. +Currently, Only Json Config is available. + + Config -====== +------ + +.. automodule:: stonemason.mason.config + :members: + +.. autoclass:: stonemason.mason.config.Config + :members: +Theme +----- +.. automodule:: stonemason.mason.theme + :members: From 4864d27788660d7b2164c4bc0d8fd38e997acb50 Mon Sep 17 00:00:00 2001 From: ray Date: Thu, 15 Jan 2015 15:18:09 +0800 Subject: [PATCH 034/179] DOC: Fix some document typo error. --- stonemason/mason/config/config.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/stonemason/mason/config/config.py b/stonemason/mason/config/config.py index 7db7135..555c5fb 100644 --- a/stonemason/mason/config/config.py +++ b/stonemason/mason/config/config.py @@ -55,7 +55,7 @@ def read_from_file(self, filename): :param filename: The name of the config file. :type filename: str - :return: return true if succeed. + :return: Return true if succeed. :returns: bool """ if not os.path.exists(filename): @@ -64,28 +64,26 @@ def read_from_file(self, filename): with open(filename) as fp: return self.read_from_stream(fp) - - def read_from_stream(self, fp): + def read_from_stream(self, stream): """Read config from stream. Read config from a file-like object and return true if succeed. - :param fp: A file-like object. - :type fp: FileIO - :return: return true if succeed. + :param stream: A file-like object. + :type stream: FileIO + :return: Return true if succeed. :returns: bool """ p = ConfigParser() try: - properties = p.parse(fp.read()) + properties = p.parse(stream.read()) except ConfigParserError: raise InvalidConfig self.update(properties) return True - def read_from_object(self, obj): """Read config from a python object. From e4e77e2ee0ff2e64a26d5773fc65139896fe7103 Mon Sep 17 00:00:00 2001 From: Kotaimen Date: Thu, 15 Jan 2015 15:47:12 +0800 Subject: [PATCH 035/179] Feature: Added memcached based tile cache, using pylibmc as driver --- README.md | 2 +- docs/pkg_tilecache.rst | 14 +- setup.py | 2 +- stonemason/provider/pyramid/tile.py | 2 +- stonemason/provider/tilecache/__init__.py | 4 +- stonemason/provider/tilecache/memcache_.py | 158 ++++++++++++++++++ stonemason/provider/tilecache/tilecache.py | 44 ++--- .../stonemason/provider/tilecache/__init__.py | 5 + .../provider/tilecache/test_memcache.py | 29 ++++ 9 files changed, 234 insertions(+), 26 deletions(-) create mode 100644 stonemason/provider/tilecache/memcache_.py create mode 100644 tests/stonemason/provider/tilecache/__init__.py create mode 100644 tests/stonemason/provider/tilecache/test_memcache.py diff --git a/README.md b/README.md index e518b4c..6c6abc3 100644 --- a/README.md +++ b/README.md @@ -32,5 +32,5 @@ Similar solutions: - imagemagick>=6.0 (Optional) - PostgreSQL>=9.1, PostGIS>=2.1 (Optional) - redis>=2.8 (Optional) -- memcached>=1.4 +- pyblibmc diff --git a/docs/pkg_tilecache.rst b/docs/pkg_tilecache.rst index c6fb645..55b6e09 100644 --- a/docs/pkg_tilecache.rst +++ b/docs/pkg_tilecache.rst @@ -2,8 +2,16 @@ Tile Cache ========== -Interface ---------- - .. autoclass:: stonemason.provider.tilecache.TileCache :members: + + +Memcached +--------- + +.. autoclass:: stonemason.provider.tilecache.MemTileCache + :members: + + + + diff --git a/setup.py b/setup.py index ab8b885..168914e 100644 --- a/setup.py +++ b/setup.py @@ -50,7 +50,7 @@ def find_version(*file_paths): 'six>=1.8.0', 'Flask>=0.10', 'Pillow>=2.3.0', - 'pylibmc>=1.4.1', + 'pylibmc>=1.4.0', ] tests_require = [ diff --git a/stonemason/provider/pyramid/tile.py b/stonemason/provider/pyramid/tile.py index fea337e..ceff37e 100644 --- a/stonemason/provider/pyramid/tile.py +++ b/stonemason/provider/pyramid/tile.py @@ -151,7 +151,7 @@ def __new__(cls, index=None, data=None, assert isinstance(data, bytes) assert isinstance(mimetype, six.string_types) assert isinstance(mtime, float) - assert isinstance(etag, six.binary_type) + assert isinstance(etag, six.string_types) return _Tile.__new__(cls, index, data, mimetype, mtime, etag) diff --git a/stonemason/provider/tilecache/__init__.py b/stonemason/provider/tilecache/__init__.py index 21cc268..50b85aa 100644 --- a/stonemason/provider/tilecache/__init__.py +++ b/stonemason/provider/tilecache/__init__.py @@ -10,4 +10,6 @@ A cache of tiles. """ -from .tilecache import TileCache +from .tilecache import TileCache, TileCacheError +from .memcache_ import MemTileCache + diff --git a/stonemason/provider/tilecache/memcache_.py b/stonemason/provider/tilecache/memcache_.py new file mode 100644 index 0000000..5e84477 --- /dev/null +++ b/stonemason/provider/tilecache/memcache_.py @@ -0,0 +1,158 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/12/15' + +""" + stonemason.provider.tilecache.memcache_ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Memcached tile cache +""" + +import re +import json +import pylibmc + +from .tilecache import TileCache, TileCacheError +from stonemason.provider.pyramid import Tile, TileIndex + + +class MemTileCache(TileCache): + """A tile cache based on `memcached` protocol backend. + + .. Note:: + + `memcached` has a limit on cache object size, usually its ``4MB``. + + Tile cache based on `memcached`_ protocol backend using `pylibmc`_ driver. + The backend does not necessary being `memcached` itself, any storage or + proxy talks its protocol will work, like `couchbase`_ or `nutcracker`_. + + .. _memcached: + .. _pylibmc: + .. _couchbase: + .. _nutcracker: + + `servers` + + A list of servers, the list is sent to :class:`pylibmc.Client`, default + value is ``['localhost:11211',]``. + + .. seealso:: `pylibmc` `example `_. + + `behaviors` + + Set `pylibmc` client behaviours, default is ``{'tcp_nodelay': True, 'ketama': True}``. + + .. seealso:: `pylibmc` `behaviours `_. + + :param servers: A sequence of strings specifying the servers to use. + :param binary: Whether to use `memcached` binary protocol, default is ``False``. + :param behaviors: `pylibmc` behaviors. + """ + + def __init__(self, servers=('localhost:11211', ), binary=False, + behaviors=None): + super(TileCache, self).__init__() + if behaviors is None: + behaviors = {'tcp_nodelay': True, + 'ketama': True} + self.connection = pylibmc.Client(servers, binary=binary, + behaviors=behaviors) + # Verify connection + self.connection.get_stats() + + + def _make_key(self, tag, index): + """Generate `memcached` keys from given `tag` and `index`. + + A tile is stored in three objects in `memcached`: + + ``{tag}/{z}/{x}/{y}`` + + tile data as binary data. + + ``{tag}/{z}/{x}/{y}~metadata`` + + ``(mimetype, mtime, etag)`` tuple as `json`. + + ``{tag}/{z}/{x}/{y}~lock`` + + Optional lock. + """ + # tag/z/x/y + # tag/z/x/y~metadata + # tag/z/x/y~lock + assert re.match(r'[a-zA-Z][a-zA-Z0-9_\-%]+', tag) + assert isinstance(index, TileIndex) + coord = '/'.join(map(str, index)) + + key = '%s/%s' % (tag, coord) + metadata_key = key + '~metadata' + lock_key = key + '~lock' + + return key, metadata_key, lock_key + + def _make_metadata(self, tile): + return json.dumps((tile.mimetype, tile.mtime, tile.etag)) + + def _load_metadata(self, data): + return tuple(json.loads(data)) + + def get(self, tag, index): + key, metadata_key, _ = self._make_key(tag, index) + + # get data and metadata in a single call + values = self.connection.get_multi([key, metadata_key]) + + try: + data = values[key] + metadata = values[metadata_key] + except KeyError: + # only successful when both keys are retrieved + return None + + try: + mimetype, mtime, etag = self._load_metadata(metadata) + except ValueError: + raise TileCacheError('Invalid metadata: "%s"' % metadata_key) + + return Tile(index, data, mimetype, mtime, etag) + + def put(self, tag, tile, ttl=0): + key, metadata_key, _ = self._make_key(tag, tile.index) + metadata = self._make_metadata(tile) + data = {key: tile.data, + metadata_key: metadata} + + failed = self.connection.set_multi(data, time=ttl) + if len(failed) > 0: + raise TileCacheError('Tile not successfully writen: "%s"' % failed) + + def has(self, tag, index): + key, _, _ = self._make_key(tag, index) + + return self.connection.touch(key) + + def retire(self, tag, index): + key, metadata_key, _ = self._make_key(tag, index) + + self.connection.delete_multi([key, metadata_key]) + + def put_multi(self, tag, tiles, ttl=0): + data = {} + for tile in tiles: + key, metadata_key, _ = self._make_key(tag, tile.index) + data[key] = tile.data + data[metadata_key] = self._make_metadata(tile) + + failed = self.connection.set_multi(data, time=ttl) + if len(failed) > 0: + raise TileCacheError('Tile not successfully writen: "%s"' % failed) + + def close(self): + self.connection.disconnect_all() + + def flush(self): + self.connection.flush_all() diff --git a/stonemason/provider/tilecache/tilecache.py b/stonemason/provider/tilecache/tilecache.py index 7eed94b..0714a4f 100644 --- a/stonemason/provider/tilecache/tilecache.py +++ b/stonemason/provider/tilecache/tilecache.py @@ -7,7 +7,7 @@ stonemason.provider.tilecache.tilecache ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - A do nothing tile cache as interface. + A do nothing tile cache. """ import re @@ -15,7 +15,11 @@ from stonemason.provider.pyramid import TileIndex, Tile -class TileNotFound(Exception): +class TileCacheError(Exception): + pass + + +class TileNotFound(TileCacheError): pass @@ -30,23 +34,20 @@ class TileCache(object): ``'[a-zA-Z][a-zA-Z0-9_-%]+``, while `index` must be an :class:`~stonemason.provider.pyramid.TileIndex` object. + `TileCache` is designed to be shared between all `themes` and `layers` in + a particular deployment. + .. note:: - The cache object designed to be shared between all themes and layers. + Being a thin wrapper layer, CAP model is dependent on the actual - cache system implement. + cache system implement, check implement for details. """ def __init__(self): pass - def _make_key(self, tag, index): - # tag/z/x/y - assert re.match(r'[a-zA-Z][a-zA-Z0-9_-%]+', tag) - assert isinstance(index, TileIndex) - return '%s/%s' % (tag, '/' % index) - def get(self, tag, index): - """ Retrieve a tile from cache, return `None` on miss. + """Retrieve a tile from cache, return `None` on miss. :param tag: Tag of the tile. :type tag: str @@ -58,7 +59,7 @@ def get(self, tag, index): return None def has(self, tag, index): - """ Check whether give tag&index exists in the cache. + """Check whether give tag&index exists in the cache. Implement may provide a better to check existence instead of actually retrieve tile data. @@ -73,7 +74,7 @@ def has(self, tag, index): return self.get(tag, index) is not None def put(self, tag, tile, ttl=0): - """ Put a tile into the cache with given tag. + """Put a tile into the cache with given tag. Put a tile object into the cache, overwriting any existing one, the tile will be expired after given `ttl`. @@ -85,11 +86,12 @@ def put(self, tag, tile, ttl=0): :param ttl: Number of seconds before expiration, `0` means never. :type ttl: int :return: None + :raise: :class:`~stonemason.provider.tilecache.TileCacheError` when fail. """ pass def retire(self, tag, index): - """ Delete tile with given tag&index from cache. + """Delete tile with given tag&index from cache. If `tile` does not present in cache, this operation has no effect. @@ -102,7 +104,7 @@ def retire(self, tag, index): pass def put_multi(self, tag, tiles, ttl=0): - """ Put many tiles of with same tag in one call. + """Put many tiles of with same tag in one call. Usually this operation is much faster if batching is supported by underlying driver. Note usually `put_multi` is *not* atomic. @@ -120,7 +122,7 @@ def put_multi(self, tag, tiles, ttl=0): self.put(tag, tile, ttl=ttl) def has_all(self, tag, indexes): - """ Check whether all given tag and tile indexes exist in the cache + """Check whether all given tag and tile indexes exist in the cache Usually this operation is much faster if batching is supported by underlying driver. @@ -135,7 +137,7 @@ def has_all(self, tag, indexes): return all(self.has(tag, index) for index in indexes) def lock(self, tag, index, ttl=0.1): - """ Mark a particular tile as locked for a specified amount of time. + """Mark a particular tile as locked for a specified amount of time. Mark a tile with given tag and index as locked until ttl expires. Return a CAS integer which can be used to unlock the tile. @@ -153,7 +155,7 @@ def lock(self, tag, index, ttl=0.1): return 0xfeed def unlock(self, tag, index, cas): - """ Unlock a particular tile using given `cas`. + """Unlock a particular tile using given `cas`. The tile must have been locked with the specified `cas`. @@ -169,5 +171,9 @@ def unlock(self, tag, index, cas): return True def flush(self): - """ Delete everything in the cache. """ + """Delete everything in the cache.""" pass + + def close(self): + """Release any underlying resources.""" + pass \ No newline at end of file diff --git a/tests/stonemason/provider/tilecache/__init__.py b/tests/stonemason/provider/tilecache/__init__.py new file mode 100644 index 0000000..d1e74fd --- /dev/null +++ b/tests/stonemason/provider/tilecache/__init__.py @@ -0,0 +1,5 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/14/15' + diff --git a/tests/stonemason/provider/tilecache/test_memcache.py b/tests/stonemason/provider/tilecache/test_memcache.py new file mode 100644 index 0000000..17ea2c1 --- /dev/null +++ b/tests/stonemason/provider/tilecache/test_memcache.py @@ -0,0 +1,29 @@ +# -*- encoding: utf-8 -*- + +__author__ = 'kotaimen' +__date__ = '1/15/15' + +import unittest +import time + +from stonemason.provider.pyramid import Tile, TileIndex +from stonemason.provider.tilecache import MemTileCache + + +class TestMemTileCache(unittest.TestCase): + def setUp(self): + self.cache = MemTileCache() + + def tearDown(self): + self.cache.close() + + def test_put(self): + index = TileIndex(2, 3, 4) + timestamp = time.time() + tile = Tile(index, b'a tile', 'text/plain', timestamp) + self.cache.put('layer', tile) + + + +if __name__ == '__main__': + unittest.main() From d84ae8158c6dcceff63daf1b05b6af55dcf3b0f9 Mon Sep 17 00:00:00 2001 From: ray Date: Thu, 15 Jan 2015 21:25:15 +0800 Subject: [PATCH 036/179] DOC: Add hand made logo for stonemason --- docs/_static/logo.png | Bin 213797 -> 52832 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/_static/logo.png b/docs/_static/logo.png index e325dcb75b2adb31f67a8c4abc41aec66cfe914f..ab3297529aa62ef8c8b5325b110554562855742e 100644 GIT binary patch literal 52832 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 literal 213797 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�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