Metadata-Version: 2.4
Name: cmem-plugin-ntfy
Version: 1.1.0
Summary: Send and receive push notifications and attachments with ntfy.
License: Apache-2.0
License-File: LICENSE
Keywords: eccenca Corporate Memory,plugin
Author: eccenca GmbH
Author-email: cmempy-developer@eccenca.com
Requires-Python: >=3.13,<4.0
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Plugins
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3.15
Requires-Dist: cmem-client (>=1.3.0,<2.0.0)
Requires-Dist: cmem-plugin-base (>=4.20.0,<5.0.0)
Requires-Dist: requests (>=2.34.2,<3.0.0)
Description-Content-Type: text/markdown

# cmem-plugin-ntfy

Send and receive push notifications and attachments with ntfy.

[![eccenca Corporate Memory][cmem-shield]][cmem-link]

This is a plugin for [eccenca Corporate Memory](https://documentation.eccenca.com). You can install it with the [cmemc](https://eccenca.com/go/cmemc) command line client like this:

```
cmemc admin workspace python install cmem-plugin-ntfy
```

## The tasks

| Task | What it does |
| --- | --- |
| **Send ntfy message** | Sends a push notification to a topic - one per incoming entity, or a single one configured on the task. |
| **Get ntfy messages** | Reads the messages of a topic as entities, either everything the server holds or only what arrived since the previous run. |
| **Get ntfy attachments** | Downloads the files attached to a topic's messages and hands them on as file entities. |
| **Send ntfy attachment** | Sends files produced earlier in the workflow to a topic as attachments. |

All four work against the public [ntfy.sh](https://ntfy.sh) service and against
a self-hosted ntfy. A public topic needs no credentials; a protected one is
reached with an access token. Each task offers a connection check, and the two
reading tasks can preview what is waiting and forget their read position.
 [![pypi version](https://img.shields.io/pypi/v/cmem-plugin-ntfy)](https://pypi.org/project/cmem-plugin-ntfy) [![license](https://img.shields.io/pypi/l/cmem-plugin-ntfy)](https://pypi.org/project/cmem-plugin-ntfy)
[![poetry][poetry-shield]][poetry-link] [![ruff][ruff-shield]][ruff-link] [![mypy][mypy-shield]][mypy-link] [![copier][copier-shield]][copier] 

[cmem-link]: https://documentation.eccenca.com
[cmem-shield]: https://img.shields.io/endpoint?url=https://documentation.eccenca.com/latest/badge.json
[poetry-link]: https://python-poetry.org/
[poetry-shield]: https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json
[ruff-link]: https://docs.astral.sh/ruff/
[ruff-shield]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&label=Code%20Style
[mypy-link]: https://mypy-lang.org/
[mypy-shield]: https://www.mypy-lang.org/static/mypy_badge.svg
[copier]: https://copier.readthedocs.io/
[copier-shield]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-grayscale-inverted-border-purple.json


