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.11 (2020-05-08)

  • Fix A_Expr printer, when lexpr is missing (PR #54), thanks to Aiham

  • Support DISABLE ROW LEVEL SECURITY in AlterTableCmd (PR #49), thanks to Ronan Dunklau

  • Implement CreateOpClassStmt printer (PR #47), thanks to Ronan Dunklau

1.10 (2020-01-25)

  • Fix collation name printer (PR #44), thanks to Ronan Dunklau

  • Implement CreatePLangStmt printer (PR #42), thanks to Bennie Swart

  • Fix privileges printer (PR #41), thanks to Bennie Swart

  • Handle TRUNCATE event in CreateTrigStmt printer (PR #40), thanks to Bennie Swart

  • Fix function body dollar quoting (PR #39), thanks to Bennie Swart

1.9 (2019-12-20)

  • Prettier INSERT representation

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.11

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.11.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

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

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

pglast-1.11-cp38-cp38-manylinux2010_i686.whl (1.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.8

pglast-1.11-cp38-cp38-manylinux1_i686.whl (1.5 MB view details)

Uploaded CPython 3.8

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

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

pglast-1.11-cp37-cp37m-manylinux2010_i686.whl (1.5 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.7m

pglast-1.11-cp37-cp37m-manylinux1_i686.whl (1.5 MB view details)

Uploaded CPython 3.7m

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

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

pglast-1.11-cp36-cp36m-manylinux2010_i686.whl (1.5 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.6m

pglast-1.11-cp36-cp36m-manylinux1_i686.whl (1.5 MB view details)

Uploaded CPython 3.6m

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

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

pglast-1.11-cp35-cp35m-manylinux2010_i686.whl (1.5 MB view details)

Uploaded CPython 3.5m manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.5m

pglast-1.11-cp35-cp35m-manylinux1_i686.whl (1.5 MB view details)

Uploaded CPython 3.5m

File details

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

File metadata

  • Download URL: pglast-1.11.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.7

File hashes

Hashes for pglast-1.11.tar.gz
Algorithm Hash digest
SHA256 8463d60b9065daf26e3c0fa6e7515d2a4594847ab417be018858832a475105f1
MD5 60d1bfd288cf75033528f063c5c3c3ed
BLAKE2b-256 f7ce5d4b679b3b0eb40cfef0df4cec76f81d506ccf193fb25d9602b6c33c5810

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 95736257bbf48bc8f5474b0924ca691ea89ce105c2b06552c84904b7e02ae67f
MD5 58ba306cd94d332133b32bd681a2f957
BLAKE2b-256 83585428cea2d300600c24bb044595887f8c72efd197cf23f64b758fb314c552

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-cp38-cp38-manylinux2010_i686.whl
  • Upload date:
  • Size: 1.5 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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp38-cp38-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 b4bbe9dd8e3dd881c81755e55c01f8956dffa8167b00d3e0ef0c39598a8c9b16
MD5 90c189306723226e5a490867bd205afc
BLAKE2b-256 4ed675f917747e421a63ec5b67dcac0f22acf1ab3893190bd4e8c2e1f1d4c6a5

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 175d2970d903a0fc61413482e35e5136826a7d217d601fc039045ab8b7ae2b6d
MD5 aca767fcf32b75c2abc78ce308406db9
BLAKE2b-256 7f0079696700dea741c67fd73127096fd8b0d304e487d4d7ebee29326c7e016f

See more details on using hashes here.

Provenance

File details

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

File metadata

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

File hashes

Hashes for pglast-1.11-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 6a3021ab1f406be845369e92a9172b59e4a63a5613a61294b20065dab8419c3f
MD5 3b6f2f3142fe54f2de6ec6a61fdf40c3
BLAKE2b-256 1d4c114167f689fc0c2da8b9713712411839d9033e5be7d1e6c1fd99e38a956a

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1bc870c65aceca24bf2d8e6fdda73fc8cc47ffb843e6ffdb7d5f960f17a51b7a
MD5 639e9cd1c21806dade462258ff832980
BLAKE2b-256 6b374780e291d11194e591e4a3adcedf0bd9234b3e1defe29f6c89cd9202ba9c

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-cp37-cp37m-manylinux2010_i686.whl
  • Upload date:
  • Size: 1.5 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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp37-cp37m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 42966f29b2debd33c1771f187776878f2cbdcd39517399be461a9578788c58a1
MD5 f7a4f43b65ad707b660bcd26271be340
BLAKE2b-256 1f36b390ded91af1619a3e1249ab23a28d76624723d42440ab4f624da8abfb58

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6ecb0386e49ddfec05d3f8ac5de281dc4d55449d00de3bbf1023e059ce67c04c
MD5 920ff233b47fddb6de83d04b411300a1
BLAKE2b-256 c71c3e5a36337f85d2efc783303869b4450eacd1e2234b8462b24663e1814ac8

See more details on using hashes here.

Provenance

File details

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

File metadata

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

File hashes

Hashes for pglast-1.11-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 cb8b40efc7691205f280995edf58d1ebb23fa88795ae95ca7eef0a1974525a94
MD5 4971ccc253da2239d9d3a5dd0a74b14f
BLAKE2b-256 11084a8aa12cc29c182f6bf6672e5a89bab1f15fd3b7a8d2413c70f4e661c453

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 42a3963d44e7e3bed2cfffb6919f0f731ecd4c78b93a16325b36aee4f1d0b771
MD5 cc0cc7d40af7fdbf50e9be5c70e074f1
BLAKE2b-256 386da6e61e0e58cd4de2914b876476a4861ad481ff8eb33fe6ffd6e6f0ce4757

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-cp36-cp36m-manylinux2010_i686.whl
  • Upload date:
  • Size: 1.5 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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp36-cp36m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 72acd6ca99a4fcf029e1e74b9d111b9a72ef9231b399db07d0aadfa0bf17525f
MD5 0e8908f9b0beff15046ca9930094c716
BLAKE2b-256 558751a5c0116a5feef56d4a629571af3bad09ecd46d9a8d0cc8fbd9679db636

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 59c9ecf6caf50af31a878c1ceb4933ecf7c930238bd8b00a8c193ae866407d50
MD5 2861f4470dafd62039f6934ac8cefbdf
BLAKE2b-256 a8d9d8819c554bcaab7a5796f2608200ad8850e26a5ee4edb5d951f996ed80e4

See more details on using hashes here.

Provenance

File details

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

File metadata

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

File hashes

Hashes for pglast-1.11-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 6ce6a9b2efdc32cc3bf2e31fc2eda84d12d59fdff0add0ded89da91e8fb891d8
MD5 5d333c028810c39f2a93df7f0577a578
BLAKE2b-256 fedde72cfa00a077e0833adfe48a950b90f1f9a2a2f495722178b1cbce221fbf

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 340928ec5c2dc41e703d67c5d4c94c2d93df32d3b47a437d4b501311c2e5dce0
MD5 7d43b07492b7edb953674427cf2558d3
BLAKE2b-256 8b093821321a70c23acd5e5224aeb714aaf06e0f51daec655c46cce613248847

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-cp35-cp35m-manylinux2010_i686.whl
  • Upload date:
  • Size: 1.5 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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp35-cp35m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 77bcd9a9b28c07bf90f221a44e248ab82e05b3be221963ec4291cc7efb12a2d5
MD5 3b134f971a87c4cbc4360678acbddc6a
BLAKE2b-256 2df97665a8dfbfa90cf4c50f24bd9f574b8f9c1bc2bc247a7d5b084bb0a07622

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.11-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.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for pglast-1.11-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 cd53ab0faad180562a38d2fc45927dd6820183ec5eb377281db36761f269f9e5
MD5 73f89cd6a02a12684865ae9584334b81
BLAKE2b-256 845d0f932e4d075dcc43efeaa1bd2c97844c8fbc3a1838db87431a36bbf82403

See more details on using hashes here.

Provenance

File details

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

File metadata

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

File hashes

Hashes for pglast-1.11-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 fb90c202275560e1434d94d2ece4e231c0fddc4f59cd1bb74293bbb4b4dbd365
MD5 8cb2348bc762e1beb6da860717730d81
BLAKE2b-256 7b8217243469976f522cc01c18d25e55549b4191b6bb5e9d53211efcf4ca446c

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