semvec/pypi-packages huggingface dataset:
jupyter-vote 0.3.0
EduVote integration for Jupyter notebooks
Requires Python: >=3.10

# Jupyter Vote

Jupyter vote is a simple [eduVote](https://www.eduvote.de/) integration for Jupyter notebooks using [`IFrame`s](https://ipython.readthedocs.io/en/stable/api/generated/IPython.display.html#IPython.display.IFrame).

## Creating Polls

EduVote offers four types of polls, which can be created using the following methods. The parameters to these methods map directly to the query parameters of the poll URL which in turn directly configure the poll. The methods return an IFrame so it should be the last line in a cell, or the output needs to be explicitly displayed with [`display`](https://ipython.readthedocs.io/en/stable/api/generated/IPython.display.html#IPython.display.display).

- `vote.choice(question: str, choices: int, *, multiple: bool = False, percent: bool = False, once: bool = False) -> IFrame`
- `vote.yes_no(question: str, *, percent: bool = False, once: bool = False) -> IFrame`
- `vote.cloud(question: str, *, keep: bool = False, live: bool = False, wait: int = 60) -> IFrame`
- `vote.list(question: str, *, keep: bool = False, live: bool = False, wait: int = 60) -> IFrame`

Parameters:

- `question`: The question to be asked in the poll.
- `choices`: The number of choices to be provided.
- `multiple`: Whether multiple choices can be selected.
- `percent`: Whether to show the results in percent as opposed to counts.
- `once`: Whether the poll can only be answered once per device.
- `keep`: Whether to keep the cloud or list from the previous poll.
- `live`: Whether to show the results immediately or only after a manual reveal.
- `wait`: The time in seconds to wait before a device can submit another answer.

## Voting

The interface for voting can be displayed using the `vote.vote(id: str = None) -> IFrame` method. The `id` parameter is optional and can be used to specify the teacher ID. If no ID is provided, the function attempts to use the ID stored in module level variable `vote.vote_id`.

## Notes

The first time a poll is made, the credentials need to be entered in the EduVote interface. The credentials can be saved and should persist even between sessions.

The size of the IFrames can be adjusted by changing the `vote.poll_iframe_args` and `vote.vote_iframe_args` dictionaries which are passed directly to the `IFrame` constructor.
notification-mcp 0.1.3
一个基于 FastMCP 的消息推送工具，支持 PushDeer、Bark 等多种推送渠道
Requires Python: >=3.12

# 消息推送服务 (MCP)

[![PyPI](https://img.shields.io/pypi/v/notification-mcp.svg)](https://pypi.org/project/notification-mcp/)

这是一个使用 [FastMCP](https://github.com/ch1y1z1/fastmcp) 框架构建的消息推送服务集合。它支持 Bark 和 PushDeer。

![show](image.png)

## 使用

这个包提供了两个主要命令：`mcp-bark` 和 `mcp-pushdeer`。你可以使用像 `uvx` 或 `pipx` 这样的工具来运行它们。

**使用 `uvx` 的例子：**

```bash
# 运行 Bark 服务
# 这将启动 Bark 通知的 MCP 服务器
uvx --from notification_mcp mcp-bark

# 运行 PushDeer 服务
# 这将启动 PushDeer 通知的 MCP 服务器
uvx --from notification_mcp mcp-pushdeer
```

一旦服务启动，你就可以使用 FastMCP 客户端或其他兼容方法来与工具（如 `send_message`）进行交互。

## 环境变量

在运行命令之前，请配置以下环境变量：

**对于 Bark (`mcp-bark`）：**

*   `BARK_DEVICE_KEYS`: **必需**。逗号分隔的 Bark 设备密钥列表（例如 `key1,key2`）。
*   `BARK_SERVER`: 可选。自建 Bark 服务器 URL，默认为 `https://api.day.app`。

**对于 PushDeer (`mcp-pushdeer`）：**

*   `PUSHDEER_KEYS`: **必需**。逗号分隔的 PushDeer 密钥列表（例如 `keyA,keyB`）。
*   `PUSHDEER_SERVER`: 可选。自建 PushDeer 服务器 URL，默认为 `https://api2.pushdeer.com`。

## 功能

### Bark 服务 (`mcp-bark`)

提供以下工具：

*   **`send_message(title: str, content: str) -> str`**: 向所有配置的 Bark 设备发送带有指定标题和内容的通知。

### PushDeer 服务 (`mcp-pushdeer`)

提供以下工具：

*   **`send_message(text: str, desp: Optional[str] = None, type: str = 'text', pushkey: Optional[str] = None) -> str`**: 发送消息。`type` 可以是 'text'、'markdown' 或 'image'（其中 `text` 是图像 URL）。
*   **`send_markdown(markdown: str, desp: Optional[str] = None, pushkey: Optional[str] = None) -> str`**: 一个发送 Markdown 消息的便捷工具。
*   **`send_image(image_url: str, desp: Optional[str] = None, pushkey: Optional[str] = None) -> str`**: 一个通过 URL 发送图像消息的便捷工具。

## 许可

MIT