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:

    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.

    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:

    pip install mappyfile[lark_cython]
    
  • All mappyfile dicts now have human readable output when displayed as a string:

    mf = mappyfile.open("./docs/examples/before.map")
    print(mf)
    
    # previous output
    # DefaultOrderedDict(<class 'mappyfile.ordereddict.CaseInsensitiveOrderedDict'>, 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