Skip to main content

PostgreSQL Languages AST and statements prettifier

Project description

Author:

Lele Gaifax

Contact:
lele@metapensiero.it
License:

GNU General Public License version 3 or later

Status:
Build status Documentation status

This is a Python 3 module that exposes the parse tree of a PostgreSQL statement (extracted by the almost standard PG parser repackaged as a standalone static library by libpg_query) as set of interconnected nodes, usually called an abstract syntax tree.

I needed a better SQL reformatter than the one implemented by sqlparse, and was annoyed by a few glitches (subselects in particular) that ruins the otherwise excellent job it does, considering that it is a generic library that tries to swallow many different SQL dialects.

When I found psqlparse I decided to try implementing a PostgreSQL focused tool: at the beginning it’s been easier than I feared, but I quickly hit some shortcomings in that implementation, so I opted for writing my own solution restarting from scratch, with the following goals:

  • target only Python 3.4+

  • target PostgreSQL 10

  • use a more dynamic approach to represent the parse tree, with a twofold advantage:

    1. it is much less boring to code, because there’s no need to write one Python class for each PostgreSQL node tag

    2. the representation is version agnostic, it can be adapted to newer/older Elephants in a snap

  • allow exploration of parse tree in both directions, because I realized that some kinds of nodes require that knowledge to determine their textual representation

  • avoid introducing arbitrary renames of tags and attributes, so what you read in PostgreSQL documentation/sources[*] is available without the hassle of guessing how a symbol has been mapped

  • use a zero copy approach, keeping the original parse tree returned from the underlying libpg_query functions and have each node just borrow a reference to its own subtree

Introduction

At the lower level the module exposes two libpg_query functions, parse_sql() and parse_plpgsql(), that take respectively an SQL statement and a PLpgSQL statement and return a parse tree as a hierarchy of Python dictionaries, lists and scalar values. In some cases these scalars correspond to some C typedef enums, that are automatically extracted from the PostgreSQL headers mentioned above and are available as pglast.enums.

At a higher level that tree is represented by three Python classes, a Node that represents a single node, a List that wraps a sequence of nodes and a Scalar for plain values such a strings, integers, booleans or none.

Every node is identified by a tag, a string label that characterizes its content that is exposed as a set of attributes as well as with a dictionary-like interface (technically they implements both a __getattr__ method and a __getitem__ method). When asked for an attribute, the node returns an instance of the base classes, i.e. another Node, or a List or a Scalar, depending on the data type of that item. When the node does not contain the requested attribute it returns a singleton Missing marker instance.

A List wraps a plain Python list and may contains a sequence of Node instances, or in some cases other sub-lists, that can be accessed with the usual syntax, or iterated.

Finally, a Scalar carries a single value of some type, accessible through its value attribute.

On top of that, the module implements two serializations, one that transforms a Node into a raw textual representation and another that returns a prettified representation. The latter is exposed by the pgpp CLI tool, see below for an example.

Installation

As usual, the easiest way is with pip:

$ pip install pglast

Alternatively you can clone the repository:

$ git clone https://github.com/lelit/pglast.git --recursive

and install from there:

$ pip install ./pglast

Development

There is a set of makefiles implementing the most common operations, a make help will show a brief table of contents. A comprehensive test suite, based on pytest, covers 98% of the source lines.

