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.12 (2020-06-08)

  • Double quote column names in the TYPE_FUNC_NAME_KEYWORDS set (issue #55)

  • Possibly wrap SELECT in UNION/INTERSECT between parens, when needed (issue #55)

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

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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

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

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.8

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

Uploaded CPython 3.8

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

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

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

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.7m

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

Uploaded CPython 3.7m

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

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

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

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.6m

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

Uploaded CPython 3.6m

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

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

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

Uploaded CPython 3.5m manylinux: glibc 2.12+ i686

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

Uploaded CPython 3.5m

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

Uploaded CPython 3.5m

File details

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

File metadata

  • Download URL: pglast-1.12.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.23.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3

File hashes

Hashes for pglast-1.12.tar.gz
Algorithm Hash digest
SHA256 b5d6a105928d2285e43afb87d638ada844ed8933cc306c23a3c095684f3d3af4
MD5 6e3f1fcdbfbc53dca1cdbda87008c822
BLAKE2b-256 184ec290fd98948e09bbee3d44759ac8d186b023ff89193cb0a57f17cda74baf

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 4a17288eeac69125034d6d62d6543b093b1cdc5977f79db1a7c83924daba9ace
MD5 78e82c183ce2a19339c708ac50573337
BLAKE2b-256 6b451580ed9e38b81ebf81811dced67dc538255e6c881a38f478d60e6bbb8b9f

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp38-cp38-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 cb66f59bc38253d138420b562c57cc74be01966cf7f1caae9154879054d7dfd8
MD5 f6e1c458d5aa7529ffc07ba24336f872
BLAKE2b-256 8b1f07387ee2cc7322f0273ec37f75ef43a66e8187f419aaa2501b956c2e4bfe

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 15d017e2334d3fb423841ca4bd4b7b8b2d199cab7e9bc1f26d47b2538026c3ba
MD5 622a44c5a15d3ae6d1e3746fb82a8899
BLAKE2b-256 b2d2456bcaa1e5edaa9a688c1e1a46603b9308b9eafccd3e4dcc469e596db51c

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 06a76ce8d1bffd067311047c90861fd8b80e21c11042195e552aacfd2dc9a403
MD5 4430d0ad89022ef94e9af28164339ef8
BLAKE2b-256 a8af2acbfda96f0d76cc71f1bc1b2cb1abdcd01ce41eb63e0250267a7e6f4d6a

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c72086651d344a1fefb7ee6c1c35c7db02754db33c444bb4d467d43a4839b0a7
MD5 be085f7e91d3fe5af2261d9f9ecca828
BLAKE2b-256 710694eb3d805a9298579d2066705f1ed518ae42402dca3d1ef1984ceb2b5e77

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp37-cp37m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 5e71142f12fe23236d19249afb0d117be0f80c48217d48ae86f7b00f87ac9257
MD5 86af4c79959c22dbd77d3db0ee894e4a
BLAKE2b-256 df69b2f4e38cc74228b4dc4940122f58cfef2d8fa692351e31a466886d41e414

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 93a6f79c1762e0d6a37a29fcb6934f72c9fd4150f6a88a67fa6981297448b13a
MD5 e19ae754434f56b40fa15776a8e103ac
BLAKE2b-256 4f4f396751b94ac0c62ec4a5ef7a0ec6a7a1e6de8e79b06a17e9675d32509bbb

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 c9acddf2c560b1df5202126ccf0445846304d941fb42d4db34a05885d52002ca
MD5 b0fc4bca86971e461e87d9f823649067
BLAKE2b-256 a424b53ebc20782e4232e5ebfa0288ec455935330f6a31375ebb89b602dfcdcd

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 96ab4584ef5497c34239cdab71bb6e335e2c541a4f072a5af796964391d51b7e
MD5 a41c62d49b146599e48b6c6030dca09e
BLAKE2b-256 5d05714a25e0882135ace5559e2087444d63dac722dd21246f0e8e3d22ecc919

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp36-cp36m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 4d17f72be5c0627a876841e46bb25fb09bc16d2224bd8ce434993f1b042e91ba
MD5 0e0d1c8d7f08587f595b2965d87f4bec
BLAKE2b-256 316dc7c212cb1946c1f687998883342f60451647abff95e69e425d0b99759133

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5f9e58f2a5870e96d2a782a2743115ac45a8e7fd4e5f0d54ccd235b1da21c3a7
MD5 9e03c79a82c82389c191159872e487e9
BLAKE2b-256 c45da9769db8d973654982501c8921cb1483b2a3a4ceed593878ca6382791432

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 d4af139ecfdf48ea85883ae2c8442d9236f8477596c9354b037568a0ad2b6782
MD5 ec3fa13a5531dafc1452fbcfa6dd8de9
BLAKE2b-256 5bd6651873d03bf84e2258b3beb230ab15e1cb055badafc915615865471c4486

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ec4a42831c248278111894e6b76436b5979defd911776a668b51025d79801300
MD5 16898aa20bfcab51c3724567e942c2d9
BLAKE2b-256 9efd195baa7d2d79df8e419009ad4eb1d768760220d5cf7266f243b11fca66cd

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp35-cp35m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 57005e737c249bad8f2d4a309c8bd02a41bb6ad582529630b1c67836162db60c
MD5 6faa4c8e6cc6218ff550666b305be78b
BLAKE2b-256 59d2b6562acb019d4de1fd884388f34b77ce5c5fea5d72410864b7778fa4132c

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c72ef822707b0a5f20292e100148bfbf7478029bf0c205f1a05ce5b9ad3aeeaf
MD5 37f313e091006b414ad96de7e7b6eb33
BLAKE2b-256 68f8b95f52e761208760dc565ea5f65c86cfed57c3b3f8097c0c3bfde60bd53e

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pglast-1.12-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.1 CPython/3.6.7

File hashes

Hashes for pglast-1.12-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 a83dfc506572abdf89d9558e43bca2786e9f6425b128860976c5f34c5b85bb13
MD5 3ad1f423e041cc490b9a7a28069381d3
BLAKE2b-256 45af448624e831a9b74de2e52102ee903db6681b1548da2ff48bf39031070ce2

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