File: README.rst

package info (click to toggle)
python-cligj 0.7.2-3
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 168 kB
  • sloc: python: 528; makefile: 4
file content (153 lines) | stat: -rw-r--r-- 4,593 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
cligj
======

.. image:: https://travis-ci.com/mapbox/cligj.svg
   :target: https://travis-ci.com/mapbox/cligj

.. image:: https://coveralls.io/repos/mapbox/cligj/badge.png?branch=master
   :target: https://coveralls.io/r/mapbox/cligj?branch=master

Common arguments and options for GeoJSON processing commands, using Click.

`cligj` is for Python developers who create command line interfaces for geospatial data.
`cligj` allows you to quickly build consistent, well-tested and interoperable CLIs for handling GeoJSON.


Arguments
---------

``files_in_arg``
Multiple files

``files_inout_arg``
Multiple files, last of which is an output file.

``features_in_arg``
GeoJSON Features input which accepts multiple representations of GeoJSON features
and returns the input data as an iterable of GeoJSON Feature-like dictionaries

Options
--------

``verbose_opt``

``quiet_opt``

``format_opt``

JSON formatting options
~~~~~~~~~~~~~~~~~~~~~~~

``indent_opt``

``compact_opt``

Coordinate precision option
~~~~~~~~~~~~~~~~~~~~~~~~~~~
``precision_opt``

Geographic (default), projected, or Mercator switch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
``projection_geographic_opt``

``projection_projected_opt``

``projection_mercator_opt``

Feature collection or feature sequence switch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
``sequence_opt``

``use_rs_opt``

GeoJSON output mode option
~~~~~~~~~~~~~~~~~~~~~~~~~~
``geojson_type_collection_opt``

``geojson_type_feature_opt``

``def geojson_type_bbox_opt``

Example
-------

Here's an example of a command that writes out GeoJSON features as a collection
or, optionally, a sequence of individual features. Since most software that
reads and writes GeoJSON expects a text containing a single feature collection,
that's the default, and a LF-delimited sequence of texts containing one GeoJSON
feature each is a feature that is turned on using the ``--sequence`` option.
To write sequences of feature texts that conform to the `GeoJSON Text Sequences
standard <https://tools.ietf.org/html/rfc8142>`__ (and might contain
pretty-printed JSON) with the ASCII Record Separator (0x1e) as a delimiter, use
the ``--rs`` option

.. warning:: Future change warning
   GeoJSON sequences (`--sequence`), not collections (`--no-sequence`), will be
   the default in version 1.0.0.


.. code-block:: python

    import click
    import cligj
    import json

    def process_features(features):
        for feature in features:
            # TODO process feature here
            yield feature

    @click.command()
    @cligj.features_in_arg
    @cligj.sequence_opt
    @cligj.use_rs_opt
    def pass_features(features, sequence, use_rs):
        if sequence:
            for feature in process_features(features):
                if use_rs:
                    click.echo(u'\x1e', nl=False)
                click.echo(json.dumps(feature))
        else:
            click.echo(json.dumps(
                {'type': 'FeatureCollection',
                 'features': list(process_features(features))}))

On the command line, the generated help text explains the usage

.. code-block:: console

    Usage: pass_features [OPTIONS] FEATURES...

    Options:
    --sequence / --no-sequence  Write a LF-delimited sequence of texts
                                containing individual objects or write a single
                                JSON text containing a feature collection object
                                (the default).
    --rs / --no-rs              Use RS (0x1E) as a prefix for individual texts
                                in a sequence as per http://tools.ietf.org/html
                                /draft-ietf-json-text-sequence-13 (default is
                                False).
    --help                      Show this message and exit.

And can be used like this

.. code-block:: console

    $ cat data.geojson
    {'type': 'FeatureCollection', 'features': [{'type': 'Feature', 'id': '1'}, {'type': 'Feature', 'id': '2'}]}

    $ pass_features data.geojson
    {'type': 'FeatureCollection', 'features': [{'type': 'Feature', 'id': '1'}, {'type': 'Feature', 'id': '2'}]}

    $ cat data.geojson | pass_features
    {'type': 'FeatureCollection', 'features': [{'type': 'Feature', 'id': '1'}, {'type': 'Feature', 'id': '2'}]}

    $ cat data.geojson | pass_features --sequence
    {'type': 'Feature', 'id': '1'}
    {'type': 'Feature', 'id': '2'}

    $ cat data.geojson | pass_features --sequence --rs
    ^^{'type': 'Feature', 'id': '1'}
    ^^{'type': 'Feature', 'id': '2'}

In this example, ``^^`` represents 0x1e.