Skip to main content

A parser for Logical Query Protocol (LQP) S-expressions into Protobuf

Project description

python-tools

A command-line tool to parse Logical Query Protocol (LQP) S-expressions into Protobuf binary and JSON formats.

Usage

usage: lqp [-h] [--bin BIN] [--json JSON] input_directory

Parse LQP S-expression into Protobuf binary and JSON files.

positional arguments:
  input_directory  path to the input LQP S-expression files

options:
  -h, --help       show this help message and exit
  --bin BIN        output directory for the binary encoded protobuf
  --json JSON      output directory for the JSON encoded protobuf

Build

Install preprequisites:

pip install pip build setuptools wheel

Then build the module itself:

python -m build

Install locally:

pip install [--user] [--force-reinstall] dist/lqp-0.1.0-py3-none-any.whl

Running tests

Within python-tools,

Setup:

python -m pip install -e ".[test]"
python -m pip install pyrefly

Running tests:

python -m pytest

To add testcases, add a .lqp file to the tests/test_files/lqp_input subdirectory. New files get picked up automatically. To generate or update the corresponding output files (binary, debug mode, and pretty-printing snapshots), run pytest with the --snapshot-update flag.

Type checking:

pyrefly check

Formatting

The LQP S-expression syntax was chosen to align with that of the Clojure programming language, in order to leverage the existing tools in that ecosystem. LQP syntax should be formatted via cljfmt with the following configuration:

;; .cljfmt.edn
{:indents {#re ".*" [[:inner 0]]}
 :remove-surrounding-whitespace?  false
 :remove-trailing-whitespace?     false
 :remove-consecutive-blank-lines? false}

This configuration is explained here and simply works better for LQP, which does not have many of the Clojure keywords that are treated as special cases during formatting by default.

See the next section for an easy way to integrate cljfmt into your VSCode workflow.

VSCode

Editing nested S-expressions by hand can get a little tedious, which is why paredit is an established tool in the Clojure world. To integrate paredit and cljfmt into your VSCode workflow, just install the Calva extension and follow the configuration guide to use the cljfmt configuration pasted in the previous section.

Out-of-the-box, Calva also runs a Clojure linter, which of course does not know what to do with LQP, resulting in lots of squiggly lines. For that reason, it is also advisable to create the following config file at .lsp/config.edn from the project root:

;; .lsp/config.edn
{:linters {:clj-kondo {:level :off}}}

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

lqp-0.1.14.tar.gz (37.0 kB view details)

Uploaded Source

Built Distribution

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

lqp-0.1.14-py3-none-any.whl (36.5 kB view details)

Uploaded Python 3

File details

Details for the file lqp-0.1.14.tar.gz.

File metadata

  • Download URL: lqp-0.1.14.tar.gz
  • Upload date:
  • Size: 37.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for lqp-0.1.14.tar.gz
Algorithm Hash digest
SHA256 937439af817a2a6387d578fd4afea8eaffff9ae59ba6b0ffedd89dc61de0afef
MD5 3b0d7ffa09b218ce0410d19db0241d31
BLAKE2b-256 77e6b11bb301645dee0f7242038029963f712cf4f6cb405e7969160877010eba

See more details on using hashes here.

File details

Details for the file lqp-0.1.14-py3-none-any.whl.

File metadata

  • Download URL: lqp-0.1.14-py3-none-any.whl
  • Upload date:
  • Size: 36.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for lqp-0.1.14-py3-none-any.whl
Algorithm Hash digest
SHA256 2c0af319b5758a16dd6ad97bd6d0b0c17e89beb53efa46cdcb1fcce84dae8114
MD5 bb9d9e59bbe0e60a398450e8e253bfad
BLAKE2b-256 3278567d2938f7786f2248cfef404c89731f1f39948fba47f0584ba969caa1f7

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