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.

Files changed (68) hide show
  1. {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/test.yml +1 -0
  2. {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/website.yml +1 -0
  3. {roboherd-0.1.5 → roboherd-0.1.7}/CHANGES.md +10 -0
  4. {roboherd-0.1.5 → roboherd-0.1.7}/PKG-INFO +4 -1
  5. {roboherd-0.1.5 → roboherd-0.1.7}/docs/index.md +43 -8
  6. roboherd-0.1.7/docs/main.md +3 -0
  7. {roboherd-0.1.5 → roboherd-0.1.7}/mkdocs.yml +2 -0
  8. {roboherd-0.1.5 → roboherd-0.1.7}/pyproject.toml +6 -2
  9. {roboherd-0.1.5 → roboherd-0.1.7}/resources/docker/Dockerfile +2 -2
  10. roboherd-0.1.7/roboherd/__init__.py +25 -0
  11. roboherd-0.1.7/roboherd/annotations/__init__.py +43 -0
  12. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/annotations/bovine.py +28 -2
  13. roboherd-0.1.5/roboherd/annotations/__init__.py → roboherd-0.1.7/roboherd/annotations/common.py +7 -32
  14. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/__init__.py +8 -0
  15. roboherd-0.1.7/roboherd/examples/dev_null.py +10 -0
  16. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/examples/json_echo.py +6 -11
  17. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/examples/moocow.py +6 -10
  18. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/examples/number.py +5 -10
  19. roboherd-0.1.7/roboherd/examples/rooster.py +16 -0
  20. roboherd-0.1.7/roboherd/examples/scarecrow.py +23 -0
  21. {roboherd-0.1.5 → roboherd-0.1.7}/uv.lock +85 -121
  22. roboherd-0.1.5/roboherd/annotations/common.py +0 -14
  23. roboherd-0.1.5/roboherd/examples/__init__.py +0 -0
  24. roboherd-0.1.5/roboherd/examples/dev_null.py +0 -13
  25. roboherd-0.1.5/roboherd/examples/rooster.py +0 -22
  26. roboherd-0.1.5/roboherd/examples/scarecrow.py +0 -22
  27. {roboherd-0.1.5 → roboherd-0.1.7}/.gitignore +0 -0
  28. {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/create_release.yml +0 -0
  29. {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/publish_docker.yml +0 -0
  30. {roboherd-0.1.5 → roboherd-0.1.7}/.woodpecker/publish_pypi.yml +0 -0
  31. {roboherd-0.1.5 → roboherd-0.1.7}/README.md +0 -0
  32. {roboherd-0.1.5 → roboherd-0.1.7}/docs/annotations.md +0 -0
  33. {roboherd-0.1.5 → roboherd-0.1.7}/docs/assets/bull-horns.png +0 -0
  34. {roboherd-0.1.5 → roboherd-0.1.7}/docs/assets/mastodon.png +0 -0
  35. {roboherd-0.1.5 → roboherd-0.1.7}/docs/cli.md +0 -0
  36. {roboherd-0.1.5 → roboherd-0.1.7}/docs/cow.md +0 -0
  37. {roboherd-0.1.5 → roboherd-0.1.7}/docs/herd.md +0 -0
  38. {roboherd-0.1.5 → roboherd-0.1.7}/docs/util.md +0 -0
  39. {roboherd-0.1.5 → roboherd-0.1.7}/resources/docker/build.sh +0 -0
  40. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/__main__.py +0 -0
  41. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/const.py +0 -0
  42. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/handlers.py +0 -0
  43. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/profile.py +0 -0
  44. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/test_handlers.py +0 -0
  45. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/test_init.py +0 -0
  46. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/test_profile.py +0 -0
  47. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/test_util.py +0 -0
  48. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/types.py +0 -0
  49. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/cow/util.py +0 -0
  50. {roboherd-0.1.5/roboherd → roboherd-0.1.7/roboherd/examples}/__init__.py +0 -0
  51. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/examples/meta.py +0 -0
  52. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/__init__.py +0 -0
  53. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/builder.py +0 -0
  54. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/__init__.py +0 -0
  55. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/config.py +0 -0
  56. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/load.py +0 -0
  57. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/test_config.py +0 -0
  58. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/test_load.py +0 -0
  59. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/manager/test_manager.py +0 -0
  60. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/processor.py +0 -0
  61. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/scheduler.py +0 -0
  62. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/test_herd.py +0 -0
  63. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/test_scheduler.py +0 -0
  64. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/herd/types.py +0 -0
  65. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/register.py +0 -0
  66. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/test_validators.py +0 -0
  67. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/util.py +0 -0
  68. {roboherd-0.1.5 → roboherd-0.1.7}/roboherd/validators.py +0 -0
@@ -31,6 +31,7 @@ steps:
31
31
  build_docs:
32
32
  image: ghcr.io/astral-sh/uv:python3.11-alpine
33
33
  commands:
34
+ - cp CHANGES.md docs/CHANGES.md
34
35
  - uv run mkdocs build
35
36
  when:
36
37
  - matrix: { extras: "--all-extras" }
@@ -7,6 +7,7 @@ steps:
7
7
  image: ghcr.io/astral-sh/uv:python3.11-alpine
8
8
  commands:
9
9
  - uv sync --all-extras
10
+ - cp CHANGES.md docs/CHANGES.md
10
11
  - uv run mkdocs build
11
12
  deploy:
12
13
  image: codeberg.org/xfix/plugin-codeberg-pages-deploy:1
@@ -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.5
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 that are injected
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
- roboherd run
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 roboherd run
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 either by
264
+ You are then able to run the roboherd command
236
265
 
237
266
  ```bash
238
- roboherd run
267
+ python -mroboherd run
239
268
  ```
240
269
 
241
- or
270
+ ### The roboherd command
271
+
272
+ You can also run roboherd by running
242
273
 
243
274
  ```bash
244
- python -mroboherd run
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.
@@ -0,0 +1,3 @@
1
+ :::roboherd
2
+ options:
3
+ show_submodules: false
@@ -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.5"
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 = [
@@ -1,7 +1,7 @@
1
1
  FROM helgekr/bovine:0.5.18-python3.13
2
2
 
3
- ARG tag
4
- RUN pip install roboherd==${tag}
3
+ ARG tag=0.1.6
4
+ RUN pip install roboherd[bovine]==${tag}
5
5
 
6
6
  RUN mkdir /app
7
7
  WORKDIR /app
@@ -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"""
@@ -4,43 +4,18 @@ from typing import Annotated, Callable, Awaitable
4
4
  from almabtrieb import Almabtrieb
5
5
 
6
6
 
7
- def get_raw(data: dict) -> dict:
8
- return data.get("data", {}).get("raw")
7
+ from roboherd.cow import RoboCow
9
8
 
10
9
 
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
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
- RawData = Annotated[dict, Depends(get_raw)]
19
- """The raw data as received by cattle_grid"""
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
 
@@ -0,0 +1,10 @@
1
+ from roboherd import RoboCow
2
+
3
+ from .meta import meta_information
4
+
5
+ bot = RoboCow.create(
6
+ name="/dev/null",
7
+ description="""I don't do anything.""",
8
+ handle="devnull",
9
+ meta_information=meta_information,
10
+ )
@@ -1,24 +1,19 @@
1
1
  import json
2
2
 
3
- from roboherd.cow import RoboCow
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
- information=Information(
12
- handle="jsonecho",
13
- name="JSON Echo {}",
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
- meta_information=meta_information,
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.cow import RoboCow
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
- information=Information(
12
- handle="moocow",
13
- name="The mooing cow 🐮",
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
- meta_information=meta_information,
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.cow import RoboCow
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
- information=Information(
19
- handle="even",
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
- meta_information=meta_information,
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.6"
18
+ version = "2.4.8"
19
19
  source = { registry = "https://pypi.org/simple" }
20
- sdist = { url = "https://files.pythonhosted.org/packages/08/07/508f9ebba367fc3370162e53a3cfd12f5652ad79f0e0bfdf9f9847c6f159/aiohappyeyeballs-2.4.6.tar.gz", hash = "sha256:9b05052f9042985d32ecbe4b59a77ae19c006a78f1344d7fdad69d28ded3d0b0", size = 21726 }
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/44/4c/03fb05f56551828ec67ceb3665e5dc51638042d204983a03b0a1541475b6/aiohappyeyeballs-2.4.6-py3-none-any.whl", hash = "sha256:147ec992cf873d74f5062644332c539fcd42956dc69453fe5204195e560517e1", size = 14543 },
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.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/7e/62/3aed078d249680e66d13f69542c236888d0ec61cceaa147c45aa4ff7434a/almabtrieb-0.2.2.tar.gz", hash = "sha256:7c1b22401f2f5a26fcafb4fc002255f80bd008b6da0762ac089b799792d3e84c", size = 100231 }
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/ac/90/fa2349619a8409bcf72d3a10fd15d2b7d94733b2bf4bbf403b824f077a62/almabtrieb-0.2.2-py3-none-any.whl", hash = "sha256:754537055c14586ea4f9261d11e7dd41fdfcfffe2d5b7f5223df40fcc1c12883", size = 13973 },
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.1"
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/c7/67/545c79fe50f7af51dbad56d16b23fe33f63ee6a5d956b3cb68ea110cbe64/cryptography-44.0.1.tar.gz", hash = "sha256:f51f5705ab27898afda1aaa430f34ad90dc117421057782022edf0600bec5f14", size = 710819 }
401
- wheels = [
402
- { url = "https://files.pythonhosted.org/packages/72/27/5e3524053b4c8889da65cf7814a9d0d8514a05194a25e1e34f46852ee6eb/cryptography-44.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf688f615c29bfe9dfc44312ca470989279f0e94bb9f631f85e3459af8efc009", size = 6642022 },
403
- { url = "https://files.pythonhosted.org/packages/34/b9/4d1fa8d73ae6ec350012f89c3abfbff19fc95fe5420cf972e12a8d182986/cryptography-44.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7c7e2d71d908dc0f8d2027e1604102140d84b155e658c20e8ad1304317691f", size = 3943865 },
404
- { url = "https://files.pythonhosted.org/packages/6e/57/371a9f3f3a4500807b5fcd29fec77f418ba27ffc629d88597d0d1049696e/cryptography-44.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887143b9ff6bad2b7570da75a7fe8bbf5f65276365ac259a5d2d5147a73775f2", size = 4162562 },
405
- { url = "https://files.pythonhosted.org/packages/c5/1d/5b77815e7d9cf1e3166988647f336f87d5634a5ccecec2ffbe08ef8dd481/cryptography-44.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:322eb03ecc62784536bc173f1483e76747aafeb69c8728df48537eb431cd1911", size = 3951923 },
406
- { url = "https://files.pythonhosted.org/packages/28/01/604508cd34a4024467cd4105887cf27da128cba3edd435b54e2395064bfb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:21377472ca4ada2906bc313168c9dc7b1d7ca417b63c1c3011d0c74b7de9ae69", size = 3685194 },
407
- { url = "https://files.pythonhosted.org/packages/c6/3d/d3c55d4f1d24580a236a6753902ef6d8aafd04da942a1ee9efb9dc8fd0cb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:df978682c1504fc93b3209de21aeabf2375cb1571d4e61907b3e7a2540e83026", size = 4187790 },
408
- { url = "https://files.pythonhosted.org/packages/ea/a6/44d63950c8588bfa8594fd234d3d46e93c3841b8e84a066649c566afb972/cryptography-44.0.1-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:eb3889330f2a4a148abead555399ec9a32b13b7c8ba969b72d8e500eb7ef84cd", size = 3951343 },
409
- { url = "https://files.pythonhosted.org/packages/c1/17/f5282661b57301204cbf188254c1a0267dbd8b18f76337f0a7ce1038888c/cryptography-44.0.1-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8e6a85a93d0642bd774460a86513c5d9d80b5c002ca9693e63f6e540f1815ed0", size = 4187127 },
410
- { url = "https://files.pythonhosted.org/packages/f3/68/abbae29ed4f9d96596687f3ceea8e233f65c9645fbbec68adb7c756bb85a/cryptography-44.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6f76fdd6fd048576a04c5210d53aa04ca34d2ed63336d4abd306d0cbe298fddf", size = 4070666 },
411
- { url = "https://files.pythonhosted.org/packages/0f/10/cf91691064a9e0a88ae27e31779200b1505d3aee877dbe1e4e0d73b4f155/cryptography-44.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6c8acf6f3d1f47acb2248ec3ea261171a671f3d9428e34ad0357148d492c7864", size = 4288811 },
412
- { url = "https://files.pythonhosted.org/packages/38/78/74ea9eb547d13c34e984e07ec8a473eb55b19c1451fe7fc8077c6a4b0548/cryptography-44.0.1-cp37-abi3-win32.whl", hash = "sha256:24979e9f2040c953a94bf3c6782e67795a4c260734e5264dceea65c8f4bae64a", size = 2771882 },
413
- { url = "https://files.pythonhosted.org/packages/cf/6c/3907271ee485679e15c9f5e93eac6aa318f859b0aed8d369afd636fafa87/cryptography-44.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:fd0ee90072861e276b0ff08bd627abec29e32a53b2be44e41dbcdf87cbee2b00", size = 3206989 },
414
- { url = "https://files.pythonhosted.org/packages/9f/f1/676e69c56a9be9fd1bffa9bc3492366901f6e1f8f4079428b05f1414e65c/cryptography-44.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:a2d8a7045e1ab9b9f803f0d9531ead85f90c5f2859e653b61497228b18452008", size = 6643714 },
415
- { url = "https://files.pythonhosted.org/packages/ba/9f/1775600eb69e72d8f9931a104120f2667107a0ee478f6ad4fe4001559345/cryptography-44.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8272f257cf1cbd3f2e120f14c68bff2b6bdfcc157fafdee84a1b795efd72862", size = 3943269 },
416
- { url = "https://files.pythonhosted.org/packages/25/ba/e00d5ad6b58183829615be7f11f55a7b6baa5a06910faabdc9961527ba44/cryptography-44.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8d181e90a777b63f3f0caa836844a1182f1f265687fac2115fcf245f5fbec3", size = 4166461 },
417
- { url = "https://files.pythonhosted.org/packages/b3/45/690a02c748d719a95ab08b6e4decb9d81e0ec1bac510358f61624c86e8a3/cryptography-44.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:436df4f203482f41aad60ed1813811ac4ab102765ecae7a2bbb1dbb66dcff5a7", size = 3950314 },
418
- { url = "https://files.pythonhosted.org/packages/e6/50/bf8d090911347f9b75adc20f6f6569ed6ca9b9bff552e6e390f53c2a1233/cryptography-44.0.1-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4f422e8c6a28cf8b7f883eb790695d6d45b0c385a2583073f3cec434cc705e1a", size = 3686675 },
419
- { url = "https://files.pythonhosted.org/packages/e1/e7/cfb18011821cc5f9b21efb3f94f3241e3a658d267a3bf3a0f45543858ed8/cryptography-44.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:72198e2b5925155497a5a3e8c216c7fb3e64c16ccee11f0e7da272fa93b35c4c", size = 4190429 },
420
- { url = "https://files.pythonhosted.org/packages/07/ef/77c74d94a8bfc1a8a47b3cafe54af3db537f081742ee7a8a9bd982b62774/cryptography-44.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a46a89ad3e6176223b632056f321bc7de36b9f9b93b2cc1cccf935a3849dc62", size = 3950039 },
421
- { url = "https://files.pythonhosted.org/packages/6d/b9/8be0ff57c4592382b77406269b1e15650c9f1a167f9e34941b8515b97159/cryptography-44.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:53f23339864b617a3dfc2b0ac8d5c432625c80014c25caac9082314e9de56f41", size = 4189713 },
422
- { url = "https://files.pythonhosted.org/packages/78/e1/4b6ac5f4100545513b0847a4d276fe3c7ce0eacfa73e3b5ebd31776816ee/cryptography-44.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:888fcc3fce0c888785a4876ca55f9f43787f4c5c1cc1e2e0da71ad481ff82c5b", size = 4071193 },
423
- { url = "https://files.pythonhosted.org/packages/3d/cb/afff48ceaed15531eab70445abe500f07f8f96af2bb35d98af6bfa89ebd4/cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00918d859aa4e57db8299607086f793fa7813ae2ff5a4637e318a25ef82730f7", size = 4289566 },
424
- { url = "https://files.pythonhosted.org/packages/30/6f/4eca9e2e0f13ae459acd1ca7d9f0257ab86e68f44304847610afcb813dc9/cryptography-44.0.1-cp39-abi3-win32.whl", hash = "sha256:9b336599e2cb77b1008cb2ac264b290803ec5e8e89d618a5e978ff5eb6f715d9", size = 2772371 },
425
- { url = "https://files.pythonhosted.org/packages/d2/05/5533d30f53f10239616a357f080892026db2d550a40c393d0a8a7af834a9/cryptography-44.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:e403f7f766ded778ecdb790da786b418a9f2394f36e8cc8b796cc056ab05f44f", size = 3207303 },
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.5.7"
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/59/80/13b6456bfbf8bc854875e58d3a3bad297ee19ebdd693ce62a10fab007e7a/griffe-1.5.7.tar.gz", hash = "sha256:465238c86deaf1137761f700fb343edd8ffc846d72f6de43c3c345ccdfbebe92", size = 391503 }
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/76/67/b43330ed76f96be098c165338d47ccb952964ed77ba1d075247fbdf05c04/griffe-1.5.7-py3-none-any.whl", hash = "sha256:4af8ec834b64de954d447c7b6672426bb145e71605c74a4e22d510cc79fe7d8b", size = 128294 },
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.5"
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/38/4d/0a9f6f604f01eaa43df3b3b30b5218548efd7341913b302815585f48abb2/mkdocs_material-9.6.5.tar.gz", hash = "sha256:b714679a8c91b0ffe2188e11ed58c44d2523e9c2ae26a29cc652fa7478faa21f", size = 3946479 }
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/3d/05/7d440b23454c0fc8cdba21f73ce23369eb16e7f7ee475fac3a4ad15ad5e0/mkdocs_material-9.6.5-py3-none-any.whl", hash = "sha256:aad3e6fb860c20870f75fb2a69ef901f1be727891e41adb60b753efcae19453b", size = 8695060 },
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.395"
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/fb/47/a2e1dfd70f9f0db34f70d5b108c82be57bf24185af69c95acff57f9239fa/pyright-1.1.395.tar.gz", hash = "sha256:53703169068c160bfb41e1b44ba3e2512492869c26cfad927e1268cb3fbb1b1c", size = 3813566 }
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/5f/a1/531897f8caa6c6cc99862cd1c908ddd8a366a51d968e83ab4523ded98b30/pyright-1.1.395-py3-none-any.whl", hash = "sha256:f9bc726870e740c6c77c94657734d90563a3e9765bb523b39f5860198ed75eef", size = 5688787 },
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.4"
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/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 }
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/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 },
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.5"
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.7"
1466
- source = { registry = "https://pypi.org/simple" }
1467
- sdist = { url = "https://files.pythonhosted.org/packages/39/8b/a86c300359861b186f18359adf4437ac8e4c52e42daa9eedc731ef9d5b53/ruff-0.9.7.tar.gz", hash = "sha256:643757633417907510157b206e490c3aa11cab0c087c912f60e07fbafa87a4c6", size = 3669813 }
1468
- wheels = [
1469
- { url = "https://files.pythonhosted.org/packages/b1/f3/3a1d22973291226df4b4e2ff70196b926b6f910c488479adb0eeb42a0d7f/ruff-0.9.7-py3-none-linux_armv6l.whl", hash = "sha256:99d50def47305fe6f233eb8dabfd60047578ca87c9dcb235c9723ab1175180f4", size = 11774588 },
1470
- { url = "https://files.pythonhosted.org/packages/8e/c9/b881f4157b9b884f2994fd08ee92ae3663fb24e34b0372ac3af999aa7fc6/ruff-0.9.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d59105ae9c44152c3d40a9c40d6331a7acd1cdf5ef404fbe31178a77b174ea66", size = 11746848 },
1471
- { url = "https://files.pythonhosted.org/packages/14/89/2f546c133f73886ed50a3d449e6bf4af27d92d2f960a43a93d89353f0945/ruff-0.9.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f313b5800483770bd540cddac7c90fc46f895f427b7820f18fe1822697f1fec9", size = 11177525 },
1472
- { url = "https://files.pythonhosted.org/packages/d7/93/6b98f2c12bf28ab9def59c50c9c49508519c5b5cfecca6de871cf01237f6/ruff-0.9.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:042ae32b41343888f59c0a4148f103208bf6b21c90118d51dc93a68366f4e903", size = 11996580 },
1473
- { url = "https://files.pythonhosted.org/packages/8e/3f/b3fcaf4f6d875e679ac2b71a72f6691a8128ea3cb7be07cbb249f477c061/ruff-0.9.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:87862589373b33cc484b10831004e5e5ec47dc10d2b41ba770e837d4f429d721", size = 11525674 },
1474
- { url = "https://files.pythonhosted.org/packages/f0/48/33fbf18defb74d624535d5d22adcb09a64c9bbabfa755bc666189a6b2210/ruff-0.9.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a17e1e01bee0926d351a1ee9bc15c445beae888f90069a6192a07a84af544b6b", size = 12739151 },
1475
- { url = "https://files.pythonhosted.org/packages/63/b5/7e161080c5e19fa69495cbab7c00975ef8a90f3679caa6164921d7f52f4a/ruff-0.9.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7c1f880ac5b2cbebd58b8ebde57069a374865c73f3bf41f05fe7a179c1c8ef22", size = 13416128 },
1476
- { url = "https://files.pythonhosted.org/packages/4e/c8/b5e7d61fb1c1b26f271ac301ff6d9de5e4d9a9a63f67d732fa8f200f0c88/ruff-0.9.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e63fc20143c291cab2841dbb8260e96bafbe1ba13fd3d60d28be2c71e312da49", size = 12870858 },
1477
- { url = "https://files.pythonhosted.org/packages/da/cb/2a1a8e4e291a54d28259f8fc6a674cd5b8833e93852c7ef5de436d6ed729/ruff-0.9.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91ff963baed3e9a6a4eba2a02f4ca8eaa6eba1cc0521aec0987da8d62f53cbef", size = 14786046 },
1478
- { url = "https://files.pythonhosted.org/packages/ca/6c/c8f8a313be1943f333f376d79724260da5701426c0905762e3ddb389e3f4/ruff-0.9.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88362e3227c82f63eaebf0b2eff5b88990280fb1ecf7105523883ba8c3aaf6fb", size = 12550834 },
1479
- { url = "https://files.pythonhosted.org/packages/9d/ad/f70cf5e8e7c52a25e166bdc84c082163c9c6f82a073f654c321b4dff9660/ruff-0.9.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0372c5a90349f00212270421fe91874b866fd3626eb3b397ede06cd385f6f7e0", size = 11961307 },
1480
- { url = "https://files.pythonhosted.org/packages/52/d5/4f303ea94a5f4f454daf4d02671b1fbfe2a318b5fcd009f957466f936c50/ruff-0.9.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d76b8ab60e99e6424cd9d3d923274a1324aefce04f8ea537136b8398bbae0a62", size = 11612039 },
1481
- { url = "https://files.pythonhosted.org/packages/eb/c8/bd12a23a75603c704ce86723be0648ba3d4ecc2af07eecd2e9fa112f7e19/ruff-0.9.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0c439bdfc8983e1336577f00e09a4e7a78944fe01e4ea7fe616d00c3ec69a3d0", size = 12168177 },
1482
- { url = "https://files.pythonhosted.org/packages/cc/57/d648d4f73400fef047d62d464d1a14591f2e6b3d4a15e93e23a53c20705d/ruff-0.9.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:115d1f15e8fdd445a7b4dc9a30abae22de3f6bcabeb503964904471691ef7606", size = 12610122 },
1483
- { url = "https://files.pythonhosted.org/packages/49/79/acbc1edd03ac0e2a04ae2593555dbc9990b34090a9729a0c4c0cf20fb595/ruff-0.9.7-py3-none-win32.whl", hash = "sha256:e9ece95b7de5923cbf38893f066ed2872be2f2f477ba94f826c8defdd6ec6b7d", size = 9988751 },
1484
- { url = "https://files.pythonhosted.org/packages/6d/95/67153a838c6b6ba7a2401241fd8a00cd8c627a8e4a0491b8d853dedeffe0/ruff-0.9.7-py3-none-win_amd64.whl", hash = "sha256:3770fe52b9d691a15f0b87ada29c45324b2ace8f01200fb0c14845e499eb0c2c", size = 11002987 },
1485
- { url = "https://files.pythonhosted.org/packages/63/6a/aca01554949f3a401991dc32fe22837baeaccb8a0d868256cbb26a029778/ruff-0.9.7-py3-none-win_arm64.whl", hash = "sha256:b075a700b2533feb7a01130ff656a4ec0d5f340bb540ad98759b8401c32c2037", size = 10177763 },
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