Skip to main content

thrift-fmt

Thrift Formatter

Github Actions PyPI codecov Downloads pdm-managed

can be used as command line tool thrift-fmt and python sdk thrift_fmt

use thrift-parser https://github.com/thrift-labs/thrift-parser as parser

Usage

Install

pip install thrift-fmt

Format files

format single file and print to stdout

thrift-fmt mythrift.thrift

format and overwrite the origin file

thrift-fmt -w mythrift.thrift

format a directory, this will overwrite the origin file, please keep in track

thrift-fmt -r ./thrift_files

Feature

  1. keep and align all comments
  2. patch list separator
  3. patch missed field's required flag
  4. align by the field's assign (like go)
  5. align by each field's part
  6. Format only part of the parsed thrift

example

struct Work {
    1: required i32 number_a = 0, // hello
    2: optional i32 num2     = 1, // xyz
}

align by each field's part

struct Work {
    1:  required i32       number_a = 0            , // hello
    2:  required i32       num2     = 1            , // xyz
    3:  required list<i32> num3     = [ 1, 2, 3 ]  , // num3
    11: required string    str_b    = "hello-world",
}

Use as sdk

use thrift_parser.ThriftData to parse from file or str

use ThriftFormatter or PureThriftFormatter format the parsed thrift data.

from thrift_fmt import ThriftFormatter, PureThriftFormatter
from thrift_parser import ThriftData

origin = '''
include    "shared.thrift"   // a
  // work info
struct Work {
  1: i32 num1 = 0,
    2: required i32 num2, // num2 for
    3: Operation op, // op is Operation
    4: optional string comment,
    5: map<string,list<string>> tags, //hello
}
'''

thrift = ThriftData.from_str(data)
out = ThriftFormatter(thrift).format()
assert out == '''
include "shared.thrift" // a

// work info
struct Work {
    1: required i32 num1 = 0,
    2: required i32 num2,                       // num2 for
    3: required Operation op,                   // op is Operation
    4: optional string comment,
    5: required map<string, list<string>> tags, //hello
}
'''.strip()

# or only a single node
header = PureThriftFormatter().format_node(thrift.document.children[0])
assert header == 'include "shared.thrift"'

TODO

  1. better code
  2. support function default add new line
  3. support indent for /* */ multi line comment
  4. support tight map/list define ?
  5. any other feature ?

Dev

pdm install

pdm run pytest

pdm build

pdm run thrift-fmt --help

LICENSE

some thrift files in fixtures thrift was copy from https://github.com/apache/thrift/blob/master/tutorial/ , The Apache LICENSE

the Thrift.g4 in thrift-parser package was copy from https://github.com/antlr/grammars-v4

Metadata

Release files for thrift-fmt 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for thrift-fmt 0.3.0
File Size Uploaded Provenance
thrift-fmt-0.3.0.tar.gz 9.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for thrift-fmt 0.3.0
File Interpreter ABI Platform
thrift_fmt-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 19.0 kB

Release files / thrift-fmt-0.3.0.tar.gz

Download URL thrift-fmt-0.3.0.tar.gz
Size 9.6 kB
Tags Source
SHA-256 checksum
How to use checksums
5c351469724046e71090d7990e8c94ab693096525b4ec81a9380156f63f65e56
BLAKE2b-256 checksum
How to use checksums
354dc1a07e4927405695a47b11f8ea21304bb353a910ba916e6632d51b1c6362
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via pdm/2.4.8 CPython/3.10.6

Release files / thrift_fmt-0.3.0-py3-none-any.whl

Download URL thrift_fmt-0.3.0-py3-none-any.whl
Size 9.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
834d46caa2cf1714396eb2a88520c1f7c90247aff1971c2c8117ddef4f227f36
BLAKE2b-256 checksum
How to use checksums
ceacc6b124130216e8af2917e551e683c18153bd262dab671bea6b2df2f102e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via pdm/2.4.8 CPython/3.10.6

Security for thrift-fmt 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page