Skip to main content

Python library for building composable text parsers

Project description

KNEX

Python library for creating chainable data transformers.

Installation

pip install knex

Supported Transformers

:x: - Planned

:heavy_check_mark: - Implemented

General String Number Date Other
:heavy_check_mark: Append :heavy_check_mark: Base64Decode :x: Absolute :x: BetweenDates :heavy_check_mark: TextFSMParse
:heavy_check_mark: Count :heavy_check_mark: Base64Encode :x: Add :x: BetweenHours :x: ThisOrThat
:heavy_check_mark: FirstElement :heavy_check_mark: Concat :x: Ceil :x: DateStringToISOFormat :x: Ttp
:heavy_check_mark: GetField :x: Cut :x: Divide :x: DateToEpoch :x: URLDecode
:heavy_check_mark: GetIndex :x: DumpJSON :x: Floor :x: DateToString :x: URLEncode
:x: If-Then-Else :x: FromString :x: Modulus :x: FormattedDateToEpoch
:x: IndexOf :x: JSONUnescape :x: Multiply :x: ModifyDateTime
:x: Join :heavy_check_mark: Length :x: Round :x: TimeStampToDate
:x: Jq :x: LoadJSON :x: Subtract
:x: JsonToTable :heavy_check_mark: RegexExtractAll :x: SumList
:heavy_check_mark: LastElement :x: RegexReplace :x: ToPercent
:x: ReverseList :heavy_check_mark: Split
:x: SetIfEmpty :x: Substring
:x: Slice :heavy_check_mark: ToLower
:x: Sort :x: ToString
:x: Stringify :heavy_check_mark: ToUpper
:x: Unique :x: Trim
:x: WhereFieldEquals

Usage

>>> from knex.parsers import *
>>>
>>> input_data = """
... Interface             IP-Address      OK?    Method Status          Protocol
... GigabitEthernet0/1    unassigned      YES    unset  up              up
... GigabitEthernet0/2    192.168.190.235 YES    unset  up              up
... GigabitEthernet0/3    unassigned      YES    unset  up              up
... GigabitEthernet0/4    192.168.191.2   YES    unset  up              up
... TenGigabitEthernet2/1 unassigned      YES    unset  up              up
... Virtual36             unassigned      YES    unset  up              up
... """
>>>
>>> pattern = r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
>>>
>>> end = (
                Start(input_data)
                > RegexExtractAll(pattern)
                > GetIndex(0)
                > Concat("", "/24")
                > IpNetwork()
             )
>>>
>>> print(end.result)
192.168.190.0/24
>>> print(json.dumps(end.history, indent=4))
[
    {
        "parser": "RegexExtractAll",
        "input": "...omitted for brevity...",
        "args": {
            "pattern": "\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b"
        },
        "error": false,
        "output": [
            "192.168.190.235",
            "192.168.191.2"
        ]
    },
    {
        "parser": "GetIndex",
        "input": [
            "192.168.190.235",
            "192.168.191.2"
        ],
        "args": {
            "idx": 0
        },
        "error": false,
        "output": "192.168.190.235"
    },
    {
        "parser": "Concat",
        "input": "192.168.190.235",
        "args": {
            "prefix": "",
            "suffix": "/24"
        },
        "error": false,
        "output": "192.168.190.235/24"
    },
    {
        "parser": "IpNetwork",
        "input": "192.168.190.235/24",
        "args": {},
        "error": false,
        "output": "192.168.190.0/24"
    }
]
>>>

Development

Environment Setup

  1. Install Poetry
  2. Clone the repo: git clone https://github.com/clay584/knex && cd knex
  3. Install pre-requisits for developement: poetry install
  4. Activate the environment: poetry shell
  5. Install git pre-commit hook: pre-commit install && pre-commit autoupdate

Making Changes

  1. Run tests and validate coverage: pytest -v --cov=knex --cov-report html tests
  2. Commit all changes, and have clean git repo on main branch.
  3. Bump version: bump2version <major|minor|patch>
  4. Push to git: git push && git push --tags
  5. Build for PyPI: Automatically done by Github Actions when a tag is pushed.
  6. Publish to PyPI: Automatically done by Github Actions when a tag is pushed.

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

knex-0.2.2.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

knex-0.2.2-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file knex-0.2.2.tar.gz.

File metadata

  • Download URL: knex-0.2.2.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.10 CPython/3.8.2 Linux/5.8.0-1041-azure

File hashes

Hashes for knex-0.2.2.tar.gz
Algorithm Hash digest
SHA256 b6aa1e4da485efad883869bf368b98c5c49cc89e9bb15c03ed9df9de4ae449f7
MD5 de373d0060e1ddde598e198a85dd49f8
BLAKE2b-256 4d29e113bc38d9caecf87707047ab90525f62ac249c0a782f7109a4aab8ab9b7

See more details on using hashes here.

File details

Details for the file knex-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: knex-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.10 CPython/3.8.2 Linux/5.8.0-1041-azure

File hashes

Hashes for knex-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2efde9721f914c200be389bc9c47faf429a2456c2b782c35d1bd6db3af4126cc
MD5 b5f04670f2f0d58ac05849d7be4186ab
BLAKE2b-256 725708188e91ad325812d24b902b5b5930ea3edee6c49db6819d574367bff484

See more details on using hashes here.

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