roboherd 0.1.5__tar.gz → 0.1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of roboherd might be problematic. Click here for more details.
- {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/test.yml +1 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/website.yml +1 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/CHANGES.md +10 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/PKG-INFO +4 -1
- {roboherd-0.1.5 → roboherd-0.1.7}/docs/index.md +43 -8
- roboherd-0.1.7/docs/main.md +3 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/mkdocs.yml +2 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/pyproject.toml +6 -2
- {roboherd-0.1.5 → roboherd-0.1.7}/resources/docker/Dockerfile +2 -2
- roboherd-0.1.7/roboherd/__init__.py +25 -0
- roboherd-0.1.7/roboherd/annotations/__init__.py +43 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/annotations/bovine.py +28 -2
- roboherd-0.1.5/roboherd/annotations/__init__.py → roboherd-0.1.7/roboherd/annotations/common.py +7 -32
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/__init__.py +8 -0
- roboherd-0.1.7/roboherd/examples/dev_null.py +10 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/examples/json_echo.py +6 -11
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/examples/moocow.py +6 -10
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/examples/number.py +5 -10
- roboherd-0.1.7/roboherd/examples/rooster.py +16 -0
- roboherd-0.1.7/roboherd/examples/scarecrow.py +23 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/uv.lock +85 -121
- roboherd-0.1.5/roboherd/annotations/common.py +0 -14
- roboherd-0.1.5/roboherd/examples/__init__.py +0 -0
- roboherd-0.1.5/roboherd/examples/dev_null.py +0 -13
- roboherd-0.1.5/roboherd/examples/rooster.py +0 -22
- roboherd-0.1.5/roboherd/examples/scarecrow.py +0 -22
- {roboherd-0.1.5 → roboherd-0.1.7}/.gitignore +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/create_release.yml +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/publish_docker.yml +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/publish_pypi.yml +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/README.md +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/docs/annotations.md +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/docs/assets/bull-horns.png +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/docs/assets/mastodon.png +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/docs/cli.md +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/docs/cow.md +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/docs/herd.md +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/docs/util.md +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/resources/docker/build.sh +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/__main__.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/const.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/handlers.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/profile.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/test_handlers.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/test_init.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/test_profile.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/test_util.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/types.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/util.py +0 -0
- {roboherd-0.1.5/roboherd → roboherd-0.1.7/roboherd/examples}/__init__.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/examples/meta.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/__init__.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/builder.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/__init__.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/config.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/load.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/test_config.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/test_load.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/test_manager.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/processor.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/scheduler.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/test_herd.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/test_scheduler.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/types.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/register.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/test_validators.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/util.py +0 -0
- {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/validators.py +0 -0
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changes to roboherd
|
|
2
2
|
|
|
3
|
+
## 0.1.7 ([Milestone](https://codeberg.org/bovine/roboherd/milestone/10741))
|
|
4
|
+
|
|
5
|
+
- Repair docker file [roboherd#38](https://codeberg.org/bovine/roboherd/issues/38)
|
|
6
|
+
- Simplify imports and creating a RoboCow [roboherd#39](https://codeberg.org/bovine/roboherd/issues/39)
|
|
7
|
+
|
|
8
|
+
## 0.1.6 ([Milestone](https://codeberg.org/bovine/roboherd/milestone/10694))
|
|
9
|
+
|
|
10
|
+
- Comment on python path [roboherd#34](https://codeberg.org/bovine/roboherd/issues/34)
|
|
11
|
+
- Enable direct posting of markdown [roboherd#35](https://codeberg.org/bovine/roboherd/issues/35)
|
|
12
|
+
|
|
3
13
|
## 0.1.5 ([Milestone](https://codeberg.org/bovine/roboherd/milestone/10581))
|
|
4
14
|
|
|
5
15
|
- Allow overriding the base_url [roboherd#12](https://codeberg.org/bovine/roboherd/issues/12)
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roboherd
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: A Fediverse bot framework
|
|
5
|
+
Project-URL: Documentation, https://bovine.codeberg.page/roboherd/
|
|
6
|
+
Project-URL: Repository, https://codeberg.org/bovine/roboherd
|
|
5
7
|
Requires-Python: >=3.11
|
|
6
8
|
Requires-Dist: aiohttp>=3.11.12
|
|
7
9
|
Requires-Dist: almabtrieb[mqtt]>=0.1.0a1
|
|
@@ -14,6 +16,7 @@ Requires-Dist: tomli-w>=1.1.0
|
|
|
14
16
|
Requires-Dist: watchfiles>=1.0.4
|
|
15
17
|
Provides-Extra: bovine
|
|
16
18
|
Requires-Dist: bovine>=0.5.15; extra == 'bovine'
|
|
19
|
+
Requires-Dist: markdown>=3.7; extra == 'bovine'
|
|
17
20
|
Description-Content-Type: text/markdown
|
|
18
21
|
|
|
19
22
|
# Roboherd
|
|
@@ -11,6 +11,19 @@ We will now tour how to write bots with Roboherd. We start with
|
|
|
11
11
|
a basic bot that does nothing except have a profile. Then we will
|
|
12
12
|
start by adding features.
|
|
13
13
|
|
|
14
|
+
First, you will need to install roboherd, see [Installation](#installation).
|
|
15
|
+
For our purposes, you can start by running the docker container via
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
docker run --rm -ti -v .:/app helgekr/roboherd
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Then you can run roboherd with local files by running
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
python -mroboherd run
|
|
25
|
+
```
|
|
26
|
+
|
|
14
27
|
### Basic bot aka how to configure the profile
|
|
15
28
|
|
|
16
29
|
The configuration file defines the actor by a name and the used python file,
|
|
@@ -113,6 +126,23 @@ Similarly, one can override the name and the `base_url` to use.
|
|
|
113
126
|
|
|
114
127
|
### Posting on startup
|
|
115
128
|
|
|
129
|
+
The simplest way to post is to use
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
@bot.startup
|
|
133
|
+
async def startup(poster: MarkdownPoster):
|
|
134
|
+
await poster("__Booo!__ 🐦")
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
here [MarkdownPoster][roboherd.annotations.bovine.MarkdownPoster] is an annotation.
|
|
138
|
+
Annotations are injected through [FastDepends](https://lancetnik.github.io/FastDepends/). The markdown poster abstracts away the following steps
|
|
139
|
+
|
|
140
|
+
- Convert markdown to HTML
|
|
141
|
+
- Create a note based with the HTML as content (done below with the object factory)
|
|
142
|
+
- Send the note to the server (done below with publish object)
|
|
143
|
+
|
|
144
|
+
### Manually posting
|
|
145
|
+
|
|
116
146
|
By adding
|
|
117
147
|
|
|
118
148
|
```python
|
|
@@ -124,8 +154,7 @@ async def startup(publish_object: PublishObject, object_factory: ObjectFactory):
|
|
|
124
154
|
|
|
125
155
|
one can post on startup. Here [PublishObject][roboherd.annotations.PublishObject]
|
|
126
156
|
and [ObjectFactory][roboherd.annotations.bovine.ObjectFactory]
|
|
127
|
-
are annotations
|
|
128
|
-
through [FastDepends](https://lancetnik.github.io/FastDepends/).
|
|
157
|
+
are annotations.
|
|
129
158
|
|
|
130
159
|
PublishObject depends on the [simple storage extension of cattle_grid](https://bovine.codeberg.page/cattle_grid/extensions/simple_storage/), whereas
|
|
131
160
|
ObjectFactory injects an [ObjectFactory][bovine.activitystreams.object_factory.ObjectFactory] provided by the [bovine](https://bovine.readthedocs.io/en/latest/) library.
|
|
@@ -214,14 +243,14 @@ and the appropriate bots, one can run these bots
|
|
|
214
243
|
by running
|
|
215
244
|
|
|
216
245
|
```bash
|
|
217
|
-
|
|
246
|
+
python -mroboherd run
|
|
218
247
|
```
|
|
219
248
|
|
|
220
249
|
inside the container. Alternatively, this can be done directly
|
|
221
250
|
by running
|
|
222
251
|
|
|
223
252
|
```bash
|
|
224
|
-
docker run --rm -v .:/app helgekr/roboherd
|
|
253
|
+
docker run --rm -v .:/app helgekr/roboherd python -mroboherd run
|
|
225
254
|
```
|
|
226
255
|
|
|
227
256
|
### Installing roboherd as a python package
|
|
@@ -232,18 +261,24 @@ To install roboherd with [bovine](https://bovine.readthedocs.io/en/latest/) supp
|
|
|
232
261
|
pip install roboherd[bovine]
|
|
233
262
|
```
|
|
234
263
|
|
|
235
|
-
You are then able to run the roboherd command
|
|
264
|
+
You are then able to run the roboherd command
|
|
236
265
|
|
|
237
266
|
```bash
|
|
238
|
-
|
|
267
|
+
python -mroboherd run
|
|
239
268
|
```
|
|
240
269
|
|
|
241
|
-
|
|
270
|
+
### The roboherd command
|
|
271
|
+
|
|
272
|
+
You can also run roboherd by running
|
|
242
273
|
|
|
243
274
|
```bash
|
|
244
|
-
|
|
275
|
+
roboherd run
|
|
245
276
|
```
|
|
246
277
|
|
|
278
|
+
The difference to `python -mroboherd run` is that with the former,
|
|
279
|
+
the current directory is not added to the python path. It will still
|
|
280
|
+
be used to find the `roboherd.toml` configuration file.
|
|
281
|
+
|
|
247
282
|
## Configuration
|
|
248
283
|
|
|
249
284
|
roboherd has three global configuration variables, e.g.
|
|
@@ -59,8 +59,10 @@ plugins:
|
|
|
59
59
|
- griffe_fieldz: { include_inherited: true }
|
|
60
60
|
nav:
|
|
61
61
|
- Home: index.md
|
|
62
|
+
- "Changes": CHANGES.md
|
|
62
63
|
- "Commang Line Tool": cli.md
|
|
63
64
|
- "References":
|
|
65
|
+
- "roboherd": main.md
|
|
64
66
|
- "roboherd.annotations": annotations.md
|
|
65
67
|
- "roboherd.cow": cow.md
|
|
66
68
|
- "roboherd.herd": herd.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "roboherd"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.7"
|
|
4
4
|
description = "A Fediverse bot framework"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -16,6 +16,10 @@ dependencies = [
|
|
|
16
16
|
"watchfiles>=1.0.4",
|
|
17
17
|
]
|
|
18
18
|
|
|
19
|
+
[project.urls]
|
|
20
|
+
Documentation = "https://bovine.codeberg.page/roboherd/"
|
|
21
|
+
Repository = "https://codeberg.org/bovine/roboherd"
|
|
22
|
+
|
|
19
23
|
[build-system]
|
|
20
24
|
requires = ["hatchling"]
|
|
21
25
|
build-backend = "hatchling.build"
|
|
@@ -26,7 +30,7 @@ roboherd = "roboherd.__main__:main"
|
|
|
26
30
|
|
|
27
31
|
|
|
28
32
|
[project.optional-dependencies]
|
|
29
|
-
bovine = ["bovine>=0.5.15"]
|
|
33
|
+
bovine = ["bovine>=0.5.15", "markdown>=3.7"]
|
|
30
34
|
|
|
31
35
|
[tool.uv]
|
|
32
36
|
dev-dependencies = [
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Main roboherd module. Should contain all necessary elements to build a robocow"""
|
|
2
|
+
|
|
3
|
+
from .cow import RoboCow
|
|
4
|
+
from .annotations import (
|
|
5
|
+
PublishObject,
|
|
6
|
+
PublishActivity,
|
|
7
|
+
RawData,
|
|
8
|
+
ParsedData,
|
|
9
|
+
Activity,
|
|
10
|
+
EmbeddedObject,
|
|
11
|
+
)
|
|
12
|
+
from .annotations.bovine import MarkdownPoster, ObjectFactory, ActivityFactory
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"RoboCow",
|
|
16
|
+
"RawData",
|
|
17
|
+
"ParsedData",
|
|
18
|
+
"Activity",
|
|
19
|
+
"EmbeddedObject",
|
|
20
|
+
"MarkdownPoster",
|
|
21
|
+
"ActivityFactory",
|
|
22
|
+
"ObjectFactory",
|
|
23
|
+
"PublishObject",
|
|
24
|
+
"PublishActivity",
|
|
25
|
+
]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from fast_depends import Depends
|
|
2
|
+
from typing import Annotated
|
|
3
|
+
|
|
4
|
+
from .common import PublishObject, PublishActivity # noqa
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def get_raw(data: dict) -> dict:
|
|
8
|
+
return data.get("data", {}).get("raw")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_parsed(data: dict) -> dict:
|
|
12
|
+
result = data.get("data", {}).get("parsed")
|
|
13
|
+
if result is None:
|
|
14
|
+
raise ValueError("No parsed data found")
|
|
15
|
+
return result
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
RawData = Annotated[dict, Depends(get_raw)]
|
|
19
|
+
"""The raw data as received by cattle_grid"""
|
|
20
|
+
|
|
21
|
+
ParsedData = Annotated[dict, Depends(get_parsed)]
|
|
22
|
+
"""The parsed data as transformed by muck_out"""
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_activity(parsed: ParsedData) -> dict:
|
|
26
|
+
result = parsed.get("activity")
|
|
27
|
+
if not result:
|
|
28
|
+
raise ValueError("No activity found")
|
|
29
|
+
return result
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def get_embedded_object(parsed: ParsedData) -> dict:
|
|
33
|
+
result = parsed.get("embeddedObject")
|
|
34
|
+
if not result:
|
|
35
|
+
raise ValueError("No embedded object found")
|
|
36
|
+
return result
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
Activity = Annotated[dict, Depends(get_activity)]
|
|
40
|
+
"""The activity parsed by muck_out"""
|
|
41
|
+
|
|
42
|
+
EmbeddedObject = Annotated[dict, Depends(get_embedded_object)]
|
|
43
|
+
"""The embedded object in the activity as parsed by muck_out"""
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Test documentation"""
|
|
2
2
|
|
|
3
|
-
from typing import Annotated
|
|
3
|
+
from typing import Annotated, Awaitable, Callable
|
|
4
4
|
from fast_depends import Depends
|
|
5
|
-
from .common import Profile
|
|
5
|
+
from .common import Profile, PublishObject
|
|
6
6
|
|
|
7
7
|
try:
|
|
8
8
|
from bovine.activitystreams import factories_for_actor_object
|
|
@@ -39,3 +39,29 @@ ActivityFactory = Annotated[BovineActivityFactory, Depends(get_activity_factory)
|
|
|
39
39
|
|
|
40
40
|
ObjectFactory = Annotated[BovineObjectFactory, Depends(get_object_factory)] # type: ignore
|
|
41
41
|
"""The object factory of type [bovine.activitystreams.object_factory.ObjectFactory][]"""
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
import markdown
|
|
46
|
+
|
|
47
|
+
def get_markdown_poster( # type: ignore
|
|
48
|
+
object_factory: ObjectFactory, publish_object: PublishObject
|
|
49
|
+
):
|
|
50
|
+
async def publish_markdown(message: str):
|
|
51
|
+
content = markdown.markdown(message)
|
|
52
|
+
note = object_factory.note(content=content).as_public().build() # type: ignore
|
|
53
|
+
await publish_object(note)
|
|
54
|
+
|
|
55
|
+
return publish_markdown
|
|
56
|
+
|
|
57
|
+
except ImportError:
|
|
58
|
+
|
|
59
|
+
def get_markdown_poster() -> None:
|
|
60
|
+
raise ImportError("bovine not installed")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
MarkdownPublisher = Callable[[str], Awaitable[None]]
|
|
64
|
+
"""Type of the markdown publisher"""
|
|
65
|
+
|
|
66
|
+
MarkdownPoster = Annotated[MarkdownPublisher, Depends(get_markdown_poster)] # type: ignore
|
|
67
|
+
"""A function that takes a markdown string and posts it as the content of a note"""
|
roboherd-0.1.5/roboherd/annotations/__init__.py → roboherd-0.1.7/roboherd/annotations/common.py
RENAMED
|
@@ -4,43 +4,18 @@ from typing import Annotated, Callable, Awaitable
|
|
|
4
4
|
from almabtrieb import Almabtrieb
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
return data.get("data", {}).get("raw")
|
|
7
|
+
from roboherd.cow import RoboCow
|
|
9
8
|
|
|
10
9
|
|
|
11
|
-
def
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return result
|
|
10
|
+
def get_profile(cow: RoboCow) -> dict:
|
|
11
|
+
if cow.internals.profile is None:
|
|
12
|
+
raise ValueError("Cow has no profile")
|
|
13
|
+
return cow.internals.profile
|
|
16
14
|
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
"""The
|
|
16
|
+
Profile = Annotated[dict, Depends(get_profile)]
|
|
17
|
+
"""The profile of the cow"""
|
|
20
18
|
|
|
21
|
-
ParsedData = Annotated[dict, Depends(get_parsed)]
|
|
22
|
-
"""The parsed data as transformed by muck_out"""
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def get_activity(parsed: ParsedData) -> dict:
|
|
26
|
-
result = parsed.get("activity")
|
|
27
|
-
if not result:
|
|
28
|
-
raise ValueError("No activity found")
|
|
29
|
-
return result
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def get_embedded_object(parsed: ParsedData) -> dict:
|
|
33
|
-
result = parsed.get("embeddedObject")
|
|
34
|
-
if not result:
|
|
35
|
-
raise ValueError("No embedded object found")
|
|
36
|
-
return result
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Activity = Annotated[dict, Depends(get_activity)]
|
|
40
|
-
"""The activity parsed by muck_out"""
|
|
41
|
-
|
|
42
|
-
EmbeddedObject = Annotated[dict, Depends(get_embedded_object)]
|
|
43
|
-
"""The embedded object in the activity as parsed by muck_out"""
|
|
44
19
|
|
|
45
20
|
Publisher = Callable[[dict], Awaitable[None]]
|
|
46
21
|
"""Type returned by the publishing functions"""
|
|
@@ -81,6 +81,14 @@ class RoboCow:
|
|
|
81
81
|
metadata=dict(description="Internal data for the cow"),
|
|
82
82
|
)
|
|
83
83
|
|
|
84
|
+
@staticmethod
|
|
85
|
+
def create(**kwargs):
|
|
86
|
+
"""Creates a new cow. We note that
|
|
87
|
+
`RoboCow.create(name="my name")` is equivalent
|
|
88
|
+
to `RoboCow(information=Information(name="my name"))`.
|
|
89
|
+
"""
|
|
90
|
+
return RoboCow(information=Information(**kwargs))
|
|
91
|
+
|
|
84
92
|
def action(self, action: str = "*", activity_type: str = "*"):
|
|
85
93
|
"""Adds a handler for an event. Use "*" as a wildcard.
|
|
86
94
|
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
import json
|
|
2
2
|
|
|
3
|
-
from roboherd
|
|
4
|
-
from roboherd.annotations import RawData, PublishObject
|
|
5
|
-
from roboherd.annotations.bovine import ObjectFactory
|
|
3
|
+
from roboherd import RoboCow, RawData, PublishObject, ObjectFactory
|
|
6
4
|
|
|
7
|
-
from roboherd.cow.types import Information
|
|
8
5
|
from .meta import meta_information
|
|
9
6
|
|
|
10
|
-
bot = RoboCow(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
description="""<p>I'm a silly bot that replies to
|
|
7
|
+
bot = RoboCow.create(
|
|
8
|
+
handle="jsonecho",
|
|
9
|
+
name="JSON Echo {}",
|
|
10
|
+
description="""<p>I'm a silly bot that replies to
|
|
15
11
|
you with the JSON as received through a HTTP
|
|
16
12
|
post request by
|
|
17
13
|
<a href="https://codeberg.org/helge/cattle_grid">cattle_grid</a>.</p>
|
|
18
14
|
|
|
19
15
|
""",
|
|
20
|
-
|
|
21
|
-
)
|
|
16
|
+
meta_information=meta_information,
|
|
22
17
|
)
|
|
23
18
|
|
|
24
19
|
|
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from roboherd
|
|
4
|
-
from roboherd.annotations import EmbeddedObject, PublishObject
|
|
5
|
-
from roboherd.cow.types import Information
|
|
3
|
+
from roboherd import RoboCow, EmbeddedObject, PublishObject
|
|
6
4
|
from .meta import meta_information
|
|
7
5
|
|
|
8
6
|
logger = logging.getLogger(__name__)
|
|
9
7
|
|
|
10
|
-
moocow = RoboCow(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
description="""I'm a cow that likes to moo.
|
|
8
|
+
moocow = RoboCow.create(
|
|
9
|
+
handle="moocow",
|
|
10
|
+
name="The mooing cow 🐮",
|
|
11
|
+
description="""I'm a cow that likes to moo.
|
|
15
12
|
|
|
16
13
|
I also serve as an example for the RoboHerd python tool.
|
|
17
14
|
See <a href="https://codeberg.org/helge/roboherd">codeberg.org</a>.""",
|
|
18
|
-
|
|
19
|
-
)
|
|
15
|
+
meta_information=meta_information,
|
|
20
16
|
)
|
|
21
17
|
|
|
22
18
|
|
|
@@ -3,10 +3,7 @@ from urllib.parse import urlparse
|
|
|
3
3
|
|
|
4
4
|
from almabtrieb import Almabtrieb
|
|
5
5
|
|
|
6
|
-
from roboherd
|
|
7
|
-
from roboherd.annotations import PublishObject
|
|
8
|
-
from roboherd.annotations.bovine import ObjectFactory
|
|
9
|
-
from roboherd.cow.types import Information
|
|
6
|
+
from roboherd import RoboCow, PublishObject, ObjectFactory
|
|
10
7
|
from .meta import meta_information
|
|
11
8
|
|
|
12
9
|
|
|
@@ -14,14 +11,12 @@ def hostname(actor_id):
|
|
|
14
11
|
return urlparse(actor_id).netloc
|
|
15
12
|
|
|
16
13
|
|
|
17
|
-
bot = RoboCow(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
description="""<p>I'm a bot by Helge. I post a random number every hour. When posting an even number, I change my Fediverse handle to even. When posting an odd one, I use odd.</p>
|
|
14
|
+
bot = RoboCow.create(
|
|
15
|
+
handle="even",
|
|
16
|
+
description="""<p>I'm a bot by Helge. I post a random number every hour. When posting an even number, I change my Fediverse handle to even. When posting an odd one, I use odd.</p>
|
|
21
17
|
|
|
22
18
|
<p>I also update my name. I'm not sure how you should display my handle with your Fediverse application. Please write a FEP explaining it.</p>""",
|
|
23
|
-
|
|
24
|
-
)
|
|
19
|
+
meta_information=meta_information,
|
|
25
20
|
)
|
|
26
21
|
|
|
27
22
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from roboherd import RoboCow, PublishObject, ObjectFactory
|
|
2
|
+
|
|
3
|
+
from .meta import meta_information
|
|
4
|
+
|
|
5
|
+
bot = RoboCow.create(
|
|
6
|
+
handle="rooster",
|
|
7
|
+
name="The crowing rooster 🐓",
|
|
8
|
+
meta_information=meta_information,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@bot.cron("42 * * * *")
|
|
13
|
+
async def crow(publisher: PublishObject, object_factory: ObjectFactory):
|
|
14
|
+
await publisher(
|
|
15
|
+
object_factory.note(content="cock-a-doodle-doo").as_public().build() # type: ignore
|
|
16
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from roboherd import RoboCow, MarkdownPoster
|
|
2
|
+
|
|
3
|
+
# from roboherd import PublishObject, ObjectFactory
|
|
4
|
+
|
|
5
|
+
from .meta import meta_information
|
|
6
|
+
|
|
7
|
+
bot = RoboCow.create(
|
|
8
|
+
name="The scare crow 👩🌾",
|
|
9
|
+
description="""On startup I scare crows""",
|
|
10
|
+
handle="scarecrow",
|
|
11
|
+
meta_information=meta_information,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# @bot.startup
|
|
16
|
+
# async def startup(publish_object: PublishObject, object_factory: ObjectFactory):
|
|
17
|
+
# note = object_factory.note(content="Booo! 🐦").as_public().build() # type: ignore
|
|
18
|
+
# await publish_object(note)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@bot.startup
|
|
22
|
+
async def startup(poster: MarkdownPoster):
|
|
23
|
+
await poster("__Booo!__ 🐦")
|
|
@@ -15,11 +15,11 @@ wheels = [
|
|
|
15
15
|
|
|
16
16
|
[[package]]
|
|
17
17
|
name = "aiohappyeyeballs"
|
|
18
|
-
version = "2.4.
|
|
18
|
+
version = "2.4.8"
|
|
19
19
|
source = { registry = "https://pypi.org/simple" }
|
|
20
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
20
|
+
sdist = { url = "https://files.pythonhosted.org/packages/de/7c/79a15272e88d2563c9d63599fa59f05778975f35b255bf8f90c8b12b4ada/aiohappyeyeballs-2.4.8.tar.gz", hash = "sha256:19728772cb12263077982d2f55453babd8bec6a052a926cd5c0c42796da8bf62", size = 22337 }
|
|
21
21
|
wheels = [
|
|
22
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
22
|
+
{ url = "https://files.pythonhosted.org/packages/52/0e/b187e2bb3eeb2644515109657c4474d65a84e7123de249bf1e8467d04a65/aiohappyeyeballs-2.4.8-py3-none-any.whl", hash = "sha256:6cac4f5dd6e34a9644e69cf9021ef679e4394f54e58a183056d12009e42ea9e3", size = 15005 },
|
|
23
23
|
]
|
|
24
24
|
|
|
25
25
|
[[package]]
|
|
@@ -113,14 +113,14 @@ wheels = [
|
|
|
113
113
|
|
|
114
114
|
[[package]]
|
|
115
115
|
name = "almabtrieb"
|
|
116
|
-
version = "0.2.
|
|
116
|
+
version = "0.2.3"
|
|
117
117
|
source = { registry = "https://pypi.org/simple" }
|
|
118
118
|
dependencies = [
|
|
119
119
|
{ name = "pydantic" },
|
|
120
120
|
]
|
|
121
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
121
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9e/50/7cf0ae20a80a6ec813a1adf6a8fd090137581c4fd2b1a0f6adf7ab11d717/almabtrieb-0.2.3.tar.gz", hash = "sha256:777ad30cef41a465815688a44127dc1aa7d1d7a2ca33452e009531b46572c7ba", size = 100268 }
|
|
122
122
|
wheels = [
|
|
123
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
123
|
+
{ url = "https://files.pythonhosted.org/packages/4e/b0/9f4a12e9eede2050569816aaf4bfda1dff4e1b1a77a6b506f4bdc9cb1b32/almabtrieb-0.2.3-py3-none-any.whl", hash = "sha256:24e6557592aab2b4ca1016ff76686a8a86ff68497f324871f4884f93b5538b8a", size = 13962 },
|
|
124
124
|
]
|
|
125
125
|
|
|
126
126
|
[package.optional-dependencies]
|
|
@@ -190,6 +190,17 @@ wheels = [
|
|
|
190
190
|
{ url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 },
|
|
191
191
|
]
|
|
192
192
|
|
|
193
|
+
[[package]]
|
|
194
|
+
name = "backrefs"
|
|
195
|
+
version = "5.8"
|
|
196
|
+
source = { registry = "https://pypi.org/simple" }
|
|
197
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6c/46/caba1eb32fa5784428ab401a5487f73db4104590ecd939ed9daaf18b47e0/backrefs-5.8.tar.gz", hash = "sha256:2cab642a205ce966af3dd4b38ee36009b31fa9502a35fd61d59ccc116e40a6bd", size = 6773994 }
|
|
198
|
+
wheels = [
|
|
199
|
+
{ url = "https://files.pythonhosted.org/packages/a9/86/abd17f50ee21b2248075cb6924c6e7f9d23b4925ca64ec660e869c2633f1/backrefs-5.8-py311-none-any.whl", hash = "sha256:2e1c15e4af0e12e45c8701bd5da0902d326b2e200cafcd25e49d9f06d44bb61b", size = 392142 },
|
|
200
|
+
{ url = "https://files.pythonhosted.org/packages/b3/04/7b415bd75c8ab3268cc138c76fa648c19495fcc7d155508a0e62f3f82308/backrefs-5.8-py312-none-any.whl", hash = "sha256:bbef7169a33811080d67cdf1538c8289f76f0942ff971222a16034da88a73486", size = 398021 },
|
|
201
|
+
{ url = "https://files.pythonhosted.org/packages/04/b8/60dcfb90eb03a06e883a92abbc2ab95c71f0d8c9dd0af76ab1d5ce0b1402/backrefs-5.8-py313-none-any.whl", hash = "sha256:e3a63b073867dbefd0536425f43db618578528e3896fb77be7141328642a1585", size = 399915 },
|
|
202
|
+
]
|
|
203
|
+
|
|
193
204
|
[[package]]
|
|
194
205
|
name = "based58"
|
|
195
206
|
version = "0.1.1"
|
|
@@ -392,37 +403,41 @@ wheels = [
|
|
|
392
403
|
|
|
393
404
|
[[package]]
|
|
394
405
|
name = "cryptography"
|
|
395
|
-
version = "44.0.
|
|
406
|
+
version = "44.0.2"
|
|
396
407
|
source = { registry = "https://pypi.org/simple" }
|
|
397
408
|
dependencies = [
|
|
398
409
|
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
|
399
410
|
]
|
|
400
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
401
|
-
wheels = [
|
|
402
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
403
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
404
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
405
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
406
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
407
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
408
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
409
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
410
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
411
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
412
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
413
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
414
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
415
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
416
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
417
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
418
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
419
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
420
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
421
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
422
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
423
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
424
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
425
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
411
|
+
sdist = { url = "https://files.pythonhosted.org/packages/cd/25/4ce80c78963834b8a9fd1cc1266be5ed8d1840785c0f2e1b73b8d128d505/cryptography-44.0.2.tar.gz", hash = "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0", size = 710807 }
|
|
412
|
+
wheels = [
|
|
413
|
+
{ url = "https://files.pythonhosted.org/packages/92/ef/83e632cfa801b221570c5f58c0369db6fa6cef7d9ff859feab1aae1a8a0f/cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7", size = 6676361 },
|
|
414
|
+
{ url = "https://files.pythonhosted.org/packages/30/ec/7ea7c1e4c8fc8329506b46c6c4a52e2f20318425d48e0fe597977c71dbce/cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1", size = 3952350 },
|
|
415
|
+
{ url = "https://files.pythonhosted.org/packages/27/61/72e3afdb3c5ac510330feba4fc1faa0fe62e070592d6ad00c40bb69165e5/cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb", size = 4166572 },
|
|
416
|
+
{ url = "https://files.pythonhosted.org/packages/26/e4/ba680f0b35ed4a07d87f9e98f3ebccb05091f3bf6b5a478b943253b3bbd5/cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843", size = 3958124 },
|
|
417
|
+
{ url = "https://files.pythonhosted.org/packages/9c/e8/44ae3e68c8b6d1cbc59040288056df2ad7f7f03bbcaca6b503c737ab8e73/cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5", size = 3678122 },
|
|
418
|
+
{ url = "https://files.pythonhosted.org/packages/27/7b/664ea5e0d1eab511a10e480baf1c5d3e681c7d91718f60e149cec09edf01/cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c", size = 4191831 },
|
|
419
|
+
{ url = "https://files.pythonhosted.org/packages/2a/07/79554a9c40eb11345e1861f46f845fa71c9e25bf66d132e123d9feb8e7f9/cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a", size = 3960583 },
|
|
420
|
+
{ url = "https://files.pythonhosted.org/packages/bb/6d/858e356a49a4f0b591bd6789d821427de18432212e137290b6d8a817e9bf/cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308", size = 4191753 },
|
|
421
|
+
{ url = "https://files.pythonhosted.org/packages/b2/80/62df41ba4916067fa6b125aa8c14d7e9181773f0d5d0bd4dcef580d8b7c6/cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688", size = 4079550 },
|
|
422
|
+
{ url = "https://files.pythonhosted.org/packages/f3/cd/2558cc08f7b1bb40683f99ff4327f8dcfc7de3affc669e9065e14824511b/cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7", size = 4298367 },
|
|
423
|
+
{ url = "https://files.pythonhosted.org/packages/71/59/94ccc74788945bc3bd4cf355d19867e8057ff5fdbcac781b1ff95b700fb1/cryptography-44.0.2-cp37-abi3-win32.whl", hash = "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79", size = 2772843 },
|
|
424
|
+
{ url = "https://files.pythonhosted.org/packages/ca/2c/0d0bbaf61ba05acb32f0841853cfa33ebb7a9ab3d9ed8bb004bd39f2da6a/cryptography-44.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa", size = 3209057 },
|
|
425
|
+
{ url = "https://files.pythonhosted.org/packages/9e/be/7a26142e6d0f7683d8a382dd963745e65db895a79a280a30525ec92be890/cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3", size = 6677789 },
|
|
426
|
+
{ url = "https://files.pythonhosted.org/packages/06/88/638865be7198a84a7713950b1db7343391c6066a20e614f8fa286eb178ed/cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639", size = 3951919 },
|
|
427
|
+
{ url = "https://files.pythonhosted.org/packages/d7/fc/99fe639bcdf58561dfad1faa8a7369d1dc13f20acd78371bb97a01613585/cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd", size = 4167812 },
|
|
428
|
+
{ url = "https://files.pythonhosted.org/packages/53/7b/aafe60210ec93d5d7f552592a28192e51d3c6b6be449e7fd0a91399b5d07/cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181", size = 3958571 },
|
|
429
|
+
{ url = "https://files.pythonhosted.org/packages/16/32/051f7ce79ad5a6ef5e26a92b37f172ee2d6e1cce09931646eef8de1e9827/cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea", size = 3679832 },
|
|
430
|
+
{ url = "https://files.pythonhosted.org/packages/78/2b/999b2a1e1ba2206f2d3bca267d68f350beb2b048a41ea827e08ce7260098/cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699", size = 4193719 },
|
|
431
|
+
{ url = "https://files.pythonhosted.org/packages/72/97/430e56e39a1356e8e8f10f723211a0e256e11895ef1a135f30d7d40f2540/cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9", size = 3960852 },
|
|
432
|
+
{ url = "https://files.pythonhosted.org/packages/89/33/c1cf182c152e1d262cac56850939530c05ca6c8d149aa0dcee490b417e99/cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23", size = 4193906 },
|
|
433
|
+
{ url = "https://files.pythonhosted.org/packages/e1/99/87cf26d4f125380dc674233971069bc28d19b07f7755b29861570e513650/cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922", size = 4081572 },
|
|
434
|
+
{ url = "https://files.pythonhosted.org/packages/b3/9f/6a3e0391957cc0c5f84aef9fbdd763035f2b52e998a53f99345e3ac69312/cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4", size = 4298631 },
|
|
435
|
+
{ url = "https://files.pythonhosted.org/packages/e2/a5/5bc097adb4b6d22a24dea53c51f37e480aaec3465285c253098642696423/cryptography-44.0.2-cp39-abi3-win32.whl", hash = "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5", size = 2773792 },
|
|
436
|
+
{ url = "https://files.pythonhosted.org/packages/33/cf/1f7649b8b9a3543e042d3f348e398a061923ac05b507f3f4d95f11938aa9/cryptography-44.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6", size = 3210957 },
|
|
437
|
+
{ url = "https://files.pythonhosted.org/packages/d6/d7/f30e75a6aa7d0f65031886fa4a1485c2fbfe25a1896953920f6a9cfe2d3b/cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d", size = 3887513 },
|
|
438
|
+
{ url = "https://files.pythonhosted.org/packages/9c/b4/7a494ce1032323ca9db9a3661894c66e0d7142ad2079a4249303402d8c71/cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471", size = 4107432 },
|
|
439
|
+
{ url = "https://files.pythonhosted.org/packages/45/f8/6b3ec0bc56123b344a8d2b3264a325646d2dcdbdd9848b5e6f3d37db90b3/cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615", size = 3891421 },
|
|
440
|
+
{ url = "https://files.pythonhosted.org/packages/57/ff/f3b4b2d007c2a646b0f69440ab06224f9cf37a977a72cdb7b50632174e8a/cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390", size = 4107081 },
|
|
426
441
|
]
|
|
427
442
|
|
|
428
443
|
[[package]]
|
|
@@ -538,14 +553,14 @@ wheels = [
|
|
|
538
553
|
|
|
539
554
|
[[package]]
|
|
540
555
|
name = "griffe"
|
|
541
|
-
version = "1.
|
|
556
|
+
version = "1.6.0"
|
|
542
557
|
source = { registry = "https://pypi.org/simple" }
|
|
543
558
|
dependencies = [
|
|
544
559
|
{ name = "colorama" },
|
|
545
560
|
]
|
|
546
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
561
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a0/1a/d467b93f5e0ea4edf3c1caef44cfdd53a4a498cb3a6bb722df4dd0fdd66a/griffe-1.6.0.tar.gz", hash = "sha256:eb5758088b9c73ad61c7ac014f3cdfb4c57b5c2fcbfca69996584b702aefa354", size = 391819 }
|
|
547
562
|
wheels = [
|
|
548
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
563
|
+
{ url = "https://files.pythonhosted.org/packages/bf/02/5a22bc98d0aebb68c15ba70d2da1c84a5ef56048d79634e5f96cd2ba96e9/griffe-1.6.0-py3-none-any.whl", hash = "sha256:9f1dfe035d4715a244ed2050dfbceb05b1f470809ed4f6bb10ece5a7302f8dd1", size = 128470 },
|
|
549
564
|
]
|
|
550
565
|
|
|
551
566
|
[[package]]
|
|
@@ -804,10 +819,11 @@ wheels = [
|
|
|
804
819
|
|
|
805
820
|
[[package]]
|
|
806
821
|
name = "mkdocs-material"
|
|
807
|
-
version = "9.6.
|
|
822
|
+
version = "9.6.7"
|
|
808
823
|
source = { registry = "https://pypi.org/simple" }
|
|
809
824
|
dependencies = [
|
|
810
825
|
{ name = "babel" },
|
|
826
|
+
{ name = "backrefs" },
|
|
811
827
|
{ name = "colorama" },
|
|
812
828
|
{ name = "jinja2" },
|
|
813
829
|
{ name = "markdown" },
|
|
@@ -816,12 +832,11 @@ dependencies = [
|
|
|
816
832
|
{ name = "paginate" },
|
|
817
833
|
{ name = "pygments" },
|
|
818
834
|
{ name = "pymdown-extensions" },
|
|
819
|
-
{ name = "regex" },
|
|
820
835
|
{ name = "requests" },
|
|
821
836
|
]
|
|
822
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
837
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9b/d7/93e19c9587e5f4ed25647890555d58cf484a4d412be7037dc17b9c9179d9/mkdocs_material-9.6.7.tar.gz", hash = "sha256:3e2c1fceb9410056c2d91f334a00cdea3215c28750e00c691c1e46b2a33309b4", size = 3947458 }
|
|
823
838
|
wheels = [
|
|
824
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
839
|
+
{ url = "https://files.pythonhosted.org/packages/aa/d3/12f22de41bdd9e576ddc459b38c651d68edfb840b32acaa1f46ae36845e3/mkdocs_material-9.6.7-py3-none-any.whl", hash = "sha256:8a159e45e80fcaadd9fbeef62cbf928569b93df954d4dc5ba76d46820caf7b47", size = 8696755 },
|
|
825
840
|
]
|
|
826
841
|
|
|
827
842
|
[[package]]
|
|
@@ -1222,20 +1237,20 @@ wheels = [
|
|
|
1222
1237
|
|
|
1223
1238
|
[[package]]
|
|
1224
1239
|
name = "pyright"
|
|
1225
|
-
version = "1.1.
|
|
1240
|
+
version = "1.1.396"
|
|
1226
1241
|
source = { registry = "https://pypi.org/simple" }
|
|
1227
1242
|
dependencies = [
|
|
1228
1243
|
{ name = "nodeenv" },
|
|
1229
1244
|
{ name = "typing-extensions" },
|
|
1230
1245
|
]
|
|
1231
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1246
|
+
sdist = { url = "https://files.pythonhosted.org/packages/bd/73/f20cb1dea1bdc1774e7f860fb69dc0718c7d8dea854a345faec845eb086a/pyright-1.1.396.tar.gz", hash = "sha256:142901f5908f5a0895be3d3befcc18bedcdb8cc1798deecaec86ef7233a29b03", size = 3814400 }
|
|
1232
1247
|
wheels = [
|
|
1233
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1248
|
+
{ url = "https://files.pythonhosted.org/packages/80/be/ecb7cfb42d242b7ee764b52e6ff4782beeec00e3b943a3ec832b281f9da6/pyright-1.1.396-py3-none-any.whl", hash = "sha256:c635e473095b9138c471abccca22b9fedbe63858e0b40d4fc4b67da041891844", size = 5689355 },
|
|
1234
1249
|
]
|
|
1235
1250
|
|
|
1236
1251
|
[[package]]
|
|
1237
1252
|
name = "pytest"
|
|
1238
|
-
version = "8.3.
|
|
1253
|
+
version = "8.3.5"
|
|
1239
1254
|
source = { registry = "https://pypi.org/simple" }
|
|
1240
1255
|
dependencies = [
|
|
1241
1256
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
@@ -1243,9 +1258,9 @@ dependencies = [
|
|
|
1243
1258
|
{ name = "packaging" },
|
|
1244
1259
|
{ name = "pluggy" },
|
|
1245
1260
|
]
|
|
1246
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1261
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891 }
|
|
1247
1262
|
wheels = [
|
|
1248
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1263
|
+
{ url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634 },
|
|
1249
1264
|
]
|
|
1250
1265
|
|
|
1251
1266
|
[[package]]
|
|
@@ -1331,59 +1346,6 @@ wheels = [
|
|
|
1331
1346
|
{ url = "https://files.pythonhosted.org/packages/5a/66/bbb1dd374f5c870f59c5bb1db0e18cbe7fa739415a24cbd95b2d1f5ae0c4/pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069", size = 3911 },
|
|
1332
1347
|
]
|
|
1333
1348
|
|
|
1334
|
-
[[package]]
|
|
1335
|
-
name = "regex"
|
|
1336
|
-
version = "2024.11.6"
|
|
1337
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1338
|
-
sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 }
|
|
1339
|
-
wheels = [
|
|
1340
|
-
{ url = "https://files.pythonhosted.org/packages/58/58/7e4d9493a66c88a7da6d205768119f51af0f684fe7be7bac8328e217a52c/regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", size = 482669 },
|
|
1341
|
-
{ url = "https://files.pythonhosted.org/packages/34/4c/8f8e631fcdc2ff978609eaeef1d6994bf2f028b59d9ac67640ed051f1218/regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", size = 287684 },
|
|
1342
|
-
{ url = "https://files.pythonhosted.org/packages/c5/1b/f0e4d13e6adf866ce9b069e191f303a30ab1277e037037a365c3aad5cc9c/regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", size = 284589 },
|
|
1343
|
-
{ url = "https://files.pythonhosted.org/packages/25/4d/ab21047f446693887f25510887e6820b93f791992994f6498b0318904d4a/regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114", size = 792121 },
|
|
1344
|
-
{ url = "https://files.pythonhosted.org/packages/45/ee/c867e15cd894985cb32b731d89576c41a4642a57850c162490ea34b78c3b/regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3", size = 831275 },
|
|
1345
|
-
{ url = "https://files.pythonhosted.org/packages/b3/12/b0f480726cf1c60f6536fa5e1c95275a77624f3ac8fdccf79e6727499e28/regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f", size = 818257 },
|
|
1346
|
-
{ url = "https://files.pythonhosted.org/packages/bf/ce/0d0e61429f603bac433910d99ef1a02ce45a8967ffbe3cbee48599e62d88/regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0", size = 792727 },
|
|
1347
|
-
{ url = "https://files.pythonhosted.org/packages/e4/c1/243c83c53d4a419c1556f43777ccb552bccdf79d08fda3980e4e77dd9137/regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55", size = 780667 },
|
|
1348
|
-
{ url = "https://files.pythonhosted.org/packages/c5/f4/75eb0dd4ce4b37f04928987f1d22547ddaf6c4bae697623c1b05da67a8aa/regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89", size = 776963 },
|
|
1349
|
-
{ url = "https://files.pythonhosted.org/packages/16/5d/95c568574e630e141a69ff8a254c2f188b4398e813c40d49228c9bbd9875/regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d", size = 784700 },
|
|
1350
|
-
{ url = "https://files.pythonhosted.org/packages/8e/b5/f8495c7917f15cc6fee1e7f395e324ec3e00ab3c665a7dc9d27562fd5290/regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34", size = 848592 },
|
|
1351
|
-
{ url = "https://files.pythonhosted.org/packages/1c/80/6dd7118e8cb212c3c60b191b932dc57db93fb2e36fb9e0e92f72a5909af9/regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d", size = 852929 },
|
|
1352
|
-
{ url = "https://files.pythonhosted.org/packages/11/9b/5a05d2040297d2d254baf95eeeb6df83554e5e1df03bc1a6687fc4ba1f66/regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45", size = 781213 },
|
|
1353
|
-
{ url = "https://files.pythonhosted.org/packages/26/b7/b14e2440156ab39e0177506c08c18accaf2b8932e39fb092074de733d868/regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9", size = 261734 },
|
|
1354
|
-
{ url = "https://files.pythonhosted.org/packages/80/32/763a6cc01d21fb3819227a1cc3f60fd251c13c37c27a73b8ff4315433a8e/regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60", size = 274052 },
|
|
1355
|
-
{ url = "https://files.pythonhosted.org/packages/ba/30/9a87ce8336b172cc232a0db89a3af97929d06c11ceaa19d97d84fa90a8f8/regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a", size = 483781 },
|
|
1356
|
-
{ url = "https://files.pythonhosted.org/packages/01/e8/00008ad4ff4be8b1844786ba6636035f7ef926db5686e4c0f98093612add/regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9", size = 288455 },
|
|
1357
|
-
{ url = "https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2", size = 284759 },
|
|
1358
|
-
{ url = "https://files.pythonhosted.org/packages/94/2b/701a4b0585cb05472a4da28ee28fdfe155f3638f5e1ec92306d924e5faf0/regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4", size = 794976 },
|
|
1359
|
-
{ url = "https://files.pythonhosted.org/packages/4b/bf/fa87e563bf5fee75db8915f7352e1887b1249126a1be4813837f5dbec965/regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577", size = 833077 },
|
|
1360
|
-
{ url = "https://files.pythonhosted.org/packages/a1/56/7295e6bad94b047f4d0834e4779491b81216583c00c288252ef625c01d23/regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3", size = 823160 },
|
|
1361
|
-
{ url = "https://files.pythonhosted.org/packages/fb/13/e3b075031a738c9598c51cfbc4c7879e26729c53aa9cca59211c44235314/regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e", size = 796896 },
|
|
1362
|
-
{ url = "https://files.pythonhosted.org/packages/24/56/0b3f1b66d592be6efec23a795b37732682520b47c53da5a32c33ed7d84e3/regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe", size = 783997 },
|
|
1363
|
-
{ url = "https://files.pythonhosted.org/packages/f9/a1/eb378dada8b91c0e4c5f08ffb56f25fcae47bf52ad18f9b2f33b83e6d498/regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e", size = 781725 },
|
|
1364
|
-
{ url = "https://files.pythonhosted.org/packages/83/f2/033e7dec0cfd6dda93390089864732a3409246ffe8b042e9554afa9bff4e/regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29", size = 789481 },
|
|
1365
|
-
{ url = "https://files.pythonhosted.org/packages/83/23/15d4552ea28990a74e7696780c438aadd73a20318c47e527b47a4a5a596d/regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39", size = 852896 },
|
|
1366
|
-
{ url = "https://files.pythonhosted.org/packages/e3/39/ed4416bc90deedbfdada2568b2cb0bc1fdb98efe11f5378d9892b2a88f8f/regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51", size = 860138 },
|
|
1367
|
-
{ url = "https://files.pythonhosted.org/packages/93/2d/dd56bb76bd8e95bbce684326302f287455b56242a4f9c61f1bc76e28360e/regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad", size = 787692 },
|
|
1368
|
-
{ url = "https://files.pythonhosted.org/packages/0b/55/31877a249ab7a5156758246b9c59539abbeba22461b7d8adc9e8475ff73e/regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54", size = 262135 },
|
|
1369
|
-
{ url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", size = 273567 },
|
|
1370
|
-
{ url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 },
|
|
1371
|
-
{ url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 },
|
|
1372
|
-
{ url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 },
|
|
1373
|
-
{ url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 },
|
|
1374
|
-
{ url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 },
|
|
1375
|
-
{ url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 },
|
|
1376
|
-
{ url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 },
|
|
1377
|
-
{ url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 },
|
|
1378
|
-
{ url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 },
|
|
1379
|
-
{ url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 },
|
|
1380
|
-
{ url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 },
|
|
1381
|
-
{ url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 },
|
|
1382
|
-
{ url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 },
|
|
1383
|
-
{ url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 },
|
|
1384
|
-
{ url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 },
|
|
1385
|
-
]
|
|
1386
|
-
|
|
1387
1349
|
[[package]]
|
|
1388
1350
|
name = "requests"
|
|
1389
1351
|
version = "2.32.3"
|
|
@@ -1401,7 +1363,7 @@ wheels = [
|
|
|
1401
1363
|
|
|
1402
1364
|
[[package]]
|
|
1403
1365
|
name = "roboherd"
|
|
1404
|
-
version = "0.1.
|
|
1366
|
+
version = "0.1.6"
|
|
1405
1367
|
source = { editable = "." }
|
|
1406
1368
|
dependencies = [
|
|
1407
1369
|
{ name = "aiohttp" },
|
|
@@ -1418,6 +1380,7 @@ dependencies = [
|
|
|
1418
1380
|
[package.optional-dependencies]
|
|
1419
1381
|
bovine = [
|
|
1420
1382
|
{ name = "bovine" },
|
|
1383
|
+
{ name = "markdown" },
|
|
1421
1384
|
]
|
|
1422
1385
|
|
|
1423
1386
|
[package.dev-dependencies]
|
|
@@ -1443,6 +1406,7 @@ requires-dist = [
|
|
|
1443
1406
|
{ name = "cron-descriptor", specifier = ">=1.4.5" },
|
|
1444
1407
|
{ name = "dynaconf", specifier = ">=3.2.6" },
|
|
1445
1408
|
{ name = "fast-depends", specifier = ">=2.4.12" },
|
|
1409
|
+
{ name = "markdown", marker = "extra == 'bovine'", specifier = ">=3.7" },
|
|
1446
1410
|
{ name = "tomli-w", specifier = ">=1.1.0" },
|
|
1447
1411
|
{ name = "watchfiles", specifier = ">=1.0.4" },
|
|
1448
1412
|
]
|
|
@@ -1462,27 +1426,27 @@ dev = [
|
|
|
1462
1426
|
|
|
1463
1427
|
[[package]]
|
|
1464
1428
|
name = "ruff"
|
|
1465
|
-
version = "0.9.
|
|
1466
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1467
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1468
|
-
wheels = [
|
|
1469
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1470
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1471
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1472
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1473
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1474
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1475
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1476
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1477
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1478
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1479
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1480
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1481
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1482
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1483
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1484
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1485
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1429
|
+
version = "0.9.9"
|
|
1430
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1431
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6f/c3/418441a8170e8d53d05c0b9dad69760dbc7b8a12c10dbe6db1e1205d2377/ruff-0.9.9.tar.gz", hash = "sha256:0062ed13f22173e85f8f7056f9a24016e692efeea8704d1a5e8011b8aa850933", size = 3717448 }
|
|
1432
|
+
wheels = [
|
|
1433
|
+
{ url = "https://files.pythonhosted.org/packages/bc/c3/2c4afa9ba467555d074b146d9aed0633a56ccdb900839fb008295d037b89/ruff-0.9.9-py3-none-linux_armv6l.whl", hash = "sha256:628abb5ea10345e53dff55b167595a159d3e174d6720bf19761f5e467e68d367", size = 10027252 },
|
|
1434
|
+
{ url = "https://files.pythonhosted.org/packages/33/d1/439e58487cf9eac26378332e25e7d5ade4b800ce1eec7dc2cfc9b0d7ca96/ruff-0.9.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b6cd1428e834b35d7493354723543b28cc11dc14d1ce19b685f6e68e07c05ec7", size = 10840721 },
|
|
1435
|
+
{ url = "https://files.pythonhosted.org/packages/50/44/fead822c38281ba0122f1b76b460488a175a9bd48b130650a6fb6dbcbcf9/ruff-0.9.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ee162652869120ad260670706f3cd36cd3f32b0c651f02b6da142652c54941d", size = 10161439 },
|
|
1436
|
+
{ url = "https://files.pythonhosted.org/packages/11/ae/d404a2ab8e61ddf6342e09cc6b7f7846cce6b243e45c2007dbe0ca928a5d/ruff-0.9.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3aa0f6b75082c9be1ec5a1db78c6d4b02e2375c3068438241dc19c7c306cc61a", size = 10336264 },
|
|
1437
|
+
{ url = "https://files.pythonhosted.org/packages/6a/4e/7c268aa7d84cd709fb6f046b8972313142cffb40dfff1d2515c5e6288d54/ruff-0.9.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:584cc66e89fb5f80f84b05133dd677a17cdd86901d6479712c96597a3f28e7fe", size = 9908774 },
|
|
1438
|
+
{ url = "https://files.pythonhosted.org/packages/cc/26/c618a878367ef1b76270fd027ca93692657d3f6122b84ba48911ef5f2edc/ruff-0.9.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf3369325761a35aba75cd5c55ba1b5eb17d772f12ab168fbfac54be85cf18c", size = 11428127 },
|
|
1439
|
+
{ url = "https://files.pythonhosted.org/packages/d7/9a/c5588a93d9bfed29f565baf193fe802fa676a0c837938137ea6cf0576d8c/ruff-0.9.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3403a53a32a90ce929aa2f758542aca9234befa133e29f4933dcef28a24317be", size = 12133187 },
|
|
1440
|
+
{ url = "https://files.pythonhosted.org/packages/3e/ff/e7980a7704a60905ed7e156a8d73f604c846d9bd87deda9cabfa6cba073a/ruff-0.9.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18454e7fa4e4d72cffe28a37cf6a73cb2594f81ec9f4eca31a0aaa9ccdfb1590", size = 11602937 },
|
|
1441
|
+
{ url = "https://files.pythonhosted.org/packages/24/78/3690444ad9e3cab5c11abe56554c35f005b51d1d118b429765249095269f/ruff-0.9.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fadfe2c88724c9617339f62319ed40dcdadadf2888d5afb88bf3adee7b35bfb", size = 13771698 },
|
|
1442
|
+
{ url = "https://files.pythonhosted.org/packages/6e/bf/e477c2faf86abe3988e0b5fd22a7f3520e820b2ee335131aca2e16120038/ruff-0.9.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6df104d08c442a1aabcfd254279b8cc1e2cbf41a605aa3e26610ba1ec4acf0b0", size = 11249026 },
|
|
1443
|
+
{ url = "https://files.pythonhosted.org/packages/f7/82/cdaffd59e5a8cb5b14c408c73d7a555a577cf6645faaf83e52fe99521715/ruff-0.9.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d7c62939daf5b2a15af48abbd23bea1efdd38c312d6e7c4cedf5a24e03207e17", size = 10220432 },
|
|
1444
|
+
{ url = "https://files.pythonhosted.org/packages/fe/a4/2507d0026225efa5d4412b6e294dfe54725a78652a5c7e29e6bd0fc492f3/ruff-0.9.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9494ba82a37a4b81b6a798076e4a3251c13243fc37967e998efe4cce58c8a8d1", size = 9874602 },
|
|
1445
|
+
{ url = "https://files.pythonhosted.org/packages/d5/be/f3aab1813846b476c4bcffe052d232244979c3cd99d751c17afb530ca8e4/ruff-0.9.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4efd7a96ed6d36ef011ae798bf794c5501a514be369296c672dab7921087fa57", size = 10851212 },
|
|
1446
|
+
{ url = "https://files.pythonhosted.org/packages/8b/45/8e5fd559bea0d2f57c4e12bf197a2fade2fac465aa518284f157dfbca92b/ruff-0.9.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ab90a7944c5a1296f3ecb08d1cbf8c2da34c7e68114b1271a431a3ad30cb660e", size = 11327490 },
|
|
1447
|
+
{ url = "https://files.pythonhosted.org/packages/42/55/e6c90f13880aeef327746052907e7e930681f26a164fe130ddac28b08269/ruff-0.9.9-py3-none-win32.whl", hash = "sha256:6b4c376d929c25ecd6d87e182a230fa4377b8e5125a4ff52d506ee8c087153c1", size = 10227912 },
|
|
1448
|
+
{ url = "https://files.pythonhosted.org/packages/35/b2/da925693cb82a1208aa34966c0f36cb222baca94e729dd22a587bc22d0f3/ruff-0.9.9-py3-none-win_amd64.whl", hash = "sha256:837982ea24091d4c1700ddb2f63b7070e5baec508e43b01de013dc7eff974ff1", size = 11355632 },
|
|
1449
|
+
{ url = "https://files.pythonhosted.org/packages/31/d8/de873d1c1b020d668d8ec9855d390764cb90cf8f6486c0983da52be8b7b7/ruff-0.9.9-py3-none-win_arm64.whl", hash = "sha256:3ac78f127517209fe6d96ab00f3ba97cafe38718b23b1db3e96d8b2d39e37ddf", size = 10435860 },
|
|
1486
1450
|
]
|
|
1487
1451
|
|
|
1488
1452
|
[[package]]
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from fast_depends import Depends
|
|
2
|
-
from typing import Annotated
|
|
3
|
-
|
|
4
|
-
from roboherd.cow import RoboCow
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def get_profile(cow: RoboCow) -> dict:
|
|
8
|
-
if cow.internals.profile is None:
|
|
9
|
-
raise ValueError("Cow has no profile")
|
|
10
|
-
return cow.internals.profile
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Profile = Annotated[dict, Depends(get_profile)]
|
|
14
|
-
"""The profile of the cow"""
|
|
File without changes
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from roboherd.cow import RoboCow
|
|
2
|
-
from roboherd.cow.types import Information
|
|
3
|
-
|
|
4
|
-
from .meta import meta_information
|
|
5
|
-
|
|
6
|
-
bot = RoboCow(
|
|
7
|
-
information=Information(
|
|
8
|
-
name="/dev/null",
|
|
9
|
-
description="""I don't do anything.""",
|
|
10
|
-
handle="devnull",
|
|
11
|
-
meta_information=meta_information,
|
|
12
|
-
)
|
|
13
|
-
)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from roboherd.cow import RoboCow
|
|
2
|
-
from roboherd.cow.types import Information
|
|
3
|
-
|
|
4
|
-
from roboherd.annotations import PublishObject
|
|
5
|
-
from roboherd.annotations.bovine import ObjectFactory
|
|
6
|
-
|
|
7
|
-
from .meta import meta_information
|
|
8
|
-
|
|
9
|
-
bot = RoboCow(
|
|
10
|
-
information=Information(
|
|
11
|
-
handle="rooster",
|
|
12
|
-
name="The crowing rooster 🐓",
|
|
13
|
-
meta_information=meta_information,
|
|
14
|
-
)
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@bot.cron("42 * * * *")
|
|
19
|
-
async def crow(publisher: PublishObject, object_factory: ObjectFactory):
|
|
20
|
-
await publisher(
|
|
21
|
-
object_factory.note(content="cock-a-doodle-doo").as_public().build() # type: ignore
|
|
22
|
-
)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from roboherd.cow import RoboCow
|
|
2
|
-
from roboherd.cow.types import Information
|
|
3
|
-
|
|
4
|
-
from roboherd.annotations import PublishObject
|
|
5
|
-
from roboherd.annotations.bovine import ObjectFactory
|
|
6
|
-
|
|
7
|
-
from .meta import meta_information
|
|
8
|
-
|
|
9
|
-
bot = RoboCow(
|
|
10
|
-
information=Information(
|
|
11
|
-
name="The scare crow 👩🌾",
|
|
12
|
-
description="""On startup I scare crows""",
|
|
13
|
-
handle="scarecrow",
|
|
14
|
-
meta_information=meta_information,
|
|
15
|
-
)
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
@bot.startup
|
|
20
|
-
async def startup(publish_object: PublishObject, object_factory: ObjectFactory):
|
|
21
|
-
note = object_factory.note(content="Booo! 🐦").as_public().build() # type: ignore
|
|
22
|
-
await publish_object(note)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|