Examples of usage

  • Parse an SQL statement and get its AST root node:

    >>> from pglast import Node, parse_sql
    >>> root = Node(parse_sql('SELECT foo FROM bar'))
    >>> print(root)
    None=[1*{RawStmt}]
  • Recursively traverse the parse tree:

    >>> for node in root.traverse():
    ...   print(node)
    ...
    None[0]={RawStmt}
    stmt={SelectStmt}
    fromClause[0]={RangeVar}
    inh=<True>
    location=<16>
    relname=<'bar'>
    relpersistence=<'p'>
    op=<0>
    targetList[0]={ResTarget}
    location=<7>
    val={ColumnRef}
    fields[0]={String}
    str=<'foo'>
    location=<7>

    As you can see, the representation of each value is mnemonic: {some_tag} means a Node with tag some_tag, [X*{some_tag}] is a List containing X nodes of that particular kind[] and <value> is a Scalar.

  • Get a particular node:

    >>> from_clause = root[0].stmt.fromClause
    >>> print(from_clause)
    fromClause=[1*{RangeVar}]
  • Obtain some information about a node:

    >>> range_var = from_clause[0]
    >>> print(range_var.node_tag)
    RangeVar
    >>> print(range_var.attribute_names)
    dict_keys(['relname', 'inh', 'relpersistence', 'location'])
    >>> print(range_var.parent_node)
    stmt={SelectStmt}
  • Iterate over nodes:

    >>> for a in from_clause:
    ...     print(a)
    ...     for b in a:
    ...         print(b)
    ...
    fromClause[0]={RangeVar}
    inh=<True>
    location=<16>
    relname=<'bar'>
    relpersistence=<'p'>
  • Reformat a SQL statement[] from the command line:

    $ echo "select a,b,c from sometable" | pgpp
    SELECT a
         , b
         , c
    FROM sometable
    
    $ echo "select a,b,c from sometable" | pgpp -c
    SELECT a,
           b,
           c
    FROM sometable
    
    $ echo "select a, case when a=1 then 'singular' else 'plural' end from test" > /tmp/q.sql
    $ pgpp /tmp/q.sql
    SELECT a
         , CASE
             WHEN (a = 1)
               THEN 'singular'
             ELSE 'plural'
           END
    FROM test
    
    $ echo 'update "table" set value=123 where value is null' | pgpp
    UPDATE "table"
    SET value = 123
    WHERE value IS NULL
    
    $ echo "
    insert into t (id, description)
    values (1, 'this is short enough'),
           (2, 'this is too long, and will be splitted')" | pgpp -s 20
    INSERT INTO t (id, description)
    VALUES (1, 'this is short enough')
         , (2, 'this is too long, an'
               'd will be splitted')
  • Programmatically reformat a SQL statement:

    >>> from pglast import prettify
    >>> print(prettify('delete from sometable where value is null'))
    DELETE FROM sometable
    WHERE value IS NULL

Documentation

Latest documentation is hosted by Read the Docs at http://pglast.readthedocs.io/en/latest/

Changes

