Skip to main content

Chanina is a Python application to automate and orchestrate Playwright sessions using a Celery-based task system.

Project description

Chanina

Chanina is a Python application to automate and orchestrate Playwright sessions using a Celery-based task system. It provides a workflow manager, a shared context between tasks, and utilities to interact programmatically with web pages. A CLI is also available to run workflows or tasks from the terminal.

This aims at transforming what is often a tedious and imprecise process, to a more scalable, developper friendly and robust part of your tests suite.


Features

  • Playwright session management: WorkerSession shares the Playwright context, pages, and utility tools among all tasks within the same worker.
  • Celery task system: create, register, and execute reusable tasks using the @feature decorator.
  • Complex workflows: support for chains and groups of tasks, with sequences managed automatically.
  • Smart tools for Playwright: navigate, inspect, interact and wait modules gathers methods.
  • CLI: run workflows or tasks from the terminal.
  • Isolated browser profiles: manage profiles to prevent conflicts between workers and the main playwright process.

Installation

git clone <REPO_URL>
cd <REPO_NAME>
poetry install

Running Celery Workers

celery -A sub_module.module:celery_app worker --loglevel=info

Usage

Register tasks with Celery

@app.feature("my_task")
def do_something(session: WorkerSession, args: dict):
    # session is the shared WorkerSession containing the current page and utilities
    page = session.new_page()
    session.goto(page, "https://example.com")
    session.close_page(page)

The first parameter of the feature's function always is the WorkerSession object. !! Except when making a 'bind=True' parameter for the task, in which case the first parameter is the instance of the class.

Create and execute workflows

A workflow is a json file in which you can construct a sequence of tasks and specifies arguments. The workflow has two main keys : 'steps' and 'instance'.

  • The 'steps' section are the features you want to use in your workflow ordered and with the arguments specified.

  • The 'instancce' section is where you can specified if a 'step' defined in the other section needs multiple instances.

If you have a 'extract_html' feature, and you add it in your workflow, you can add as much instance of it as you need page to extract_html from, passing the page url in the 'args' key.

  • Every step has a 'flow_type' argument, that can be 'chain' or 'group', and will determine the kind of celery task it will be.

NOTE

The sequence is built in the order of the steps in the file. 'group' task will be run FIRST and are non blocking for the rest of the sequence. In the workflow example underneath, we can imagine that the flow_type 'group' of the task 'save_to_mongodb' is because the task is a while loop running in parallel which saves in the db what the 'check_post' task is parsing.

Here is an example of a workflow file :

{
  "steps": [
    {
      "identifier": "login_to_platform",
      "args": {"password": "", "username": "Joseph S"},
      "flow_type": "chain"
    },
    {
      "identifier": "check_post",
      "flow_type": "chain"
    },
    {
      "identifier": "save_in_mongodb",
      "args": {"user": "mongo_user", "pw": "", "host": "localhost", "port": 27017},
      "flow_type": "group"
    }

  ],
  "instances": {
    "check_post": [
      {
        "args": {
            "post_url": "https://instagram.com/p/publication1"
        }
      },
      {
        "args": {
            "post_url": "https://instagram.com/p/publication2"
        }
      },
      {
        "args": {
            "post_url": "https://instagram.com/p/publication3"
        }
      }
    ]
  }
}

Use the CLI

Tasks can be ran with the CLI, please use 'poetry run cli --help' to learn more.

    $ poetry run cli login_workflow.json --app login_process.app:celery --arguments password=$PASSWORD username=$USERNAME

You can also manually run a task if your worker is still up

    $ poetry run cli --task check_post --app login_process.app:celery --arguments post_url="https://www.instagram.com/p/another-publication-not-in-the-workflow"

License

For now this project has no Licence, i'm working on it.

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

chanina-0.1.1.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

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

chanina-0.1.1-py3-none-any.whl (20.7 kB view details)

Uploaded Python 3

File details

Details for the file chanina-0.1.1.tar.gz.

File metadata

  • Download URL: chanina-0.1.1.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.3 Linux/6.14.0-27-generic

File hashes

Hashes for chanina-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5df97665ec5e34c20e6af37b3fbf718d135aa07b81915e055b8b78ec43d946b9
MD5 0ee792a72c72185b578f8bad65d6c621
BLAKE2b-256 41b8f018670685de337da66aeac399f3b4e7fc36805d9df1104d2ac777f3eb64

See more details on using hashes here.

File details

Details for the file chanina-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: chanina-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 20.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.3 Linux/6.14.0-27-generic

File hashes

Hashes for chanina-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f15c7ed26b4bdad7853f9db4b5cbbcb3681b873d2872726412c3b80d049cd317
MD5 b597bd852b9b53a3e1461d7e1b6722c0
BLAKE2b-256 4145cacca78aaeebbc4d89d3e4b2c64d48bac78b7475f6b069c23fa3343d9bed

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