Skip to main content

A simple python framework for building data processing pipelines

Project description

Pypeliner

pypeliner is a simple python framework for building data processing pipelines.

you can check out the documentation here.

and checkout some examples here.

Installation

it can be simply installing using pip:

pip install simple-pypeliner

Getting Started

Let's say we want to build a pipeline for processing textual data coming from a file. we will need 3 main components to achieve this using pypeliner.

Reader

first we will need a reader for reading the file, and it can be defined like the following:

from pypeliner.readers.base import BaseReader

class FileReader(BaseReader):
    def __init__(self, file_path: str) -> None:
        self.file_path = file_path

    def read(self) -> str:
        with open(self.file_path, "r") as file_handler:
            return file_handler.read()

inheriting from BaseReader makes sure that the read method is implemented to be used later within the Reader. the code basically is reading a file and returning its content as a string.

Processors

next we will define our processing logic, lets say we want to make all letters in the text file lower case, then remove stop words i.g: but, and, or, etc after that remove numbers.

to achieve that we will write a processor for each one of these tasks.

each processor should define its own process method. a processor will receive the state it needs to process from the Runner.

if state is passed the that processor will use the state instead of the state passed by the runner, this is achieved using the super call for process method and passing state there. it is recommended to always call super for the process method as a best practice.

PROCESSOR_NAME is a verbose name for a processor.

1- Lower Case Processor

class LowerCaseProcessor(BaseProcessor):
    PROCESSOR_NAME = "Lower Case Processor"

    def process(self, state: Any = None) -> Any:
        return state.lower()

2- Remove Stop Words Processor

class RemoveStopWordsProcessor(BaseProcessor):
    PROCESSOR_NAME = "Remove Stop Words Processor"

    def process(self, state: Any = None) -> Any:
        stop_words = [
            "the", "to", "and", "a",
            "in", "it", "is", "am",
            "I", "that", "had", "on",
            "for", "be", "were", "was",
            "of", "or", "it", "an",
        ]

        result = ""

        for stop_word in stop_words:
            result = re.sub(
                rf"\W+{stop_word.title()}\W+", " ",
                re.sub(
                    rf"\W+{stop_word}\W+", " ",
                    state
                )
            )

        return result

3- Remove Numbers Processor

class RemoveNumbersProcessor(BaseProcessor):
    PROCESSOR_NAME = "Remove Numbers Processor"

    def process(self, state: Any = None) -> Any:
        return re.sub(r"\d+", "", state)

Runner

the runner is the place where everything comes together, it will use the Reader to load the file and define the running loop for the Processor

we'll be using the built in BaseRunner

from runners.base import BaseRunner

runner = BaseRunner(
    processors=[
        LowerCaseProcessor(),
        RemoveStopWordsProcessor(),
        RemoveNumbersProcessor(),
    ],
    reader=FileReader(
        file_path="test.txt"
    ),
    configuration=RunnerConfiguration(
        post_processors=[],
        post_processors=[],
        verbose=True,
        run_timers=True
    )
)

print(runner.run())

processors parameter will set the processors of the pipeline and also its order.

reader parameter will set the reader of the pipeline to be the file reader we defined earlier.

configuration parameter will set the configuration for the runner.

verbose will print the current processor that is running and run_timers will print the time consumed by each processor to run and you can also set pre-processors and post-processors that will run before and after each processor.

for more information visit the documentation at pypeliner

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

simple-pypeliner-1.3.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

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

simple_pypeliner-1.3-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file simple-pypeliner-1.3.tar.gz.

File metadata

  • Download URL: simple-pypeliner-1.3.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for simple-pypeliner-1.3.tar.gz
Algorithm Hash digest
SHA256 6c808b9700ce60214656080ea648b2660bccb7c2275f7822106e549671621639
MD5 2cfb3f1de2893bdf89b3f87970949b76
BLAKE2b-256 5fef3ca872b590597de2238ac6f2d021147d2f210b60a4e7417725e41ca36e35

See more details on using hashes here.

File details

Details for the file simple_pypeliner-1.3-py3-none-any.whl.

File metadata

  • Download URL: simple_pypeliner-1.3-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for simple_pypeliner-1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 eb82050a2d23182422a34d806c7439188fa76c33e1779d66078cfce21d495984
MD5 160a29f997e85dd95d491d88ace92637
BLAKE2b-256 ad2275914585241fe340c8a7a2b859e5cd8ce6cce44d6ea8e0215e75aa68e346

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