{"id":20569522,"url":"https://github.com/hazarddede/pnp","last_synced_at":"2025-04-14T16:35:19.312Z","repository":{"id":48118297,"uuid":"132957341","full_name":"HazardDede/pnp","owner":"HazardDede","description":"Pull 'n' Push - Pulls data from sources and pushes it to sinks","archived":false,"fork":false,"pushed_at":"2023-02-15T17:57:59.000Z","size":2060,"stargazers_count":4,"open_issues_count":5,"forks_count":1,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-04-12T09:47:51.558Z","etag":null,"topics":["asyncio","data","home-automation","mqtt","pipeline","python3","workflow"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HazardDede.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-10T21:42:20.000Z","updated_at":"2021-04-25T12:42:27.000Z","dependencies_parsed_at":"2023-02-18T11:17:41.174Z","dependency_job_id":null,"html_url":"https://github.com/HazardDede/pnp","commit_stats":{"total_commits":484,"total_committers":2,"mean_commits":242.0,"dds":"0.19834710743801653","last_synced_commit":"469ca17254dcca1a4eefe0dc5ac574692a9ab38e"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HazardDede%2Fpnp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HazardDede%2Fpnp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HazardDede%2Fpnp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HazardDede%2Fpnp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HazardDede","download_url":"https://codeload.github.com/HazardDede/pnp/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248917175,"owners_count":21182946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asyncio","data","home-automation","mqtt","pipeline","python3","workflow"],"created_at":"2024-11-16T05:08:33.671Z","updated_at":"2025-04-14T16:35:19.280Z","avatar_url":"https://github.com/HazardDede.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pull 'n' Push\n\n[![Python](https://img.shields.io/badge/Python-3.6%20%7C%203.7%20%7C%203.8-green.svg)](https://www.python.org/)\n[![PyPI version](https://badge.fury.io/py/pnp.svg)](https://badge.fury.io/py/pnp)\n[![Docs](https://readthedocs.org/projects/pnp/badge/?version=stable)](https://pnp.readthedocs.io/en/stable/?badge=stable)\n[![GitHub Activity](https://img.shields.io/github/commit-activity/y/HazardDede/pnp.svg)](https://github.com/HazardDede/pnp/commits/master)\n[![Build Status](https://travis-ci.org/HazardDede/pnp.svg?branch=master)](https://travis-ci.org/HazardDede/pnp)\n[![Coverage Status](https://coveralls.io/repos/github/HazardDede/pnp/badge.svg?branch=master)](https://coveralls.io/github/HazardDede/pnp?branch=master)\n[![Docker: hub](https://img.shields.io/badge/docker-hub-brightgreen.svg)](https://cloud.docker.com/u/hazard/repository/docker/hazard/pnp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n![Project Maintenance](https://img.shields.io/badge/maintainer-Dennis%20Muth%20%40HazardDede-blue.svg)\n\n\u003e Pulls data from sources and pushes it to sinks with optional transformations in between.\n\n## Installation\n\n    pip install pnp\n\nInstallation with extras:\n    \n    pip install pnp[fswatcher,faceR]\n\nPlease consult the [component documentation](https://pnp.readthedocs.io/en/stable/plugins/index.html) to see if a\ncomponent requires an extra or not.\n\n## Getting started\n\nDefine `pulls` to fetch / pull data from source systems.\nDefine one `push` or multiple `pushes` per pull to transfer the pulled data anywhere else (you only need a plugin that \nknows how to handle the target). You configure your pipeline in `yaml`:\n\n```yaml\ntasks:\n  - name: hello-world\n    pull:\n      plugin: pnp.plugins.pull.simple.Repeat\n      args:\n        interval: 1s\n        repeat: \"Hello World\"\n    push:\n      - plugin: pnp.plugins.push.simple.Echo\n```\n        \nCopy this configuration and create the file `helloworld.yaml`. Run it:\n\n    pnp helloworld.yaml\n\nThis example yields the string `Hello World` every second.\n\n**Hint**: You can validate your config without actually executing it with\n\n```bash\n   pnp --check helloworld.yaml\n```\n\nIf you want to learn more please see the documentation at [Read the Docs](https://pnp.readthedocs.io/en/stable/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhazarddede%2Fpnp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhazarddede%2Fpnp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhazarddede%2Fpnp/lists"}