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 Test coverage status
Version:
5

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.

See a more detailed introduction in the documentation.

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 nearly 99% of the source lines.

Documentation

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

Changes

Version 5

5.7 (2023-12-23)

5.6 (2023-12-07)

  • Fix issue #138, a defect that hindered the creation of AST nodes that act as markers, (currently A_Star and CheckPointStmt), that do not carry any other information

  • Use Cython 3.0.6

  • Handle the ENABLE TRIGGER ALL in AlterTableCmd

  • Fix issue #136, a regression introduced by “Avoid overly abundancy of parentheses in expressions”

5.5 (2023-10-07)

  • Use Cython 3.0.3

  • Produce wheels using final Python 3.12 release, thanks to cibuildwheel 2.16.2

5.4 (2023-08-24)

  • Improve documentation, adding parser.Displacements, parser.scan and parser.split examples (issue #128)

  • Fix issues #129 and #130 (merged from version 4.4)

5.3 (2023-08-05)

5.2 (2023-05-20)

5.1 (2023-02-28)

5.0 (2023-02-19)

  • No changes

5.0.dev1 (2023-02-11)

Breaking changes
  • Change the type of the ast.Float value from Decimal to str

    Using a Decimal implies potential differences in the representation of floating numbers, and already caused issues (#91 and #100) in the past, making it impossible to render, say, SELECT 0.0e1, due to the fact that Decimal('0.0e1') resolves to Decimal('0').

5.0.dev0 (2022-12-19)

  • No visible changes with respect to v4, apart from the support for new/revised syntaxes of PostgreSQL 15

Breaking changes
  • Target PostgreSQL 15, thanks to libpg_query 15-4.0.0

Version 4

4.5 (unreleased)

4.4 (2023-08-24)

4.3 (2023-04-27)

4.2 (2023-02-27)

  • Handle special syntax required by SET TIME ZONE INTERVAL '-08:00' hour to minute

  • Fix mistype mapping of raw C “long” and “double” attributes, that were decorated with the wrong Python type

4.1 (2022-12-19)

  • Fix serialization glitches introduced by “Avoid overly abundancy of parentheses in expressions” (to be precise, by this commit)

4.0 (2022-12-12)

4.0.dev0 (2022-11-24)

  • Update libpg_query to 14-3.0.0

  • Avoid overly abundancy of parentheses in expressions

  • Prefer SELECT a FROM b LIMIT ALL to ... LIMIT NONE

Breaking changes
  • Target PostgreSQL 14

  • The wrapper classes used in previous versions, implemented in pglast.node, are gone: now everything works on top of the AST classes (issue #80)

  • The Ancestor class is not iterable anymore: it was an internal implementation facility, now moved to a _iter_members() method

Version 3

3.18 (2023-08-24)

  • Fix BooleanTest printer, enclosing expression within parens in more cases (issue #129)

  • Fix Constraint printer, avoiding repetition of “DEFERRABLE INITIALLY DEFERRED” on some kind of constraints (issue #130)

3.17 (2022-11-04)

  • Fix AlterSubscriptionStmt printer, handling “SET PUBLICATION” without options

3.16 (2022-11-03)

3.15 (2022-10-17)

  • Produce Python 3.11 wheels (PR #108), thanks to cibuildwheel 2.11.1 and to Bastien Gandouet

3.14 (2022-08-08)

  • Harden the way Visitor handle modifications to the AST (issue #107)

3.13 (2022-06-29)

3.12 (2022-06-19)

  • Rewrite the implementation of the referenced_relations() function, that was flawed with regard to CTEs handling (issue #106), thanks to Michal Charemza for providing his own version

  • Improve WithClause printer indentation

  • Fix minor whitespace related issues in a few printer functions

3.11 (2022-05-29)

  • Fix the Visitor class, it was ignoring nodes nested in sub-lists

  • Reduce the size of the generated parser by factoring out common code into helper functions

3.10 (2022-05-11)

3.9 (2022-02-24)

  • Fix bug handling node containing a location field, e.g. CreateTableSpaceStmt (issue #98)

  • Properly handle dereferenced array expression (issue #99)

  • Avoid improper “floatification” of literal integers (issue #100)

3.8 (2021-12-28)

  • Fix glitch in the AST extractor tool (issue #97)

  • Add Linux AArch64 wheel build support (PR #95), thanks to odidev

  • Fix type mismatch when using --remove-pg_catalog-from-functions (PR #93), thanks to Boris Zentner

3.7 (2021-10-13)

3.6 (2021-10-09)

  • Use latest libpg_query, to fix an error parsing PLpgSQL statements (issue #88)

3.5 (2021-09-26)

  • Forward the special_functions option to substream, when concatenating items (issue #89)

  • Fix representation of floating point numbers without decimal digits (issue #91)

  • Produce Python 3.10 wheels, thanks to cibuildwheel 2.1.2

  • Update libpg_query to 13-2.0.7

  • New option --remove-pg_catalog-from-functions on the command line tool (PR #90), thanks to Boris Zentner

  • Implement more special functions (PR #92), thanks to Boris Zentner

3.4 (2021-08-21)

  • Fix another packaging issue, that prevented recompilation from the sdist .tar.gz (issue #86), thanks to Christopher Brichford

3.3 (2021-07-04)

3.2 (2021-06-25)

  • Effectively include libpg_query’s vendored sources (issue #82)

3.1 (2021-06-25)

  • Fix packaging glitch (issue #82)

  • Build wheels also for macOS

  • Update libpg_query to 13-2.0.5

3.0 (2021-06-04)

  • Fix glitch in the RawStream, avoiding spurious space after an open parenthesis

  • Improve the Visitor class, to make it easier altering the original tree

  • Properly handle nested lists in the serialization of AST Node

3.0.dev2 (2021-05-22)

  • Fix bug in CreateStmt printer (issue #79)

  • Make it possible to pass also concrete ast.Nodes to RawStream`

Breaking changes
  • To reduce confusion, the printer module has been removed: print-specific stuff is now directly exposed by the printers subpackage while serialization classes are now in the new stream module

  • The default value for the safety_belt option of the printify() function is now False

3.0.dev1 (2021-05-16)

  • Fix AT_SetIdentity, AT_EnableReplicaTrig and AlterSubscriptionStmt printers

  • Improve AlterTSConfigType and IntoClause printers

  • New generic “visitor pattern” (issue #51) exemplified by a new referenced_relations() function (issue #66)

  • Refine printing of SQL comments

  • Implement AlterExtensionStmt printer

3.0.dev0 (2021-05-03)

  • Expose the new pg_query_scan() function as parser.scan()

  • Expose the pg_query_parse() function as parser.parse_sql_json()

  • Expose the new pg_query_parse_protobuf() function as parser.parse_sql_protobuf()

  • Expose the new pg_query_deparse_protobuf() function as parser.deparse_protobuf()

  • Honor the catalogname of a RangeVar if present (issue #71)

  • Cover almost all SQL statements, testing against the whole PostgreSQL regression suite (issue #68, PR #72 and PR #77), thanks to Ronan Dunklau and Hong Cheng

  • New rudimentary support for the preserve comments feature (issue #23)

Breaking changes
  • Target PostgreSQL 13

  • The pglast.parser module exposes all libpg_query entry points, even the new pg_query_deparse_protobuf() function that is basically equivalent to RawStream-based printer

  • The split() function is now based on the lower level pg_query_split_with_xxx() functions

  • The parse_sql() function returns native Python objects, not a JSON string as before: all PG nodes are now represented by subclasses of pglast.ast.Node, without exception, even Expr and Value are there. The latter impacts on pglast.node.Scalar: for example it now may contains a ast.Integer instance instead of a Python int

  • The pgpp --parse-tree output is a pprint represention of the AST, not a JSON string as before

  • The ParseError exception does not expose the location as an instance member anymore, although its still there, as the second argument (ie .args[1]); furthermore, its value now corresponds to the index in the original Unicode string, instead of the offset in the UTF-8 representation passed to the underlying C function

Version 2

2.0.dev3 (2021-02-20)

  • Handle INCLUDE clause in IndexStmt (PR #67), thanks to Ronan Dunklau

2.0.dev2 (2020-10-24)

  • Merge new fingerprint functionality from v1 (i.e. master) branch

2.0.dev1 (2020-09-26)

  • Require Python 3.6 or greater

  • Handle ALTER TYPE .. RENAME VALUE in AlterEnumStmt (PR #52), thanks to Ronan Dunklau

  • Add support for Create / Alter / Drop PROCEDURE (PR #48), thanks to Ronan Dunklau

  • Use Ronan’s fork of libpg_query, targeting PostgreSQL 12.1 (PR #36)

  • Change get_postgresql_version() to return a (major, minor) tuple (issue #38)

  • Handle ALTER TABLE ... ALTER COLUMN ... SET STORAGE ...

  • Handle PG12 materialized CTEs (issue #57)

  • Support column numbers in ALTER INDEX (PR #58), thanks to Ronan Dunklau

  • Handle SET LOGGED and SET UNLOGGED in ALTER TABLE (PR #59), thanks to Ronan Dunklau

  • Handle ALTER TYPE ... RENAME (PR #62), , thanks to Ronan Dunklau

Version 1

1.18 (2021-06-01)

  • Fix exclusion constraint printer (issue #81)

1.17 (2021-02-20)

  • Fix the generic case in the RenameStmt printer

1.16 (2021-02-20)

  • Promote to the stable state

  • Move the job of building and uploading binary wheels from TravisCI to GitHub Actions

1.15 (2021-02-19)

  • Fix IF EXISTS variant of RenameStmt printer (PR #70), thanks to Jonathan Mortensen

  • Update libpg_query to 10-1.0.5

1.14 (2020-10-24)

  • Produce Python 3.9 wheels, thanks to cibuildwheel 1.6.3

  • Expose the libpg_query’s fingerprint functionality (PR #64), thanks to Yiming Wang

1.13 (2020-09-26)

  • Handle SELECT FROM foo

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


Download files

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

Source Distribution

pglast-5.7.tar.gz (3.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pglast-5.7-cp312-cp312-musllinux_1_1_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

pglast-5.7-cp312-cp312-musllinux_1_1_i686.whl (5.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ i686

pglast-5.7-cp312-cp312-musllinux_1_1_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ ARM64

pglast-5.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pglast-5.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

pglast-5.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pglast-5.7-cp312-cp312-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

pglast-5.7-cp311-cp311-musllinux_1_1_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

pglast-5.7-cp311-cp311-musllinux_1_1_i686.whl (5.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ i686

pglast-5.7-cp311-cp311-musllinux_1_1_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ ARM64

pglast-5.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pglast-5.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

pglast-5.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (4.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pglast-5.7-cp311-cp311-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

pglast-5.7-cp310-cp310-musllinux_1_1_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

pglast-5.7-cp310-cp310-musllinux_1_1_i686.whl (5.1 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

pglast-5.7-cp310-cp310-musllinux_1_1_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ ARM64

pglast-5.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pglast-5.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

pglast-5.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (4.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pglast-5.7-cp310-cp310-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

pglast-5.7-cp39-cp39-musllinux_1_1_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

pglast-5.7-cp39-cp39-musllinux_1_1_i686.whl (5.1 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

pglast-5.7-cp39-cp39-musllinux_1_1_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ ARM64

pglast-5.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pglast-5.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

pglast-5.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (4.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pglast-5.7-cp39-cp39-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

pglast-5.7-cp38-cp38-musllinux_1_1_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

pglast-5.7-cp38-cp38-musllinux_1_1_i686.whl (5.3 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

pglast-5.7-cp38-cp38-musllinux_1_1_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ ARM64

pglast-5.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pglast-5.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

pglast-5.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (4.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pglast-5.7-cp38-cp38-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: pglast-5.7.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7.tar.gz
Algorithm Hash digest
SHA256 e49632804b61c45be38db2a9cf0d8224d02fb6b9c2a9d9d1d2c6c91e1351605c
MD5 904941fdc5f0da03850cd9d9cd317eb0
BLAKE2b-256 7594b16a4ee18ef3502682f273863100061e55e730a28b1f695bfffaf24e3929

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 e7dc3264070bdbd3c48f9f6b37878bad46948684fa08be3f142dd894c480ccee
MD5 cb994b13b09585b99424541b64da4d63
BLAKE2b-256 0c2e32e51ad02a3a073001f9cb84ab923480d404a47a2ecdd732076ab8ec697f

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp312-cp312-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pglast-5.7-cp312-cp312-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: CPython 3.12, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a1d31baae336be60a560dd9026d655ec67a11572e207de86bd3975af40bff645
MD5 a00ec6dfa6c6835bdda4da9041035855
BLAKE2b-256 cca22593f8c3d91f4a13f0661f84bb378523d29b113e0ef3ce11dc6e6ac1b802

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp312-cp312-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp312-cp312-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 55d4f51e41a5d11d5a3975da751e91bb56e64a443f7c5fd4f4a2761b7866ab18
MD5 4857c34c0ae39b962277ef26aab73205
BLAKE2b-256 c4bae4db7707706adbcb4f9022e3a9224bcb10ebd0a063ebec4ba1a6f5ee2918

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 219dd5d0d35793dc62b1139030d4c45c39b23a6257a00a00f0174ac1f367c48b
MD5 7e6d51d8bff0e52b43e961652706f67e
BLAKE2b-256 d73d21025358637181e448208ea66ae99d22f3c65187a0eec3fcbd96c65e69c2

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e48b3dfd697a57ce7ddb7bbe6b331daa6903a2d703372d09b60839fecad98fc9
MD5 9e63e73a3235de589d857757f804aed9
BLAKE2b-256 249c5bffce71f9650897edec38b5b6e0f3120054cddf0a66b0e059c34a14fbaf

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 dc479fdcbfc887579eadcf1cd95bdf6db02ac7bc48b8a474ee3dfabaf590e2ff
MD5 6fd2d991cdb0962f236c81e804982841
BLAKE2b-256 68587089d47f461a90ede71355b54ab22077ace9693a4fb56272d69dfb69520f

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 72a26506b655d91a58ab305e995ed4f7eb311dc7b20aa5ca7463e0fc865bef61
MD5 ef8e19abdad83a547ed8e75701fc7559
BLAKE2b-256 a553034b55e23db011302b7dbb63bfbb2cb5417b75006cd3bc7b461c23f3cff0

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ebc3465d1081521ca969e196378f802889d44bddea25520e5aeca358d7eb54c6
MD5 5762fe95448d54797a54cc5f59924716
BLAKE2b-256 5382eb18f056ef682fcd1fefc4489605732d76c2fa723bb74fc97651fc69db78

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pglast-5.7-cp311-cp311-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: CPython 3.11, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 781750a25472bfe355834ac8751020d95c8f0edf03c04613041ebace02923c68
MD5 f590d43ab902769423c2568b5008a9ae
BLAKE2b-256 717e8368a059854d49d882fc3ac2c1e840c909eb180790955827564a9ee59cd6

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp311-cp311-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp311-cp311-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 e926ed1cc05c8ea7b1ea81a00d49964d23a844bff5b8463f5acc6d25f372340e
MD5 21e617e4190317b4172f2fbf61bdd28d
BLAKE2b-256 8e8a34a29456586056dc395cdb851c42663dfcc603ddc631c2333019d9992d1d

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df7fd714f521cda3a95725659e012254fd8a4f1448290fac2f426ea4a8f1e086
MD5 d50dc5c61474125966584b157342e6f1
BLAKE2b-256 643dbcdfe566350410ec05fd1e0c3eb8e6a9db3d2a68d2355c058df9a14efc9b

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 40c9dd1f4f0356462c50f15d879f387fe68f0ab5fe4c5b4fdcb76dc7885c5d05
MD5 63b45156829324a2ca5c16e66051da52
BLAKE2b-256 0f98b432da5bb2ed9ec2041f3b4b5eac72b3e7490288b4cede50f4730afce9c4

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 dd08e46569b2fb4913d9d2f1530364599f785506bac17be22b37e5107e786591
MD5 21ffaee01aaece926bfc829f702e33ec
BLAKE2b-256 6942724aebf118c7381cc8ec78fa02d68f06016f536b1bcf904566e8205d301c

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 97fe0d35dac2e858bfb4c43c223357aac3f11f6e78bc72bc0cc46b74d5f65e41
MD5 47b1aa1023711a82f4471f4334801e0c
BLAKE2b-256 04092f29580639f113ef18557394d30b93287f3387ff9e1ee36ac150c4b33e14

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 9e98f4d2a3996dc9a2056a16ad055da2878fcf7e1bf2029df4a199311b23dc2b
MD5 eea5392666eb1022a19f812c607b046b
BLAKE2b-256 750324235da40601894b72e235194e42ec000b43d99efc3d7da481f53f89bb2d

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pglast-5.7-cp310-cp310-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 5.1 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 3c763f3b023636f1aa3c851a5ce4319c115cfcdb76b865a1facb592b52a8540f
MD5 26f70aa6a15041df8327c36953088da3
BLAKE2b-256 be2191a1f9ce8857bb2fb26adca84df9e691510d96faa105f4865421ddcf6275

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp310-cp310-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp310-cp310-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 b85a319e769c183d782c566083de0fb843f2d98b6bf055147836d8fb0dcd24aa
MD5 c90444c4a8710ee301b0097ee8588ae0
BLAKE2b-256 a9179600c4bfccedb9e6137207f14cbdae6de0ef058048457bc1ae5b12b99fc8

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 14e14351dd12caa4bbc184ce391bf6ffbe9043fbc2d90b4568914811cec639f5
MD5 07f9fe3c246d0287d1115876e4baf4c7
BLAKE2b-256 9d5676e114e20954e915e2616629d152147af87b4711633f8be4f3b2556ff66a

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 60229052fbd9f82f161bbd83901a8beab385a29d702d21730641f7e03f933820
MD5 67ce45f9c44bda6635fc6176b1b38e9f
BLAKE2b-256 96195b73b628e206048228d31c2356e49274669dbb4215d5aa1be01f32f3f99d

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9c630b74b18928330a15d276ef10fd49d4ad458751d726a86134351ebd6cf0cf
MD5 52b153efa53190d2b1afb269c33d1c24
BLAKE2b-256 78a8f5c043369f1b1876154ce28a75d3fd389be5d6f7cbb947f1adfdc484d5b6

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c7d6e834d6c6477c90c8b40c1ece28ed8af01e5b3bbae4e4f96161c72342e3eb
MD5 7491c4bccb4c91ce18db1ad408aae2eb
BLAKE2b-256 c1ef37eff45e02639d3d85aa725a6e416575723d8cb52ba1854cbbaacc7c7a1e

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: pglast-5.7-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 a2bf45b7f3d3f13252d61efc1a24ffa33f6a8e76e7cf9ec497d33a72e38894f7
MD5 ce4e3e32f459e3d3ba67818ab464588f
BLAKE2b-256 d7e49d579c8ba89e1ae36769f58c1fa13a7c9360ba087344c8c7cb38cbf5531f

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pglast-5.7-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 5.1 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b554b31ae1cce916c469cf1bc7088bec2b2ce45e39b470e4fd403a59aba69688
MD5 af45db8b17ca3e739ab15bb820a958e3
BLAKE2b-256 16232afd3ba3555c3307730883f299f32e71ba257266026c8005b613e2c76250

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp39-cp39-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp39-cp39-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 152b28a3c7c4ed77526061e00ac4287bf4676357f05e64270cf85c217c860c45
MD5 bf2f118dd9a909b82594a96be12f228e
BLAKE2b-256 8a8a2618e0c486afabe30fffccf2e3e216d4d3bb616b8264ce78233572259b64

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 602fc0c09dfa7160a6038fa00904f6aed4413855f110f601989c4e417b93ef5d
MD5 27f5ee3d86d1d459b988c12e2e80f441
BLAKE2b-256 ebb3b80689753e5213c0dd1c89708bc261098028ba4d6502bf9bcdf663809d61

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1562c6c935acb26f7a3f65fab519fa91c2ea48b6a57f1bbbeb968489d1bf38a1
MD5 f241137b45f3d67b2758e4e736aebae6
BLAKE2b-256 5f5056bc4b9feb4e623c6a44ae446debbe92bbd330b8f0b8486fb5979625369f

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f04cd2a7246bbde9723feab4c7e432acce4b08900629df0fc98e821fdb8147d4
MD5 c2f1060fadee83d462ca334bae636373
BLAKE2b-256 914ca18e825eba7ecd3c7b63ea10579128da40ee6554da7f4374164cce83a75f

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pglast-5.7-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1c331e01065059fd595ed801c59dad42f9b0acf23f15dbc5aee64b3d51ccb6f0
MD5 a9fdb154e705d2538a68835d301ecdff
BLAKE2b-256 41d1efa5483eb1855d388493872a64d414a5dcd423b5e93bc30e914d1be4e12b

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: pglast-5.7-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 5.4 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 599186d9ca8d8eaebbdd0048a960fb48d716f8ff16409d28acc3f0576b210f22
MD5 fa4fc93afe8c79051dbf5a3e5f84e3cc
BLAKE2b-256 9617809831f4f85e033cc3c90d6d3be489ad27213377b7a4ee0240e2582632d8

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

  • Download URL: pglast-5.7-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a0c3e579c7680191e2c977faf814464ad22cf8f51a6cb6f01bfa80c6f639a3f2
MD5 6ecd66f1e7c0b564b376a6ee8d9e4fbe
BLAKE2b-256 293bd7d3a567465d40ccab83a42c50079dadc379906f69c500b043672544843b

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp38-cp38-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp38-cp38-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 480d5fb361e1b52a288279c3deb07cc7e6e6a1ef927a819b7faa6a687e73a23c
MD5 2c6790ecd89d27acececb8e51ae5f5e0
BLAKE2b-256 4fabaf6cb18b75501f51d44091175cc5a8be3e8b5b4d8afb650ce1ae5cff72db

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 63ee9e2a9be9b24558376e5900f30c90988ae64f299462f218dbda3a88beda5d
MD5 da40937f84c35f47be2635e810c992b0
BLAKE2b-256 3fdd48449966b00d92a04719fcbfaeac04b3d41c7e85b5cbf31393ea341785b8

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 689a42741b70fb294a29caa5900535aa88dfbcf7885215db173e997700e3907e
MD5 ce85b9dccc11176de8262026c3240a24
BLAKE2b-256 df135f9076d97d247fc1fe0e9e38f98431c95ae829cd0c450ba7f007753fd585

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pglast-5.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 bf5ff0dc4975a3f0fa83e2c181cb5def20b9f8e3a1ed383fbcd199ae9ee63405
MD5 242019774c5482f35826690225cbc574
BLAKE2b-256 b308114f34db392d271bbe5e7e6e17787e72e56645cf85f074d2049145b35fa8

See more details on using hashes here.

File details

Details for the file pglast-5.7-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: pglast-5.7-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for pglast-5.7-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f4aa76a5ba29f9e577a02e6b9b95721ba3c1111e332da57221b0d0f789210c6c
MD5 5d20f62b88ee2fe562c10601a6429657
BLAKE2b-256 8057342ec0b06f859fba13e29b48afabb615014b820baca2b0b857afcbb9bd8e

See more details on using hashes here.

Supported by

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