Releases -------- 1.0.0 28/09/2023 ++++++++++++++++ In celebration of becoming an official `OSGeo Community Project `_, a version ``1.0.0`` release is now out! + **Support for Python 2.7 has now been dropped.** See `#166 `_ - Drop Python 2.7 support. The codebase has had all Python2 specific code removed - see `#188 `_. + **Breaking Change** - in the ``MapfileToDict`` class the parameter ``transformerClass`` has been renamed ``transformer_class``. An example of how to fix this is shown below: .. code-block:: python from mappyfile.transformer import MapfileToDict from mappyfile_colors import ColorsTransformer m = MapfileToDict( include_position=True, include_comments=True, # replace the following parameter # transformerClass=ColorsTransformer, transformer_class=ColorsTransformer, conversion_type=None, include_color_names=True, ) + **Breaking Change** - ``LAYER`` ``DATA`` has been changed in the schema from a list to a simple string. .. code-block:: python layer = { '__type__': 'layer', // pre v1 the data clause had to be in a list // 'data': ['/path/to/data'] // in v1 this should now be a string 'data': '/path/to/data' } mappyfile.dumps(layer) + Support added for `lark_cython `_ - see `#178 `_ - thanks @erezsh. To use ``lark_cython`` is as simple as installing the option with ``pip``: .. code-block:: bash pip install mappyfile[lark_cython] + All mappyfile dicts now have human readable output when displayed as a string: .. code-block:: python mf = mappyfile.open("./docs/examples/before.map") print(mf) # previous output # DefaultOrderedDict(, CaseInsensitiveOrderedDict([('__type__', 'map'),.. # new output { "__type__": "map", "layers": [ { "__type__": "layer", "name": "Layer1", "type": "POLYGON" }, + Approach to resolving JSON references updated due to the deprecated ``jsonschema.RefResolver`` - see `this link `_, the associated JSONSchema `pull request `_ and the `migration approach `_. Other improvements and fixes in the v1.0.0 release: + `#196 `_ - Code base fixes for ``Prospector`` warnings + `#195 `_ - Update test suite from latest msautotests + `#194 `_ - Docs overhaul in preparation for v1 release + `#193 `_ - Update to ``jsonschema`` v4 and replace deprecated ``RefResolver`` + `#191 `_ - Simplify processing of comments + `#189 `_ - Add type hints to the code base + `#153 `_ - Support querying items without the given key in ``utils.findunique()``- thanks @DonQueso89 for fix + Schema fixes for ``grid``, ``label``, ``style``, ``leader``, add ``flatgeobuf`` + Code reformatted using `black `_ Resolution of long-standing parsing issues, and all msautotest examples now pass successfully: + `#48 `_ - SYMBOL ambiguity + `#98 `_ - Unquoted attribute names fail to parse 0.9.7 03/04/2022 ++++++++++++++++ + Fix ""ResourceWarning: unclosed"" when reading mapfile.lark in Python 3.10 + `#151 `_ - Updates for COMPOSITE blocks + `#150 `_ - Unknown COMPOP "SOFT-LIGHT" and error with several lines with COMPFILTER with validate 0.9.6 29/03/2022 ++++++++++++++++ + Schema fixes for GRID LABELFORMAT and set max versions for MAP DATAPATTERN and TEMPLATEPATTERN + Allow TRUE/FALSE values for OUTPUTFORMAT TRANSPARENT 0.9.5 01/03/2022 ++++++++++++++++ + `#147 `_ - Create list objects for containers when modifying dicts + `#146 `_ - Add COMPOSITE validation + `#145 `_ - layers.insert fails with dict error + `#144 `_ - Invalid value in COMPOSITE - 'compfilter' + `#140 `_ - New feature: group complex types at the end 0.9.4 22/02/2022 ++++++++++++++++ + `#137 `_ - Checking mapfile dict properties creates invalid empty dictionaries + `#119 `_ - STYLE GEOMTRANSFORM 'labelcenter' + `#143 `_ - Automate schema building + `#142 `_ - Allow newer versions of jsonschema for py3 + `#141 `_ - Update and fix Continuous Integration + `#139 `_ - Feature: align values in column + `#138 `_ - Update schema based on new Mapfile validation rules 0.9.3 13/12/2021 ++++++++++++++++ + Adds a new ``mappyfile.create`` function to allow creation of Mapfile objects with default values + Update the Mapfile schema to include ``default`` values for keywords 0.9.2 28/08/2021 ++++++++++++++++ + Add the "idw" to ``LAYER`` ``CONNECIONTYPE`` + Correct "minVersion" of ``LABEL`` ``EXPRESSION`` + Add validation to ``LEGEND`` ``LABELS`` + Add correct validation for ``MAP`` ``LEGEND`` and ``OUTPUTFORMAT`` + Add "byte" to ``OUTPUTFORMAT`` ``IMAGEMODE`` + Add "maxVersion" to ``WEB`` ``LOG`` + `#120 `_ - Expression list element with apostrophe throws error + `#118 `_ - LABEL -> FONT and LABEL -> POSITION gives errors in validate when attributes are used 0.9.1 23/12/2020 ++++++++++++++++ + Allow any version of lark-parser > 0.9 to be used + Fixes for requirements for Python 2.7 + `#115 `_ - Fix for issue #109 (OFFSET numeric and attribute pairs) + `#114 `_ - Style OFFSET: mixed attribute and numerical value fail to parse 0.9.0 14/07/2020 ++++++++++++++++ + Schemas updated to include ``minVersion`` and ``maxVersion`` metadata to define which Mapfile keywords are valid for different versions of MapServer + A new ``schema`` command line tool to export Mapfile schemas for different versions of MapServer + Allow Mapfile validation based on a specific version of MapServer + Add better error message when incorrect dicts are passed to printer + Add py38 to continuous integration testing + Add command line scripts to continuous integration testing + Fix ``CONNECTIONOPTIONS`` formatted output + Update to lark-parser 0.9.0 + `#109 `_ - Add validation based on MapServer version + `#96 `_ - Unquoted Unicode strings cause parsing errors + `#102 `_ - Added support for accented-latin in unquoted strings (Issue #96) - thanks @erezsh + `#97 `_ - Allow for negative expressions + `#101 `_ - Fix for issue #97 (unary negation) - thanks @erezsh + `#85 `_ - Coding of NOT logical expression + `#100 `_ - Allowing non-bracketed NOT expression (Issue #85) - thanks @erezsh 0.8.4 11/01/2020 ++++++++++++++++ + Update to lark-parser 0.7.8 + `#95 `_ - Allow Mapfile input from ``io.StringIO`` as well as from a file - thanks @ianturton for pull request + `#93 `_ - fix to ensure Mapfiles are closed after reading + `#89 `_ - List expressions with spaces in the attributes fail to parse - thanks @ianturton for fix 0.8.3 06/10/2019 ++++++++++++++++ + Update to lark-parser 0.7.7 + Update to jsonref 0.2 + Add automated releases to GitHub using Appveyor + Add automated releases to PyPI using Appveyor + Add missing CLASS properties to JSON schema + Additional tests for CaseInsensitiveOrderedDict and EXPRESSIONs + `#37 `_ - LIKE not recognised in FILTER - thanks @ianturton for fix + `#87 `_ - JSON schema add join tag- thanks @hugbe8 for fix 0.8.2 29/03/2019 ++++++++++++++++ + `#74 `_ - Map files containing Unicode can fail in mappyfile.load with python2.7 thanks @ianturton + `#73 `_ - Deepcopy not working (Python3 >=3.5) - thanks @guardeivid + Add support for CLUSTER keyword along with schema changes and tests 0.8.1 27/02/2019 ++++++++++++++++ + Fix comments on root objects in a MapFile + Fix issues with duplicated METADATA keys and comments + Fix ReadTheDocs build + Add more sample MapFiles for testing to the project 0.8.0 24/02/2019 ++++++++++++++++ + Update code to work with Lark 0.6.6 (see #71) + New end_comment option for pprint - Add a comment with the block type at each closing END statement e.g. END # MAP (see request `#69 `_) + Add ``**kwargs`` to main API to allow greater flexibility with plugins + Fix DeprecationWarnings relating to Python 3.7.2 (thanks @tigerfoot for the report) + Tested use with new jsonschema 3.0.0 release 0.7.6 (13/10/2018) ++++++++++++++++++ + Deprecated ``write`` function removed from the API and codebase + Update OFFSET validation to allow attribute bindings - see https://github.com/mapserver/docs/pull/256 + `#68 `_ - Support pickling of DefaultOrderedDict in Python3 + `#67 `_ - Fix deprecation warnings for grammar regular expressions in Python 3.6 + `#65 `_ - Handle hexadecimal color translucence 0.7.5 (14/09/2018) ++++++++++++++++++ + Save tokens for value lists + Update README and fix example code 0.7.4 (07/09/2018) ++++++++++++++++++ + Support for modulus operator + Allow custom transformers to be used with kwargs 0.7.3 (23/08/2018) ++++++++++++++++++ + Two new CLI programs - ``format`` and ``validate`` + Update of Lark parser to 0.6.4 (fixes some validation line number issues) + Improvements to validation log messages + Normalise include paths 0.7.2 (24/07/2018) ++++++++++++++++++ + Update of Lark parser to 0.6.2 and associated changes - thanks @erezsh + ``mappyfile.findall`` returns a list rather than a generator + ``SYMBOLSET`` files now supported (both parsing and transforming) + `#63 `_ - Set the PROJECTION value correctly for single strings + `#61 `_ - Remove quotes in mappyfile.findall() 0.7.1 (10/07/2018) ++++++++++++++++++ + **Breaking Change** ``utils.dictfind`` renamed ``utils.findkey`` + new dictionary update function - allowing for easier creation of Mapfiles using YAML + allow any custom hidden metadata tags of the form ``__property__`` to be used in dicts for custom processing + Schema validation updates including RANGEITEM and CLUSTER + Appveyor builds added + `#56 `_ Can't parse expressions with a : in them + `#54 `_ fix windows cwd name issue in includes - thanks @ianturton 0.7.0 (04/04/2018) ++++++++++++++++++ + Finalise validation API + Finalised Mapfile comments API + New ``dictfind`` function + Allow non-string function parameters in expressions + Use of CaseInsensitiveOrderedDict throughout transformer + UTF comments + JSONSchema updates and fixes 0.6.2 (24/02/2018) ++++++++++++++++++ + **Breaking Change** - the ``mappyfile.load`` method now accepts a file-like object rather than a filename to match the usage in other Python libraries. A new ``mappyfile.open`` method allows opening directly with a filename. + New preserve comments feature - *experimental* + Add basic plugin system + Updates to schema docs (fixes for POSITION, AUTO, and added new default values) + Fix issue with comments on INCLUDE lines + `#50 `_ Allow END keyword for GEOTRANSFORM parameter + `#49 `_ Allow non-ASCII characters in parser + `#47 `_ Add in missing expression operators - divide, multiply, and power. 0.6.1 (06/02/2018) ++++++++++++++++++ + Fixes to setup.py 0.6.0 (17/01/2018) ++++++++++++++++++ + Extensive refactoring of grammar and transformer + Removal of Earley grammar + Whitespace ignored when parsing + JSON schema fixes + `#45 `_ Set fixed dependency ranges + *Experimental* - inclusion of token positions + *Experimental* - inclusion of validation comments 0.5.1 (05/01/2018) ++++++++++++++++++ + `#45 `_ Remove unnecessary parser keyword 0.5.0 (01/11/2017) ++++++++++++++++++ + Add in jsonschema and validation class + `#44 `_ Includes should be relative to Mapfile 0.4.3 (28/08/2017) ++++++++++++++++++ + `#36 `_ Create a unique logger for mappyfile logger + `#35 `_ Add support for missing arithmetic expressions and run flake8 within tox - thanks @loicgrasser + `#33 `_ Fix max recursion limit count - thanks @loicgrasser 0.4.0 (18/08/2017) ++++++++++++++++++ + Add a LALR grammar and parser, now a 8k line Mapfile is now parsed 12x faster + Add a experimental validator module using jsonschema + `#30 `_ Flake8 support - thanks @loicgrasser + `#28 `_ Add support for relative path for nested include - thanks @loicgrasser + `#25 `_ Expression grammar not allowing ``!`` 0.3.2 +++++ + Revert back to a single grammar, but add linebreaks before all ``END`` keywords to keep acceptable performance 0.3.1 +++++ + Add in alternative grammar that allows for no line breaks between composites, and fall back to this if parsing fails (otherwise most use cases suffer a 3x performance hit) 0.3.0 +++++ + Allow multiple composites to be parsed directly (e.g. ``CLASS..END CLASS..END``) + Allow direct parsing of the ``METADATA`` and ``VALIDATION`` blocks + UTF-8 checks when opening a Mapfile + `#23 `_ Alternative NE and EQ comparisons not defined + `#22 `_ Handle AUTO Projection setting + `#21 `_ INCLUDES throw error when no cwd set + `#20 `_ Only the first FORMATOPTION is kept after transform + `#19 `_ IMAGEMODE FEATURE throws parsing error + `#18 `_ CONFIG keyword not capitalised Older Releases ++++++++++++++ + 0.2.2 - various fixes to grammar, and allow for alternate comparison operators + 0.2.1 - new ``findall`` function, see https://github.com/geographika/mappyfile/pull/12 - thanks @Jenselme + 0.2.0 - switch to Lark parser + 0.1.0 - initial release