1.8 (2019-12-07)

  • Prettier CASE representation

  • New option to emit a semicolon after the last statement (issue #24)

1.7 (2019-12-01)

  • Implement NotifyStmt printer

  • Implement RuleStmt printer, thanks to Gavin M. Roy for his PR #28

  • Fix RenameStmt, properly handling object name

  • Produce Python 3.8 wheels, thanks to cibuildwheel 1.0.0

  • Support ALTER TABLE RENAME CONSTRAINT (PR #35), thanks to Ronan Dunklau

1.6 (2019-09-04)

  • Fix issue with boolean expressions precedence (issue #29)

  • Implement BitString printer

  • Support LEAKPROOF option (PR #31), thanks to Ronan Dunklau

  • Support DEFERRABLE INITIALLY DEFERRED option (PR #32), thanks to Ronan Dunklau

1.5 (2019-06-04)

  • Fix issue with RETURNS SETOF functions, a more general solution than the one proposed by Ronan Dunklau (PR #22)

  • Allow more than one empty line between statements (PR #26), thanks to apnewberry

1.4 (2019-04-06)

  • Fix wrap of trigger’s WHEN expression (issue #18)

  • Support for variadic functions (PR #19), thanks to Ronan Dunklau

  • Support ORDER / LIMIT / OFFSET for set operations (PR #20), thanks to Ronan Dunklau

  • Implement ConstraintsSetStmt and improve VariableSetStmt printers

1.3 (2019-03-28)

  • Support CROSS JOIN and timezone modifiers on time and timestamp datatypes (PR #15), thanks to Ronan Dunklau

  • Many new printers and several enhancements (PR #14), thanks to Ronan Dunklau

  • Expose the package version as pglast.__version__ (issue #12)

1.2 (2019-02-13)

  • Implement new split() function (see PR #10)

  • Implement BooleanTest printer (issue #11)

1.1 (2018-07-20)

  • No visible changes, but now PyPI carries binary wheels for Python 3.7.

1.0 (2018-06-16)

0.28 (2018-06-06)

  • Update libpg_query to 10-1.0.2

  • Support the ‘?’-style parameter placeholder variant allowed by libpg_query (details)

0.27 (2018-04-15)

  • Prettier JOINs representation, aligning them with the starting relation

0.26 (2018-04-03)

  • Fix cosmetic issue with ANY() and ALL()

0.25 (2018-03-31)

  • Fix issue in the safety belt check performed by pgpp (issue #4)

0.24 (2018-03-02)

  • Implement Null printer

0.23 (2017-12-28)

  • Implement some other DDL statements printers

  • New alternative style to print comma-separated-values lists, activated by a new --comma-at-eoln option on pgpp

0.22 (2017-12-03)

  • Implement TransactionStmt and almost all DROP xxx printers

0.21 (2017-11-22)

  • Implement NamedArgExpr printer

  • New alternative printers for a set of special functions, activated by a new --special-functions option on pgpp (issue #2)

0.20 (2017-11-21)

  • Handle special de-reference (A_Indirection) cases

0.19 (2017-11-16)

  • Fix serialization of column labels containing double quotes

  • Fix corner issues surfaced implementing some more DDL statement printers

0.18 (2017-11-14)

  • Fix endless loop due to sloppy conversion of command line option

  • Install the command line tool as pgpp

0.17 (2017-11-12)

  • Rename printers.sql to printers.dml (backward incompatibility)

  • List printer functions in the documentation, referencing the definition of related node type

  • Fix inconsistent spacing in JOIN condition inside a nested expression

  • Fix representation of unbound arrays

  • Fix representation of interval data type

  • Initial support for DDL statements

  • Fix representation of string literals containing single quotes

0.16 (2017-10-31)

  • Update libpg_query to 10-1.0.0

0.15 (2017-10-12)

  • Fix indentation of boolean expressions in SELECT’s targets (issue #3)

0.14 (2017-10-09)

  • Update to latest libpg_query’s 10-latest branch, targeting PostgreSQL 10.0 final

0.13 (2017-09-17)

  • Fix representation of subselects requiring surrounding parens

0.12 (2017-08-22)

  • New option --version on the command line tool

  • Better enums documentation

  • Release the GIL while calling libpg_query functions

0.11 (2017-08-11)

  • Nicer indentation for JOINs, making OUTER JOINs stand out

  • Minor tweaks to lists rendering, with less spurious whitespaces

  • New option --no-location on the command line tool

0.10 (2017-08-11)

  • Support Python 3.4 and Python 3.5 as well as Python 3.6

0.9 (2017-08-10)

  • Fix spacing before the $ character

  • Handle type modifiers

  • New option --plpgsql on the command line tool, just for fun

0.8 (2017-08-10)

  • Add enums subpackages to the documentation with references to their related headers

  • New compact_lists_margin option to produce a more compact representation when possible (see issue #1)

0.7 (2017-08-10)

  • Fix sdist including the Sphinx documentation

0.6 (2017-08-10)

  • New option --parse-tree on the command line tool to show just the parse tree

  • Sphinx documentation, available online

0.5 (2017-08-09)

  • Handle some more cases when a name must be double-quoted

  • Complete the serialization of the WindowDef node, handling its frame options

0.4 (2017-08-09)

  • Expose the actual PostgreSQL version the underlying libpg_query libray is built on thru a new get_postgresql_version() function

  • New option safety_belt for the prettify() function, to protect the innocents

  • Handle serialization of CoalesceExpr and MinMaxExpr

0.3 (2017-08-07)

  • Handle serialization of ParamRef nodes

  • Expose a prettify() helper function

0.2 (2017-08-07)

  • Test coverage at 99%

  • First attempt at automatic wheel upload to PyPI, let’s see…

0.1 (2017-08-07)

  • First release (“Hi daddy!”, as my soul would tag it)

Project details


Release history Release notifications | RSS feed

This version

1.8

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pglast-1.8.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

pglast-1.8-cp38-cp38-manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

pglast-1.8-cp38-cp38-manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

pglast-1.8-cp38-cp38-manylinux1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8

pglast-1.8-cp38-cp38-manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.8

pglast-1.8-cp37-cp37m-manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

pglast-1.8-cp37-cp37m-manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

pglast-1.8-cp37-cp37m-manylinux1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7m

pglast-1.8-cp37-cp37m-manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.7m

pglast-1.8-cp36-cp36m-manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

pglast-1.8-cp36-cp36m-manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

pglast-1.8-cp36-cp36m-manylinux1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6m

pglast-1.8-cp36-cp36m-manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.6m

pglast-1.8-cp35-cp35m-manylinux2010_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.5m manylinux: glibc 2.12+ x86-64

pglast-1.8-cp35-cp35m-manylinux2010_i686.whl (1.4 MB view details)

Uploaded CPython 3.5m manylinux: glibc 2.12+ i686

pglast-1.8-cp35-cp35m-manylinux1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.5m

pglast-1.8-cp35-cp35m-manylinux1_i686.whl (1.4 MB view details)

Uploaded CPython 3.5m

File details

Details for the file pglast-1.8.tar.gz.

File metadata

  • Download URL: pglast-1.8.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.19.1 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.5

File hashes

Hashes for pglast-1.8.tar.gz
Algorithm Hash digest
SHA256 115067100fbb9eb36f530d94b64b4e1e36a8d304537af0847d562ff9ed399c05
MD5 a8dec0a86d3b33cc647b7d4deba06b62
BLAKE2b-256 faf8f6e78d1416996040f534bc5abde9498c929add6ffdb38212419350ec8898

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pglast-1.8-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b67455812fcf7177187008ccf62f99fcc0790c7fb5085122d1741c83d24de2b0
MD5 9ccfbbf99df78c1a27e5ed23c6d9a126
BLAKE2b-256 6b82ec7773f2b952b9284a52d4c1cd33dcd76574f40a955d46e43b2d63e93fd7

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp38-cp38-manylinux2010_i686.whl.

File metadata

  • Download URL: pglast-1.8-cp38-cp38-manylinux2010_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp38-cp38-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 c381a4fa5146e135cb240f10303ba9824e64dadc37941fff4f7e45caa4f5e882
MD5 02754824ee0d4e5be92ead38910ff10f
BLAKE2b-256 03c7f2cc955dbbe2758e8670479db859ee55159c74efa31af255d8b46b3c6f90

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: pglast-1.8-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 0bced9b9d7a038541278b115df5d76e2bef0611ab96f43d298db3cb4fc4ac85b
MD5 c29ce19897cfd8daf6b3a1cdf42a29ef
BLAKE2b-256 99fa1017f582e632b371cc7e3045760cc5ad9767dbd6a7eaa0b285ca4d1af85f

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp38-cp38-manylinux1_i686.whl.

File metadata

  • Download URL: pglast-1.8-cp38-cp38-manylinux1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 e7d830b878da768a881b16242031d724eb3ea7fa900706f8985b426f046e4a3c
MD5 60159b761df24a92e1f8abe14d9799cc
BLAKE2b-256 27608b03f4f19be832ba47dda339990f5ed1a9e28b8e33d428a49a7a8e79e2f8

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pglast-1.8-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 7bfcdead1c89dec93ca433f80bbc32c4d0e0cf729b2e092d4379e5ba3440dfb8
MD5 d36407844f2046ae12d79977c12427b3
BLAKE2b-256 bf88a7a3d324820618044fb3f5a330c7a23c3c76aa4f47105e61672a5423d503

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp37-cp37m-manylinux2010_i686.whl.

File metadata

  • Download URL: pglast-1.8-cp37-cp37m-manylinux2010_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp37-cp37m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 d32f97bd5cd0cddfebe7c500f2f71632739abcfc0ecf9dae123e274126806513
MD5 5ea1da85af51f969fe3c388d5d25580d
BLAKE2b-256 d9cc39714175f6108d0d47fccf04c499851448c4fbcc84812606fcbdfae37e8b

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pglast-1.8-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 48955b7341e3093450b8b4443090ac4515983bc2be612ebc5bf8c2e4d76ea502
MD5 a37e8eb31c8f1ab8f0632bfbb02deaa9
BLAKE2b-256 1316b0dec1ae02f30ca4e899692e27bfd20331f2d55279d5a3ecd9808d4f4aa9

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: pglast-1.8-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 31dd9762e1a8b4cf8c2e23cf7fb99f1a979ecab42f783e09d1a7bcab76275c2c
MD5 af55e2e9f12d89b4a995cea6bc42ea24
BLAKE2b-256 0e8098dea351b4c08d60f2e3cc85b28e2769c193acc650c0dc71d5c75e65fc69

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pglast-1.8-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c15cda718a1a9cf95e0773c40b1c169ec3641c410445bc6001e3a5557a5dc2ae
MD5 d95309a72f5449cddab2fef452aed6e2
BLAKE2b-256 8866fb52dea01d2b513a1a00f2385d4a7162fb8dcca20e781a005a37e5d55f51

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp36-cp36m-manylinux2010_i686.whl.

File metadata

  • Download URL: pglast-1.8-cp36-cp36m-manylinux2010_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp36-cp36m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 78326f2a3dd044e8621784d44915c31ee47ee7f56b50aed0487413c4aa7b0c37
MD5 dad53b1cf92861870e768bec6ba014c3
BLAKE2b-256 543eec4671f3132ed9d1e2888ccfc9b37125120c0e937470c1e577b1062b9544

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pglast-1.8-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6b842f15fdb09965060aea1348b56b699551ce9e2db90b097c9b69a5350dfe81
MD5 68c989606fb1b3f2ac2031133bb992cb
BLAKE2b-256 e22acb8409827522ce94bdb74161c4787bf1e5b70f13e66c20734bc432691942

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: pglast-1.8-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 42dea6b8ea13a4ff50b4ffaf622baae87b1a02b4cf0f1c4a016051321b0d949b
MD5 8090105e1f26a31a46691185dc360409
BLAKE2b-256 2067e5ea691696972dfe97ac6a301e2d73b604613a96fd8b5878ee670329cc74

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp35-cp35m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pglast-1.8-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0f3f2de16f1e20fbc26f91e66c5b3e071d20bc99f76061b109de964b4147828a
MD5 2e57074777bb3d9839a57f668bacc767
BLAKE2b-256 1d384e75b1dea98f2aab7334fe25a246eddbc1e809cc455b8df38c6905808ddd

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp35-cp35m-manylinux2010_i686.whl.

File metadata

  • Download URL: pglast-1.8-cp35-cp35m-manylinux2010_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp35-cp35m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 b56b8013aafec8d321bfa159ab020555fe35ac9437953346dc644731d62c60de
MD5 8b06cc560f88a66a683f71cbfeb8a739
BLAKE2b-256 67f97457e5149c9d0f166f17582f7fc7665853716bbb5fc4ea767ef4ce08b5ce

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pglast-1.8-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 43f1a276ea4b17a54d574cbcb9e1783d97ef110fb581b93244e8a1cf95839e8b
MD5 8138f0f0018da3a6ff1680a4a7d32776
BLAKE2b-256 2c3850f68815269d93a85ce2d0ab29335e0c66c1c3bb64c89ccfa456807f5bf8

See more details on using hashes here.

Provenance

File details

Details for the file pglast-1.8-cp35-cp35m-manylinux1_i686.whl.

File metadata

  • Download URL: pglast-1.8-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.6.7

File hashes

Hashes for pglast-1.8-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 0817a76dbb173aaed5f6221aa7a557be0633b263eb057332aa4d469154d8253e
MD5 c1312501b967c664e5af394be742743a
BLAKE2b-256 daa0656624b08b74856490918608f15b4af56cd276062bf9fdbf48058c5a22dd

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page