Skip to main content

This package implements a PEG (Parsing Expression Grammar) to parse syntax, i add rules to parse URL, HTTP request and response easily with security and some format like hexadecimal, base32, base64, base85, CSV, JSON (strict and permissive)...

Project description

PegParser Logo

PegParser

Description

This package implements a PEG (Parsing Expression Grammar) to parse syntax, i add rules to parse URL, HTTP request and response easily with security and some format like hexadecimal, base32, base64, base85, CSV, JSON (strict and permissive)...

This module implements standard functions for a PEG Parser, standard match (like digit, hexadecimal, letter, upper case letter, lower case letter, ...), standard rules (like integer, float, string, ...), standard formats (like hexadecimal data, base64 data, ...), network formats (like IPv4, IPv6, hostname, ...), a full URL parser, a full HTTP parser (request and response), a full CSV parser and PEG rules to parse JSON (strict and permissive).

Requirements

This package require:

  • python3
  • python3 Standard Library

Installation

Pip

python3 -m pip install PegParser

Git

git clone "https://github.com/mauricelambert/PegParser.git"
cd "PegParser"
python3 -m pip install .

Wget

wget https://github.com/mauricelambert/PegParser/archive/refs/heads/main.zip
unzip main.zip
cd PegParser-main
python3 -m pip install .

cURL

curl -O https://github.com/mauricelambert/PegParser/archive/refs/heads/main.zip
unzip main.zip
cd PegParser-main
python3 -m pip install .

Usages

Command line

PegParser              # Using CLI package executable
python3 -m PegParser   # Using python module
python3 PegParser.pyz  # Using python executable
PegParser.exe          # Using python Windows executable

Python script

from PegParser import *

# Build bytes for a full HTTP response, useful to make a HTTP server response
http_response = bytes(HttpResponse(b'HTTP', 1.0, 200, 'OK', [], b'body content'))
http_response = bytes(HttpResponse(b'HTTP', 1.1, 201, 'Created', [('Content-Length', '12'), ('Content-Type', 'application/json'), ('Server', 'TestServer')], b'', 10, 'plain/text'))

# Parse the HTTP response, useful to parse the server response from a HTTP client
response = parse_http_response(http_response)
response.code
response.body

# Build bytes for a full HTTP request, useful to make a HTTP client request
http_request = bytes(HttpRequest('GET', '/', b'HTTP', 1.0, [], b'body content'))
http_request = bytes(HttpRequest('POST', '/upload', b'HTTP', 1.1, [('Content-Length', '12'), ('Content-Type', 'application/json'), ('User-Agent', 'TestClient')], b'', 10, 'plain/text'))

# Parse the HTTP request, useful to parse the client request from a HTTP server
request = parse_http_request(http_request)
response.verb
response.uri

# Parse a full URL
url_parsed = get_matchs(StandardRules.Url.full(b"https://my.full.url/with/path;and=parameters?query=too#fragment")[1])
url_parsed['host']
url_parsed['path']
url_parsed['scheme']

# Parse base64
base64_parsed = get_matchs(StandardRules.Format.base64(b"09AZaz+/"))

# Write your own rule
def digits(data, position):
    return PegParser.one_or_more(
        StandardMatch.is_digit,
        data,
        position,
    )

position, data = digits(b'01234', 0)          # match: 01234
position, data = digits(b'\x0001234toto', 0)  # no match
position, data = digits(b'\x0001234toto', 1)  # match: 01234

with open('data.csv', 'rb') as file:
    for line in csv_file_parse(file):
        field1 = line[0]
        field2 = line[1]
        ...

data = b'{"1": null, "2" : 1.5 , "3": {"test": true, "1": 2}, "4": [1, 2, false]}'
position, matchs = StandardRules.Json.full(data)
if matchs is not None and position == len(data):
    get_ordered_matchs(matchs)

data = b'{"1" null, "2" : 1.5 , "3": {"test" true "1" 2},"4" :[1 2, false],}'
position, matchs = StandardRules.Json.permissive_full(data)
if matchs is not None and position == len(data):
    get_ordered_matchs(matchs)

Links

License

Licensed under the GPL, version 3.

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

pegparser-1.0.0.tar.gz (37.7 kB view details)

Uploaded Source

File details

Details for the file pegparser-1.0.0.tar.gz.

File metadata

  • Download URL: pegparser-1.0.0.tar.gz
  • Upload date:
  • Size: 37.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for pegparser-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e03c6eeb957a17217c4fd086a367ede445eee9552d129e15b08a54baf9fb72c6
MD5 69f5b84f4cd054a3c0043f35f9678464
BLAKE2b-256 cd289f85ca1e9dadf5ae9150ae5d97e0198271f608d5c95e4a606e45ae8ad4b5

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