Habiticalib 0.4.0rc4__tar.gz → 0.4.2__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.
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.github/workflows/documentation.yml +1 -1
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.vscode/settings.json +2 -1
- habiticalib-0.4.2/CONTRIBUTING.md +132 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/PKG-INFO +48 -18
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/README.md +47 -17
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/pyproject.toml +17 -17
- habiticalib-0.4.2/renovate.json +22 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/src/habiticalib/const.py +1 -1
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/src/habiticalib/typedefs.py +2 -1
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_serialize.ambr +1 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_user.ambr +2 -2
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user.json +2 -1
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.cruft.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.editorconfig +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.github/FUNDING.yml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.github/dependabot.yml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.github/labels.yml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.github/release-drafter.yml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.github/workflows/build.yml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.github/workflows/draft.yml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.github/workflows/labeler.yml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.gitignore +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/.pre-commit-config.yaml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/LICENSE +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/docs/index.md +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/docs/reference/habiticalib.md +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/mkdocs.yml +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/src/habiticalib/__init__.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/src/habiticalib/exceptions.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/src/habiticalib/ha.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/src/habiticalib/helpers.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/src/habiticalib/lib.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/src/habiticalib/py.typed +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__init__.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar.png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[animated_background].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[default].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[kickstarter_backer_gear].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[kickstarter_pet_mount].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[seafoam].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[shinySeed].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[sleeping].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[snowball].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[special_0].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[special_1].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[spookySparkles].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[weapon_critical].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_from_styles[with_chair].png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar_to_file.png +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar.ambr +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_group.ambr +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_login.ambr +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_tasks.ambr +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/conftest.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/empty_data.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/login.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/party.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/task.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/task_order.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/tasks.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_anonymized.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_animated_background.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_kickstarter.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_kickstarter_pets.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_seafoam.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_shinySeed.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_sleeping.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_snowball.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_special_0.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_special_1.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_spookySparkles.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_weapon_critical.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_with_chair.json +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/test_avatar.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/test_group.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/test_login.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/test_serialize.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/test_tasks.py +0 -0
- {habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/test_user.py +0 -0
@@ -0,0 +1,132 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
Contributions are welcome, and they are greatly appreciated! Every
|
4
|
+
little bit helps, and credit will always be given.
|
5
|
+
|
6
|
+
You can contribute in many ways:
|
7
|
+
|
8
|
+
## Types of Contributions
|
9
|
+
|
10
|
+
### Report Bugs
|
11
|
+
|
12
|
+
Report bugs at <https://github.com/tr4nt0r/habiticalib/issues>.
|
13
|
+
|
14
|
+
If you are reporting a bug, please include:
|
15
|
+
|
16
|
+
- Your operating system name and version.
|
17
|
+
- Any details about your local setup that might be helpful in
|
18
|
+
troubleshooting.
|
19
|
+
- Detailed steps to reproduce the bug.
|
20
|
+
|
21
|
+
### Fix Bugs
|
22
|
+
|
23
|
+
Look through the GitHub issues for bugs. Anything tagged with "bug"
|
24
|
+
and "help wanted" is open to whoever wants to implement it.
|
25
|
+
|
26
|
+
### Implement Features
|
27
|
+
|
28
|
+
Look through the GitHub issues for features. Anything tagged with
|
29
|
+
"enhancement" and "help wanted" is open to whoever wants to
|
30
|
+
implement it.
|
31
|
+
|
32
|
+
### Write Documentation
|
33
|
+
|
34
|
+
**habiticalib** could always use more documentation, whether as part of the
|
35
|
+
official **habiticalib** docs, in docstrings, or even on the web in blog
|
36
|
+
posts, articles, and such.
|
37
|
+
|
38
|
+
### Submit Feedback
|
39
|
+
|
40
|
+
The best way to send feedback is to file an issue at
|
41
|
+
<https://github.com/tr4nt0r/habiticalib/issues>.
|
42
|
+
|
43
|
+
If you are proposing a feature:
|
44
|
+
|
45
|
+
- Explain in detail how it would work.
|
46
|
+
- Keep the scope as narrow as possible, to make it easier to
|
47
|
+
implement.
|
48
|
+
- Remember that this is a volunteer-driven project, and that
|
49
|
+
contributions are welcome :)
|
50
|
+
|
51
|
+
## Development
|
52
|
+
|
53
|
+
Ready to contribute? Here's how to set up `habiticalib` for
|
54
|
+
local development.
|
55
|
+
|
56
|
+
### Setup Git
|
57
|
+
|
58
|
+
[Fork](https://github.com/tr4nt0r/habiticalib/fork) the `habiticalib` repo on GitHub.
|
59
|
+
|
60
|
+
Clone your fork locally:
|
61
|
+
|
62
|
+
```bash
|
63
|
+
git clone git@github.com:yourusername/habiticalib.git
|
64
|
+
```
|
65
|
+
|
66
|
+
Create a branch for local development:
|
67
|
+
|
68
|
+
``` bash
|
69
|
+
git checkout -b name-of-your-bugfix-or-feature
|
70
|
+
```
|
71
|
+
|
72
|
+
Now you can make your changes locally.
|
73
|
+
|
74
|
+
### Setup environment
|
75
|
+
|
76
|
+
We use [Hatch](https://hatch.pypa.io/latest/install/) to manage the development environment and production build. Ensure it's installed on your system.
|
77
|
+
|
78
|
+
### Run unit tests
|
79
|
+
|
80
|
+
You can run all the tests with:
|
81
|
+
|
82
|
+
```bash
|
83
|
+
hatch run test
|
84
|
+
```
|
85
|
+
|
86
|
+
### Format the code
|
87
|
+
|
88
|
+
Execute the following command to apply linting and check typing:
|
89
|
+
|
90
|
+
```bash
|
91
|
+
hatch run lint
|
92
|
+
```
|
93
|
+
|
94
|
+
### Publish a new version
|
95
|
+
|
96
|
+
You can bump the version, create a commit and associated tag with one command:
|
97
|
+
|
98
|
+
```bash
|
99
|
+
hatch version patch
|
100
|
+
```
|
101
|
+
|
102
|
+
```bash
|
103
|
+
hatch version minor
|
104
|
+
```
|
105
|
+
|
106
|
+
```bash
|
107
|
+
hatch version major
|
108
|
+
```
|
109
|
+
|
110
|
+
Your default Git text editor will open so you can add information about the release.
|
111
|
+
|
112
|
+
When you push the tag on GitHub, the workflow will automatically publish it on PyPi and a GitHub release will be created as draft.
|
113
|
+
|
114
|
+
## Pull Request Guidelines
|
115
|
+
|
116
|
+
Before you submit a pull request, check that it meets these guidelines:
|
117
|
+
|
118
|
+
1. The pull request should include tests.
|
119
|
+
2. If the pull request adds functionality, the docs should be updated.
|
120
|
+
Put your new functionality into a function with a docstring, and add
|
121
|
+
the feature to the list in README.md.
|
122
|
+
3. The pull request should work for Python 3.11 and 3.12. Check
|
123
|
+
<https://github.com/tr4nt0r/habiticalib/actions/workflows/build.yaml>
|
124
|
+
and make sure that the tests pass for all supported Python versions.
|
125
|
+
|
126
|
+
## Serve the documentation
|
127
|
+
|
128
|
+
You can serve the Mkdocs documentation with:
|
129
|
+
|
130
|
+
```bash
|
131
|
+
hatch run docs-serve
|
132
|
+
```
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: Habiticalib
|
3
|
-
Version: 0.4.
|
3
|
+
Version: 0.4.2
|
4
4
|
Summary: Asynchronous Python client library for the Habitica API
|
5
5
|
Project-URL: Documentation, https://tr4nt0r.github.io/habiticalib/
|
6
6
|
Project-URL: Source, https://github.com/tr4nt0r/habiticalib
|
@@ -19,34 +19,47 @@ Description-Content-Type: text/markdown
|
|
19
19
|
|
20
20
|
# Habiticalib
|
21
21
|
|
22
|
-
|
23
|
-
<em>Modern asynchronous Python client library for the Habitica API</em>
|
24
|
-
</p>
|
22
|
+
Modern asynchronous Python client library for the Habitica API
|
25
23
|
|
26
24
|
[](https://github.com/tr4nt0r/habiticalib/actions)
|
27
25
|
[](https://codecov.io/gh/tr4nt0r/habiticalib)
|
28
26
|
[](https://badge.fury.io/py/habiticalib)
|
27
|
+

|
28
|
+
[](https://www.buymeacoffee.com/tr4nt0r)
|
29
|
+
[](https://github.com/sponsors/tr4nt0r)
|
30
|
+
|
31
|
+
---
|
29
32
|
|
30
33
|
**Habiticalib** is a Python library for interacting with the [Habitica API](https://habitica.com). It provides an organized, typed interface to work with Habitica’s features, including tasks, user data, and avatars. The goal of this library is to simplify integration with Habitica.
|
31
34
|
|
32
35
|
## Key features
|
33
36
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
**Fetch user data**: Retrieve and manage user data such as stats, preferences, and items. User data is structured with dataclasses to make it easy to work with.
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
37
|
+
* **Asynchronous**: The library is fully asynchronous, allowing non-blocking API calls.
|
38
|
+
* **Fully typed with Dataclasses**: The library is fully typed using Python `dataclasses`. It handles serialization with `mashumaro` and `orjson` for efficient conversion between Habitica API JSON data and Python objects.
|
39
|
+
* **Dynamic avatar image generation**: Habiticalib can fetch all necessary assets (like equipped items, pets, and mounts) and combine them into a single avatar image. This image can be saved to disk or returned as a byte buffer for further processing.
|
40
|
+
* **Fetch user data**: Retrieve and manage user data such as stats, preferences, and items. User data is structured with dataclasses to make it easy to work with.
|
41
|
+
* **Task management**: Support for creating, updating, and retrieving Habitica tasks (to-dos, dailies, habits, rewards) is provided.
|
42
|
+
* **Task status updates**: The library allows updates for task statuses, habit scoring, and daily completion.
|
43
|
+
* **Tags**: Habiticalib supports the creation, updating and deletion of tags.
|
44
|
+
* **Stat allocation, class cystem and sleep**: The library offers methods for stat point allocation and switching between Habitica classes. It also provides the ability to disable the class system and pausing damage(resting in the inn)
|
45
|
+
|
46
|
+
---
|
47
|
+
|
48
|
+
## 📖 Documentation
|
49
|
+
|
50
|
+
* **Full Documentation**: [https://tr4nt0r.github.io/habiticalib](https://tr4nt0r.github.io/habiticalib)
|
51
|
+
* **Source Code**: [https://github.com/tr4nt0r/habiticalib](https://github.com/tr4nt0r/habiticalib)
|
42
52
|
|
43
|
-
|
53
|
+
---
|
54
|
+
|
55
|
+
## 📦 Installation
|
44
56
|
|
45
57
|
```bash
|
46
58
|
pip install habiticalib
|
47
59
|
```
|
48
60
|
|
49
|
-
## Getting started
|
61
|
+
## 🚀 Getting started
|
62
|
+
|
50
63
|
Here’s an example to demonstrate basic usage:
|
51
64
|
|
52
65
|
```python
|
@@ -89,10 +102,27 @@ async def main():
|
|
89
102
|
asyncio.run(main())
|
90
103
|
```
|
91
104
|
|
92
|
-
|
105
|
+
---
|
106
|
+
|
107
|
+
## 🛠️ Contributing
|
108
|
+
|
109
|
+
Contributions are welcome! To contribute:
|
110
|
+
|
111
|
+
1. Fork the repository.
|
112
|
+
2. Create a new branch.
|
113
|
+
3. Make your changes and commit them.
|
114
|
+
4. Submit a pull request.
|
115
|
+
|
116
|
+
Make sure to follow the [contributing guidelines](CONTRIBUTING.md).
|
117
|
+
|
118
|
+
---
|
119
|
+
|
120
|
+
## 📜 License
|
121
|
+
|
122
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
93
123
|
|
94
|
-
|
124
|
+
---
|
95
125
|
|
96
|
-
##
|
126
|
+
## ❤️ Support
|
97
127
|
|
98
|
-
|
128
|
+
If you find this project useful, consider [buying me a coffee ☕](https://www.buymeacoffee.com/tr4nt0r) or [sponsoring me on GitHub](https://github.com/sponsors/tr4nt0r)!
|
@@ -1,33 +1,46 @@
|
|
1
1
|
# Habiticalib
|
2
2
|
|
3
|
-
|
4
|
-
<em>Modern asynchronous Python client library for the Habitica API</em>
|
5
|
-
</p>
|
3
|
+
Modern asynchronous Python client library for the Habitica API
|
6
4
|
|
7
5
|
[](https://github.com/tr4nt0r/habiticalib/actions)
|
8
6
|
[](https://codecov.io/gh/tr4nt0r/habiticalib)
|
9
7
|
[](https://badge.fury.io/py/habiticalib)
|
8
|
+

|
9
|
+
[](https://www.buymeacoffee.com/tr4nt0r)
|
10
|
+
[](https://github.com/sponsors/tr4nt0r)
|
11
|
+
|
12
|
+
---
|
10
13
|
|
11
14
|
**Habiticalib** is a Python library for interacting with the [Habitica API](https://habitica.com). It provides an organized, typed interface to work with Habitica’s features, including tasks, user data, and avatars. The goal of this library is to simplify integration with Habitica.
|
12
15
|
|
13
16
|
## Key features
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
**Fetch user data**: Retrieve and manage user data such as stats, preferences, and items. User data is structured with dataclasses to make it easy to work with.
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
* **Asynchronous**: The library is fully asynchronous, allowing non-blocking API calls.
|
19
|
+
* **Fully typed with Dataclasses**: The library is fully typed using Python `dataclasses`. It handles serialization with `mashumaro` and `orjson` for efficient conversion between Habitica API JSON data and Python objects.
|
20
|
+
* **Dynamic avatar image generation**: Habiticalib can fetch all necessary assets (like equipped items, pets, and mounts) and combine them into a single avatar image. This image can be saved to disk or returned as a byte buffer for further processing.
|
21
|
+
* **Fetch user data**: Retrieve and manage user data such as stats, preferences, and items. User data is structured with dataclasses to make it easy to work with.
|
22
|
+
* **Task management**: Support for creating, updating, and retrieving Habitica tasks (to-dos, dailies, habits, rewards) is provided.
|
23
|
+
* **Task status updates**: The library allows updates for task statuses, habit scoring, and daily completion.
|
24
|
+
* **Tags**: Habiticalib supports the creation, updating and deletion of tags.
|
25
|
+
* **Stat allocation, class cystem and sleep**: The library offers methods for stat point allocation and switching between Habitica classes. It also provides the ability to disable the class system and pausing damage(resting in the inn)
|
26
|
+
|
27
|
+
---
|
28
|
+
|
29
|
+
## 📖 Documentation
|
30
|
+
|
31
|
+
* **Full Documentation**: [https://tr4nt0r.github.io/habiticalib](https://tr4nt0r.github.io/habiticalib)
|
32
|
+
* **Source Code**: [https://github.com/tr4nt0r/habiticalib](https://github.com/tr4nt0r/habiticalib)
|
23
33
|
|
24
|
-
|
34
|
+
---
|
35
|
+
|
36
|
+
## 📦 Installation
|
25
37
|
|
26
38
|
```bash
|
27
39
|
pip install habiticalib
|
28
40
|
```
|
29
41
|
|
30
|
-
## Getting started
|
42
|
+
## 🚀 Getting started
|
43
|
+
|
31
44
|
Here’s an example to demonstrate basic usage:
|
32
45
|
|
33
46
|
```python
|
@@ -70,10 +83,27 @@ async def main():
|
|
70
83
|
asyncio.run(main())
|
71
84
|
```
|
72
85
|
|
73
|
-
|
86
|
+
---
|
87
|
+
|
88
|
+
## 🛠️ Contributing
|
89
|
+
|
90
|
+
Contributions are welcome! To contribute:
|
91
|
+
|
92
|
+
1. Fork the repository.
|
93
|
+
2. Create a new branch.
|
94
|
+
3. Make your changes and commit them.
|
95
|
+
4. Submit a pull request.
|
96
|
+
|
97
|
+
Make sure to follow the [contributing guidelines](CONTRIBUTING.md).
|
98
|
+
|
99
|
+
---
|
100
|
+
|
101
|
+
## 📜 License
|
102
|
+
|
103
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
74
104
|
|
75
|
-
|
105
|
+
---
|
76
106
|
|
77
|
-
##
|
107
|
+
## ❤️ Support
|
78
108
|
|
79
|
-
|
109
|
+
If you find this project useful, consider [buying me a coffee ☕](https://www.buymeacoffee.com/tr4nt0r) or [sponsoring me on GitHub](https://github.com/sponsors/tr4nt0r)!
|
@@ -4,7 +4,7 @@ line-length = 88
|
|
4
4
|
|
5
5
|
[tool.ruff.lint]
|
6
6
|
select = ["ALL"]
|
7
|
-
ignore = ["TRY003", "D202", "D213", "D417", "ANN003", "ANN401", "E501", "COM812", "ISC001"]
|
7
|
+
ignore = ["TRY003", "D202", "D213", "D417", "ANN003", "ANN401", "E501", "COM812", "ISC001", "PLW1641"]
|
8
8
|
|
9
9
|
[tool.ruff.lint.isort]
|
10
10
|
force-sort-within-sections = true
|
@@ -75,29 +75,29 @@ path = "src/habiticalib/const.py"
|
|
75
75
|
[tool.hatch.envs.default]
|
76
76
|
python = "3.12"
|
77
77
|
dependencies = [
|
78
|
-
"aiohttp==3.
|
79
|
-
"mashumaro==3.
|
80
|
-
"orjson==3.
|
81
|
-
"Pillow==11.
|
82
|
-
"mypy==1.
|
83
|
-
"ruff==0.
|
84
|
-
"pytest==8.
|
85
|
-
"pytest-cov==6.
|
86
|
-
"mkdocs-material==9.6.
|
87
|
-
"mkdocstrings[python]==0.
|
88
|
-
"pytest-asyncio==
|
78
|
+
"aiohttp==3.12.15",
|
79
|
+
"mashumaro==3.16",
|
80
|
+
"orjson==3.11.1",
|
81
|
+
"Pillow==11.3.0",
|
82
|
+
"mypy==1.17.1",
|
83
|
+
"ruff==0.12.8",
|
84
|
+
"pytest==8.4.1",
|
85
|
+
"pytest-cov==6.2.1",
|
86
|
+
"mkdocs-material==9.6.16",
|
87
|
+
"mkdocstrings[python]==0.30.0",
|
88
|
+
"pytest-asyncio==1.1.0",
|
89
89
|
"aioresponses==0.7.8",
|
90
|
-
"pre-commit==4.
|
91
|
-
"syrupy==4.
|
90
|
+
"pre-commit==4.3.0",
|
91
|
+
"syrupy==4.9.1"
|
92
92
|
]
|
93
93
|
|
94
94
|
[tool.hatch.envs.hatch-test]
|
95
95
|
parallel = true
|
96
96
|
extra-dependencies = [
|
97
97
|
"aioresponses==0.7.8",
|
98
|
-
"pytest-asyncio==
|
99
|
-
"syrupy==4.
|
100
|
-
"pytest-cov==6.
|
98
|
+
"pytest-asyncio==1.1.0",
|
99
|
+
"syrupy==4.9.1",
|
100
|
+
"pytest-cov==6.2.1",
|
101
101
|
]
|
102
102
|
extra-args = ["--cov-report=xml", "-vv"]
|
103
103
|
type = "virtual"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
3
|
+
"extends": [
|
4
|
+
"config:recommended"
|
5
|
+
],
|
6
|
+
"rebaseWhen": "behind-base-branch",
|
7
|
+
"labels": [
|
8
|
+
":recycle: dependencies"
|
9
|
+
],
|
10
|
+
"commitMessageTopic": "{{depName}}",
|
11
|
+
"commitMessageAction": "Bump",
|
12
|
+
"packageRules": [
|
13
|
+
{
|
14
|
+
"matchManagers": [
|
15
|
+
"pep621"
|
16
|
+
],
|
17
|
+
"addLabels": [
|
18
|
+
":snake: python"
|
19
|
+
]
|
20
|
+
}
|
21
|
+
]
|
22
|
+
}
|
@@ -456,7 +456,7 @@ class FlagsUser(BaseModel):
|
|
456
456
|
class EntryHistory(BaseModel):
|
457
457
|
"""History entry data."""
|
458
458
|
|
459
|
-
date: datetime = field(
|
459
|
+
date: datetime | None = field(
|
460
460
|
metadata=field_options(
|
461
461
|
deserialize=serialize_datetime,
|
462
462
|
)
|
@@ -573,6 +573,7 @@ class PartyUser(BaseModel):
|
|
573
573
|
order: str | None = None
|
574
574
|
orderAscending: str | None = None
|
575
575
|
_id: UUID | None = None
|
576
|
+
id: UUID | None = field(default=None, metadata=field_options(alias="_id"))
|
576
577
|
|
577
578
|
|
578
579
|
@dataclass(kw_only=True)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# serializer version: 1
|
2
2
|
# name: test_get_user
|
3
|
-
HabiticaUserResponse(data=UserData(items=ItemsUser(gear=GearItems(equipped=EquippedGear(weapon='weapon_special_fall2024Warrior', armor='armor_special_fall2024Warrior', head='head_special_fall2024Warrior', shield='shield_special_fall2024Warrior', back='back_mystery_201402', headAccessory='headAccessory_special_pinkHeadband', eyewear='eyewear_special_pinkHalfMoon', body='body_mystery_202003'), costume=EquippedGear(weapon=None, armor='armor_base_0', head='head_base_0', shield='shield_base_0', back=None, headAccessory=None, eyewear=None, body=None), owned={'headAccessory_special_blackHeadband': True, 'headAccessory_special_blueHeadband': True, 'headAccessory_special_greenHeadband': True, 'headAccessory_special_pinkHeadband': True, 'headAccessory_special_redHeadband': True, 'headAccessory_special_whiteHeadband': True, 'headAccessory_special_yellowHeadband': True, 'eyewear_special_blackTopFrame': True, 'eyewear_special_blueTopFrame': True, 'eyewear_special_greenTopFrame': True, 'eyewear_special_pinkTopFrame': True, 'eyewear_special_redTopFrame': True, 'eyewear_special_whiteTopFrame': True, 'eyewear_special_yellowTopFrame': True, 'eyewear_special_blackHalfMoon': True, 'eyewear_special_blueHalfMoon': True, 'eyewear_special_greenHalfMoon': True, 'eyewear_special_pinkHalfMoon': True, 'eyewear_special_redHalfMoon': True, 'eyewear_special_whiteHalfMoon': True, 'eyewear_special_yellowHalfMoon': True}), currentMount='Velociraptor-Base', currentPet='Rat-Shade', special=SpecialItems(birthdayReceived=[], birthday=0, thankyouReceived=[], thankyou=0, greetingReceived=[], greeting=0, nyeReceived=[], nye=0, valentineReceived=[], valentine=0, seafoam=0, shinySeed=0, spookySparkles=0, snowball=0, congrats=0, congratsReceived=[], getwell=0, getwellReceived=[], goodluck=0, goodluckReceived=[]), lastDrop=LastDropItems(count=0, date=datetime.datetime(2024, 10, 19, 18, 43, 39, 784000, tzinfo=datetime.timezone.utc)), quests={'dustbunnies': 1}, mounts={}, food={}, hatchingPotions={}, eggs={}, pets={}), preferences=PreferencesUser(hair=HairPreferences(color='red', base=3, bangs=1, beard=0, mustache=0, flower=1), size='slim', skin='915533', shirt='blue', chair='none', costume=False, sleep=False, background='violet', emailNotifications=EmailNotificationsPreferences(unsubscribeFromAll=False, newPM=True, kickedGroup=True, wonChallenge=True, giftedGems=True, giftedSubscription=True, invitedParty=True, invitedGuild=True, questStarted=True, invitedQuest=True, importantAnnouncements=True, weeklyRecaps=True, onboarding=True, majorUpdates=True, subscriptionReminders=True, contentRelease=True), pushNotifications=PushNotificationsPreferences(unsubscribeFromAll=False, newPM=True, wonChallenge=True, giftedGems=True, giftedSubscription=True, invitedParty=True, invitedGuild=True, questStarted=True, invitedQuest=True, majorUpdates=True, mentionParty=True, mentionJoinedGuild=True, mentionUnjoinedGuild=True, partyActivity=True, contentRelease=True), suppressModals=SuppressModalsPreferences(levelUp=False, hatchPet=False, raisePet=False, streak=False), tasks=TasksPreferences(activeFilter=ActiveFilterTask(habit='all', daily='all', todo='remaining', reward='all'), groupByChallenge=False, confirmScoreNotes=False, mirrorGroupTasks=[]), dayStart=0, hideHeader=False, timezoneOffset=-120, sound='rosstavoTheme', allocationMode='flat', autoEquip=True, dateFormat='MM/dd/yyyy', stickyHeader=True, disableClasses=False, newTaskEdit=False, dailyDueDefaultView=False, advancedCollapsed=False, toolbarCollapsed=False, reverseChatOrder=False, developerMode=False, displayInviteToPartyWhenPartyIs1=True, automaticAllocation=None, webhooks={}, improvementCategories=[], timezoneOffsetAtLastCron=None, language=<Language.DE: 'de'>), stats=StatsUser(buffs=BuffsStats(seafoam=False, shinySeed=False, snowball=False, spookySparkles=False, Str=0, per=0, con=0, stealth=0, streaks=False, Int=0), Class=<HabiticaClass.WARRIOR: 'warrior'>, training=TrainingStats(Str=0.0, per=0, con=0, Int=0), hp=50.0, mp=10.0, exp=0, gp=0.0, lvl=1, points=0, Str=0, con=0, per=0, toNextLevel=25, maxHealth=50, maxMP=30, Int=0), id=UUID('c18e1853-bded-47a9-82e2-adfdad08894d'), flags=FlagsUser(customizationsNotification=False, tour=TourFlags(intro=-1, classes=-1, stats=-1, tavern=-1, party=-1, guilds=-1, challenges=-1, market=-1, pets=-1, mounts=-1, hall=-1, equipment=-1, groupPlans=-1), showTour=True, tutorial=TutorialFlags(common=CommonTutorial(habits=True, dailies=True, todos=True, rewards=True, party=True, pets=True, gems=True, skills=True, classes=True, tavern=True, equipment=True, items=True, mounts=True, inbox=True, stats=True), ios=IosTutorial(addTask=False, editTask=False, deleteTask=False, filterTask=False, groupPets=False, inviteParty=False, reorderTask=False)), dropsEnabled=False, itemsEnabled=False, lastNewStuffRead='', rewrite=True, classSelected=False, rebirthEnabled=False, levelDrops={}, recaptureEmailsPhase=0, weeklyRecapEmailsPhase=0, lastWeeklyRecap=datetime.datetime(2024, 10, 19, 18, 43, 39, 782000, tzinfo=datetime.timezone.utc), communityGuidelinesAccepted=False, cronCount=0, welcomed=True, armoireEnabled=True, armoireOpened=False, armoireEmpty=False, cardReceived=False, warnedLowHealth=False, verifiedUsername=True, newStuff=False, thirdPartyTools=None, mathUpdates=None, lastFreeRebirth=None, chatRevoked=None, chatShadowMuted=None, lastWeeklyRecapDiscriminator=None, onboardingEmailsPhase=None), auth=AuthUser(local=LocalAuth(email='test@example.com', username='test', lowerCaseUsername='test', has_password=True), timestamps=LocalTimestamps(created=datetime.datetime(2024, 10, 19, 18, 43, 39, 782000, tzinfo=datetime.timezone.utc), loggedin=datetime.datetime(2024, 10, 19, 18, 43, 39, 782000, tzinfo=datetime.timezone.utc), updated=datetime.datetime(2024, 10, 19, 18, 44, 51, 37000, tzinfo=datetime.timezone.utc)), facebook={}, google={}, apple={}), achievements=AchievementsUser(ultimateGearSets=UltimateGearSetsAchievments(healer=False, wizard=False, rogue=False, warrior=False), streak=0, challenges=[], perfect=0, quests=QuestsAchievments(bewilder=None, burnout=None, stressbeast=None, harpy=None, atom3=None, vice3=None, vice1=None, gryphon=None, evilsanta2=None, evilsanta=None, dilatory_derby=None, dilatory=None, atom2=None, atom1=None, dysheartener=None), backToBasics=None, dustDevil=None, primedForPainting=None, completedTask=None, createdTask=None, fedPet=None, hatchedPet=None, purchasedEquipment=None, tickledPink=None, goodAsGold=None, boneCollector=None, seeingRed=None, violetsAreBlue=None, shadyCustomer=None, joinedGuild=None, joinedChallenge=None, partyUp=None), backer=BackerUser(tier=None, npc=None, tokensApplied=None), contributor=ContributorUser(contributions=None, level=None, text=None), permissions=PermissionsUser(fullAccess=None, news=None, userSupport=None, challengeAdmin=None, moderator=None, coupons=None), purchased=PurchasedUser(plan=PlanPurchased(consecutive=ConsecutivePlan(trinkets=0, gemCapExtra=0, offset=0, count=0), mysteryItems=[], gemsBought=0, extraMonths=0, dateUpdated=None, perkMonthCount=-1, quantity=1), txnCount=0, background={'violet': True}, shirt={}, hair={}, skin={}, ads=False, mobileChat=None), history=HistoryUser(todos=[], exp=[]), invitations=InvitationsUser(party={}, guilds=[], parties=[]), party=PartyUser(quest=QuestParty(progress=ProgressQuest(up=0.0, down=0.0, collect={}, collectedItems=0, hp=None), RSVPNeeded=False, key=None, completed=None, active=None, leader=None, members={}), order='level', orderAscending='ascending', _id=None), profile=ProfileUser(blurb=None, imageUrl=None, name='test'), notifications=[], tags=[TagsUser(id=UUID('5358c71f-fe0f-4583-84a3-109b70c699fd'), name='Arbeit', challenge=None, group=None), TagsUser(id=UUID('45870b8b-3e1e-4e13-a722-6afcacdf689f'), name='Training', challenge=None, group=None), TagsUser(id=UUID('3e49b9db-0cc5-4070-b860-e16f1e4806a4'), name='Gesundheit + Wohlbefinden', challenge=None, group=None), TagsUser(id=UUID('0d85319e-7b9c-43e2-81ed-2a706521d5e3'), name='Schule', challenge=None, group=None), TagsUser(id=UUID('b7cf86bf-97ac-42d3-b5d0-5ffe998b62b4'), name='Teams', challenge=None, group=None), TagsUser(id=UUID('c584d792-0a9b-4646-a6ca-a67bb6ef3c36'), name='Hausarbeiten', challenge=None, group=None), TagsUser(id=UUID('0602fd13-edf2-46a7-99c0-c5084046efbb'), name='Kreativität', challenge=None, group=None)], inbox=InboxUser(newMessages=0, optOut=False, blocks=[], messages={}), tasksOrder=TasksOrderUser(habits=[UUID('21b10675-e238-4462-be11-1a4f8012fc9c'), UUID('69909140-a920-4b83-b018-b9156760aca3'), UUID('7e0679cf-e9cd-4604-b429-d061ea16ce72'), UUID('270df162-d47d-488b-9c1d-4fc4f0e2b2d2'), UUID('80ad00b5-622e-4d1a-af4d-6a6c199f3571'), UUID('0712669d-8374-4211-84ea-715cbcbae9c1'), UUID('56dee98d-038a-43f3-a514-59b1ed9a52ee'), UUID('25df4765-754c-47b1-a011-83b31f70c4fb')], dailys=[UUID('e22e9ef0-15be-478a-81c7-f9fdbb4fac10'), UUID('2a74baa2-3acd-426c-bce4-6b4bb145a8d5'), UUID('e18d0899-7c59-41c0-affd-318b8850c3e5'), UUID('3d0cecac-73c1-462b-ab39-a39cea107e6b'), UUID('1ed21cd0-e6f5-4707-b1b4-fb376d462387'), UUID('9117ad5e-2cda-43e0-a07c-0b175d32c0eb')], todos=[UUID('ac13c62c-9375-4809-a357-0e42b01a1b43'), UUID('2388ccad-0387-4ea6-9968-2d10d994e903'), UUID('5c6efb91-6ae3-4cad-8b19-2dd2fc52a965'), UUID('80afe0b9-e367-4473-8117-b8bc7115f54a'), UUID('4cc21c36-886c-4a43-b580-877e958a37fd'), UUID('10a45996-7133-4ca1-84d8-abf1093d9dcc'), UUID('fb867459-ae50-4cee-9017-c13206c6dfa2')], rewards=[UUID('4b18ccf6-3934-43a5-a153-31af8b2a36d9')]), extra={}, pushDevices=[], webhooks=[TaskActivityWebhook(url='https://some-webhook-url.com', enabled=True, label='My Webhook', id=UUID('43a67e37-1bae-4b11-8d3d-6c4b1b480231'), Type=<WebhookType.TASK_ACTIVITY: 'taskActivity'>, options=TaskActivityOptions(created=False, updated=False, deleted=False, checklistScored=False, scored=True), failures=0, lastFailureAt=None, createdAt=datetime.datetime(2025, 2, 8, 22, 6, 8, 894000, tzinfo=datetime.timezone.utc), updatedAt=datetime.datetime(2025, 2, 8, 22, 6, 17, 195000, tzinfo=datetime.timezone.utc)), GroupChatReceivedWebhook(url='https://some-webhook-url.com', enabled=True, label='My Chat Webhook', id=None, groupId=None, Type=<WebhookType.GROUP_CHAT_RECEIVED: 'groupChatReceived'>, options=GroupChatReceivedOptions(groupId=UUID('89ee933e-79e5-43ed-8722-3ca5a58be79f')), failures=0, lastFailureAt=None, createdAt=None, updatedAt=None), UserActivityWebhook(url='https://some-webhook-url.com', enabled=True, label='My Activity Webhook', id=None, Type=<WebhookType.USER_ACTIVITY: 'userActivity'>, options=UserActivityOptions(petHatched=False, mountRaised=False, leveledUp=False), failures=0, lastFailureAt=None, createdAt=None, updatedAt=None)], loginIncentives=0, invitesSent=0, pinnedItems=[PinnedItemsUser(path='gear.flat.weapon_warrior_0', Type='marketGear'), PinnedItemsUser(path='gear.flat.armor_warrior_1', Type='marketGear'), PinnedItemsUser(path='gear.flat.shield_warrior_1', Type='marketGear'), PinnedItemsUser(path='gear.flat.head_warrior_1', Type='marketGear'), PinnedItemsUser(path='potion', Type='potion'), PinnedItemsUser(path='armoire', Type='armoire')], pinnedItemsOrder=[], unpinnedItems=[], secret=None, balance=0.0, lastCron=datetime.datetime(2024, 10, 19, 18, 43, 39, 784000, tzinfo=datetime.timezone.utc), needsCron=False, challenges=[], guilds=[], newMessages={}), success=True, notifications=[], userV=5, appVersion='5.28.8')
|
3
|
+
HabiticaUserResponse(data=UserData(items=ItemsUser(gear=GearItems(equipped=EquippedGear(weapon='weapon_special_fall2024Warrior', armor='armor_special_fall2024Warrior', head='head_special_fall2024Warrior', shield='shield_special_fall2024Warrior', back='back_mystery_201402', headAccessory='headAccessory_special_pinkHeadband', eyewear='eyewear_special_pinkHalfMoon', body='body_mystery_202003'), costume=EquippedGear(weapon=None, armor='armor_base_0', head='head_base_0', shield='shield_base_0', back=None, headAccessory=None, eyewear=None, body=None), owned={'headAccessory_special_blackHeadband': True, 'headAccessory_special_blueHeadband': True, 'headAccessory_special_greenHeadband': True, 'headAccessory_special_pinkHeadband': True, 'headAccessory_special_redHeadband': True, 'headAccessory_special_whiteHeadband': True, 'headAccessory_special_yellowHeadband': True, 'eyewear_special_blackTopFrame': True, 'eyewear_special_blueTopFrame': True, 'eyewear_special_greenTopFrame': True, 'eyewear_special_pinkTopFrame': True, 'eyewear_special_redTopFrame': True, 'eyewear_special_whiteTopFrame': True, 'eyewear_special_yellowTopFrame': True, 'eyewear_special_blackHalfMoon': True, 'eyewear_special_blueHalfMoon': True, 'eyewear_special_greenHalfMoon': True, 'eyewear_special_pinkHalfMoon': True, 'eyewear_special_redHalfMoon': True, 'eyewear_special_whiteHalfMoon': True, 'eyewear_special_yellowHalfMoon': True}), currentMount='Velociraptor-Base', currentPet='Rat-Shade', special=SpecialItems(birthdayReceived=[], birthday=0, thankyouReceived=[], thankyou=0, greetingReceived=[], greeting=0, nyeReceived=[], nye=0, valentineReceived=[], valentine=0, seafoam=0, shinySeed=0, spookySparkles=0, snowball=0, congrats=0, congratsReceived=[], getwell=0, getwellReceived=[], goodluck=0, goodluckReceived=[]), lastDrop=LastDropItems(count=0, date=datetime.datetime(2024, 10, 19, 18, 43, 39, 784000, tzinfo=datetime.timezone.utc)), quests={'dustbunnies': 1}, mounts={}, food={}, hatchingPotions={}, eggs={}, pets={}), preferences=PreferencesUser(hair=HairPreferences(color='red', base=3, bangs=1, beard=0, mustache=0, flower=1), size='slim', skin='915533', shirt='blue', chair='none', costume=False, sleep=False, background='violet', emailNotifications=EmailNotificationsPreferences(unsubscribeFromAll=False, newPM=True, kickedGroup=True, wonChallenge=True, giftedGems=True, giftedSubscription=True, invitedParty=True, invitedGuild=True, questStarted=True, invitedQuest=True, importantAnnouncements=True, weeklyRecaps=True, onboarding=True, majorUpdates=True, subscriptionReminders=True, contentRelease=True), pushNotifications=PushNotificationsPreferences(unsubscribeFromAll=False, newPM=True, wonChallenge=True, giftedGems=True, giftedSubscription=True, invitedParty=True, invitedGuild=True, questStarted=True, invitedQuest=True, majorUpdates=True, mentionParty=True, mentionJoinedGuild=True, mentionUnjoinedGuild=True, partyActivity=True, contentRelease=True), suppressModals=SuppressModalsPreferences(levelUp=False, hatchPet=False, raisePet=False, streak=False), tasks=TasksPreferences(activeFilter=ActiveFilterTask(habit='all', daily='all', todo='remaining', reward='all'), groupByChallenge=False, confirmScoreNotes=False, mirrorGroupTasks=[]), dayStart=0, hideHeader=False, timezoneOffset=-120, sound='rosstavoTheme', allocationMode='flat', autoEquip=True, dateFormat='MM/dd/yyyy', stickyHeader=True, disableClasses=False, newTaskEdit=False, dailyDueDefaultView=False, advancedCollapsed=False, toolbarCollapsed=False, reverseChatOrder=False, developerMode=False, displayInviteToPartyWhenPartyIs1=True, automaticAllocation=None, webhooks={}, improvementCategories=[], timezoneOffsetAtLastCron=None, language=<Language.DE: 'de'>), stats=StatsUser(buffs=BuffsStats(seafoam=False, shinySeed=False, snowball=False, spookySparkles=False, Str=0, per=0, con=0, stealth=0, streaks=False, Int=0), Class=<HabiticaClass.WARRIOR: 'warrior'>, training=TrainingStats(Str=0.0, per=0, con=0, Int=0), hp=50.0, mp=10.0, exp=0, gp=0.0, lvl=1, points=0, Str=0, con=0, per=0, toNextLevel=25, maxHealth=50, maxMP=30, Int=0), id=UUID('c18e1853-bded-47a9-82e2-adfdad08894d'), flags=FlagsUser(customizationsNotification=False, tour=TourFlags(intro=-1, classes=-1, stats=-1, tavern=-1, party=-1, guilds=-1, challenges=-1, market=-1, pets=-1, mounts=-1, hall=-1, equipment=-1, groupPlans=-1), showTour=True, tutorial=TutorialFlags(common=CommonTutorial(habits=True, dailies=True, todos=True, rewards=True, party=True, pets=True, gems=True, skills=True, classes=True, tavern=True, equipment=True, items=True, mounts=True, inbox=True, stats=True), ios=IosTutorial(addTask=False, editTask=False, deleteTask=False, filterTask=False, groupPets=False, inviteParty=False, reorderTask=False)), dropsEnabled=False, itemsEnabled=False, lastNewStuffRead='', rewrite=True, classSelected=False, rebirthEnabled=False, levelDrops={}, recaptureEmailsPhase=0, weeklyRecapEmailsPhase=0, lastWeeklyRecap=datetime.datetime(2024, 10, 19, 18, 43, 39, 782000, tzinfo=datetime.timezone.utc), communityGuidelinesAccepted=False, cronCount=0, welcomed=True, armoireEnabled=True, armoireOpened=False, armoireEmpty=False, cardReceived=False, warnedLowHealth=False, verifiedUsername=True, newStuff=False, thirdPartyTools=None, mathUpdates=None, lastFreeRebirth=None, chatRevoked=None, chatShadowMuted=None, lastWeeklyRecapDiscriminator=None, onboardingEmailsPhase=None), auth=AuthUser(local=LocalAuth(email='test@example.com', username='test', lowerCaseUsername='test', has_password=True), timestamps=LocalTimestamps(created=datetime.datetime(2024, 10, 19, 18, 43, 39, 782000, tzinfo=datetime.timezone.utc), loggedin=datetime.datetime(2024, 10, 19, 18, 43, 39, 782000, tzinfo=datetime.timezone.utc), updated=datetime.datetime(2024, 10, 19, 18, 44, 51, 37000, tzinfo=datetime.timezone.utc)), facebook={}, google={}, apple={}), achievements=AchievementsUser(ultimateGearSets=UltimateGearSetsAchievments(healer=False, wizard=False, rogue=False, warrior=False), streak=0, challenges=[], perfect=0, quests=QuestsAchievments(bewilder=None, burnout=None, stressbeast=None, harpy=None, atom3=None, vice3=None, vice1=None, gryphon=None, evilsanta2=None, evilsanta=None, dilatory_derby=None, dilatory=None, atom2=None, atom1=None, dysheartener=None), backToBasics=None, dustDevil=None, primedForPainting=None, completedTask=None, createdTask=None, fedPet=None, hatchedPet=None, purchasedEquipment=None, tickledPink=None, goodAsGold=None, boneCollector=None, seeingRed=None, violetsAreBlue=None, shadyCustomer=None, joinedGuild=None, joinedChallenge=None, partyUp=None), backer=BackerUser(tier=None, npc=None, tokensApplied=None), contributor=ContributorUser(contributions=None, level=None, text=None), permissions=PermissionsUser(fullAccess=None, news=None, userSupport=None, challengeAdmin=None, moderator=None, coupons=None), purchased=PurchasedUser(plan=PlanPurchased(consecutive=ConsecutivePlan(trinkets=0, gemCapExtra=0, offset=0, count=0), mysteryItems=[], gemsBought=0, extraMonths=0, dateUpdated=None, perkMonthCount=-1, quantity=1), txnCount=0, background={'violet': True}, shirt={}, hair={}, skin={}, ads=False, mobileChat=None), history=HistoryUser(todos=[], exp=[]), invitations=InvitationsUser(party={}, guilds=[], parties=[]), party=PartyUser(quest=QuestParty(progress=ProgressQuest(up=0.0, down=0.0, collect={}, collectedItems=0, hp=None), RSVPNeeded=False, key=None, completed=None, active=None, leader=None, members={}), order='level', orderAscending='ascending', _id=UUID('1e87097c-4c03-4f8c-a475-67cc7da7f409'), id=UUID('1e87097c-4c03-4f8c-a475-67cc7da7f409')), profile=ProfileUser(blurb=None, imageUrl=None, name='test'), notifications=[], tags=[TagsUser(id=UUID('5358c71f-fe0f-4583-84a3-109b70c699fd'), name='Arbeit', challenge=None, group=None), TagsUser(id=UUID('45870b8b-3e1e-4e13-a722-6afcacdf689f'), name='Training', challenge=None, group=None), TagsUser(id=UUID('3e49b9db-0cc5-4070-b860-e16f1e4806a4'), name='Gesundheit + Wohlbefinden', challenge=None, group=None), TagsUser(id=UUID('0d85319e-7b9c-43e2-81ed-2a706521d5e3'), name='Schule', challenge=None, group=None), TagsUser(id=UUID('b7cf86bf-97ac-42d3-b5d0-5ffe998b62b4'), name='Teams', challenge=None, group=None), TagsUser(id=UUID('c584d792-0a9b-4646-a6ca-a67bb6ef3c36'), name='Hausarbeiten', challenge=None, group=None), TagsUser(id=UUID('0602fd13-edf2-46a7-99c0-c5084046efbb'), name='Kreativität', challenge=None, group=None)], inbox=InboxUser(newMessages=0, optOut=False, blocks=[], messages={}), tasksOrder=TasksOrderUser(habits=[UUID('21b10675-e238-4462-be11-1a4f8012fc9c'), UUID('69909140-a920-4b83-b018-b9156760aca3'), UUID('7e0679cf-e9cd-4604-b429-d061ea16ce72'), UUID('270df162-d47d-488b-9c1d-4fc4f0e2b2d2'), UUID('80ad00b5-622e-4d1a-af4d-6a6c199f3571'), UUID('0712669d-8374-4211-84ea-715cbcbae9c1'), UUID('56dee98d-038a-43f3-a514-59b1ed9a52ee'), UUID('25df4765-754c-47b1-a011-83b31f70c4fb')], dailys=[UUID('e22e9ef0-15be-478a-81c7-f9fdbb4fac10'), UUID('2a74baa2-3acd-426c-bce4-6b4bb145a8d5'), UUID('e18d0899-7c59-41c0-affd-318b8850c3e5'), UUID('3d0cecac-73c1-462b-ab39-a39cea107e6b'), UUID('1ed21cd0-e6f5-4707-b1b4-fb376d462387'), UUID('9117ad5e-2cda-43e0-a07c-0b175d32c0eb')], todos=[UUID('ac13c62c-9375-4809-a357-0e42b01a1b43'), UUID('2388ccad-0387-4ea6-9968-2d10d994e903'), UUID('5c6efb91-6ae3-4cad-8b19-2dd2fc52a965'), UUID('80afe0b9-e367-4473-8117-b8bc7115f54a'), UUID('4cc21c36-886c-4a43-b580-877e958a37fd'), UUID('10a45996-7133-4ca1-84d8-abf1093d9dcc'), UUID('fb867459-ae50-4cee-9017-c13206c6dfa2')], rewards=[UUID('4b18ccf6-3934-43a5-a153-31af8b2a36d9')]), extra={}, pushDevices=[], webhooks=[TaskActivityWebhook(url='https://some-webhook-url.com', enabled=True, label='My Webhook', id=UUID('43a67e37-1bae-4b11-8d3d-6c4b1b480231'), Type=<WebhookType.TASK_ACTIVITY: 'taskActivity'>, options=TaskActivityOptions(created=False, updated=False, deleted=False, checklistScored=False, scored=True), failures=0, lastFailureAt=None, createdAt=datetime.datetime(2025, 2, 8, 22, 6, 8, 894000, tzinfo=datetime.timezone.utc), updatedAt=datetime.datetime(2025, 2, 8, 22, 6, 17, 195000, tzinfo=datetime.timezone.utc)), GroupChatReceivedWebhook(url='https://some-webhook-url.com', enabled=True, label='My Chat Webhook', id=None, groupId=None, Type=<WebhookType.GROUP_CHAT_RECEIVED: 'groupChatReceived'>, options=GroupChatReceivedOptions(groupId=UUID('89ee933e-79e5-43ed-8722-3ca5a58be79f')), failures=0, lastFailureAt=None, createdAt=None, updatedAt=None), UserActivityWebhook(url='https://some-webhook-url.com', enabled=True, label='My Activity Webhook', id=None, Type=<WebhookType.USER_ACTIVITY: 'userActivity'>, options=UserActivityOptions(petHatched=False, mountRaised=False, leveledUp=False), failures=0, lastFailureAt=None, createdAt=None, updatedAt=None)], loginIncentives=0, invitesSent=0, pinnedItems=[PinnedItemsUser(path='gear.flat.weapon_warrior_0', Type='marketGear'), PinnedItemsUser(path='gear.flat.armor_warrior_1', Type='marketGear'), PinnedItemsUser(path='gear.flat.shield_warrior_1', Type='marketGear'), PinnedItemsUser(path='gear.flat.head_warrior_1', Type='marketGear'), PinnedItemsUser(path='potion', Type='potion'), PinnedItemsUser(path='armoire', Type='armoire')], pinnedItemsOrder=[], unpinnedItems=[], secret=None, balance=0.0, lastCron=datetime.datetime(2024, 10, 19, 18, 43, 39, 784000, tzinfo=datetime.timezone.utc), needsCron=False, challenges=[], guilds=[], newMessages={}), success=True, notifications=[], userV=5, appVersion='5.28.8')
|
4
4
|
# ---
|
5
5
|
# name: test_get_user_anonymized
|
6
|
-
HabiticaUserAnonymizedResponse(data=UserAnonymizedData(user=UserData(items=ItemsUser(gear=GearItems(equipped=EquippedGear(weapon=None, armor=None, head=None, shield=None, back=None, headAccessory=None, eyewear=None, body=None), costume=EquippedGear(weapon=None, armor=None, head=None, shield=None, back=None, headAccessory=None, eyewear=None, body=None), owned={}), currentMount=None, currentPet=None, special=SpecialItems(birthdayReceived=[], birthday=None, thankyouReceived=[], thankyou=None, greetingReceived=[], greeting=None, nyeReceived=[], nye=None, valentineReceived=[], valentine=None, seafoam=None, shinySeed=None, spookySparkles=None, snowball=None, congrats=None, congratsReceived=[], getwell=None, getwellReceived=[], goodluck=None, goodluckReceived=[]), lastDrop=LastDropItems(count=None, date=None), quests={}, mounts={}, food={}, hatchingPotions={}, eggs={}, pets={}), preferences=PreferencesUser(hair=HairPreferences(color=None, base=None, bangs=None, beard=None, mustache=None, flower=None), size=None, skin=None, shirt=None, chair=None, costume=None, sleep=None, background=None, emailNotifications=EmailNotificationsPreferences(unsubscribeFromAll=None, newPM=None, kickedGroup=None, wonChallenge=None, giftedGems=None, giftedSubscription=None, invitedParty=None, invitedGuild=None, questStarted=None, invitedQuest=None, importantAnnouncements=None, weeklyRecaps=None, onboarding=None, majorUpdates=None, subscriptionReminders=None, contentRelease=None), pushNotifications=PushNotificationsPreferences(unsubscribeFromAll=None, newPM=None, wonChallenge=None, giftedGems=None, giftedSubscription=None, invitedParty=None, invitedGuild=None, questStarted=None, invitedQuest=None, majorUpdates=None, mentionParty=None, mentionJoinedGuild=None, mentionUnjoinedGuild=None, partyActivity=None, contentRelease=None), suppressModals=SuppressModalsPreferences(levelUp=None, hatchPet=None, raisePet=None, streak=None), tasks=TasksPreferences(activeFilter=ActiveFilterTask(habit=None, daily=None, todo=None, reward=None), groupByChallenge=None, confirmScoreNotes=None, mirrorGroupTasks=[]), dayStart=None, hideHeader=None, timezoneOffset=None, sound=None, allocationMode=None, autoEquip=None, dateFormat=None, stickyHeader=None, disableClasses=None, newTaskEdit=None, dailyDueDefaultView=None, advancedCollapsed=None, toolbarCollapsed=None, reverseChatOrder=None, developerMode=None, displayInviteToPartyWhenPartyIs1=None, automaticAllocation=None, webhooks={}, improvementCategories=[], timezoneOffsetAtLastCron=None, language=None), stats=StatsUser(buffs=BuffsStats(seafoam=None, shinySeed=None, snowball=None, spookySparkles=None, Str=None, per=None, con=None, stealth=None, streaks=None, Int=None), Class=<HabiticaClass.WARRIOR: 'warrior'>, training=TrainingStats(Str=None, per=None, con=None, Int=None), hp=None, mp=None, exp=None, gp=None, lvl=None, points=None, Str=None, con=None, per=None, toNextLevel=None, maxHealth=None, maxMP=None, Int=None), id=None, flags=FlagsUser(customizationsNotification=None, tour=TourFlags(intro=None, classes=None, stats=None, tavern=None, party=None, guilds=None, challenges=None, market=None, pets=None, mounts=None, hall=None, equipment=None, groupPlans=None), showTour=None, tutorial=TutorialFlags(common=None, ios=None), dropsEnabled=None, itemsEnabled=None, lastNewStuffRead=None, rewrite=None, classSelected=None, rebirthEnabled=None, levelDrops={}, recaptureEmailsPhase=None, weeklyRecapEmailsPhase=None, lastWeeklyRecap=None, communityGuidelinesAccepted=None, cronCount=None, welcomed=None, armoireEnabled=None, armoireOpened=None, armoireEmpty=None, cardReceived=None, warnedLowHealth=None, verifiedUsername=None, newStuff=None, thirdPartyTools=None, mathUpdates=None, lastFreeRebirth=None, chatRevoked=None, chatShadowMuted=None, lastWeeklyRecapDiscriminator=None, onboardingEmailsPhase=None), auth=AuthUser(local=LocalAuth(email=None, username=None, lowerCaseUsername=None, has_password=None), timestamps=LocalTimestamps(created=None, loggedin=None, updated=None), facebook=None, google=None, apple=None), achievements=AchievementsUser(ultimateGearSets=UltimateGearSetsAchievments(healer=None, wizard=None, rogue=None, warrior=None), streak=None, challenges=[], perfect=None, quests=QuestsAchievments(bewilder=None, burnout=None, stressbeast=None, harpy=None, atom3=None, vice3=None, vice1=None, gryphon=None, evilsanta2=None, evilsanta=None, dilatory_derby=None, dilatory=None, atom2=None, atom1=None, dysheartener=None), backToBasics=None, dustDevil=None, primedForPainting=None, completedTask=None, createdTask=None, fedPet=None, hatchedPet=None, purchasedEquipment=None, tickledPink=None, goodAsGold=None, boneCollector=None, seeingRed=None, violetsAreBlue=None, shadyCustomer=None, joinedGuild=None, joinedChallenge=None, partyUp=None), backer=BackerUser(tier=None, npc=None, tokensApplied=None), contributor=ContributorUser(contributions=None, level=None, text=None), permissions=PermissionsUser(fullAccess=None, news=None, userSupport=None, challengeAdmin=None, moderator=None, coupons=None), purchased=PurchasedUser(plan=PlanPurchased(consecutive=ConsecutivePlan(trinkets=None, gemCapExtra=None, offset=None, count=None), mysteryItems=[], gemsBought=None, extraMonths=None, dateUpdated=None, perkMonthCount=None, quantity=None), txnCount=None, background={}, shirt={}, hair={}, skin={}, ads=None, mobileChat=None), history=HistoryUser(todos=[], exp=[]), invitations=InvitationsUser(party={}, guilds=[], parties=[]), party=PartyUser(quest=QuestParty(progress=ProgressQuest(up=None, down=None, collect={}, collectedItems=None, hp=None), RSVPNeeded=None, key=None, completed=None, active=None, leader=None, members={}), order=None, orderAscending=None, _id=None), profile=ProfileUser(blurb=None, imageUrl=None, name=None), notifications=[], tags=[], inbox=InboxUser(newMessages=None, optOut=None, blocks=[], messages={}), tasksOrder=TasksOrderUser(habits=[], dailys=[], todos=[], rewards=[]), extra={}, pushDevices=[], webhooks=[], loginIncentives=None, invitesSent=None, pinnedItems=[], pinnedItemsOrder=[], unpinnedItems=[], secret=None, balance=None, lastCron=None, needsCron=None, challenges=[], guilds=[], newMessages={}), tasks=[]))
|
6
|
+
HabiticaUserAnonymizedResponse(data=UserAnonymizedData(user=UserData(items=ItemsUser(gear=GearItems(equipped=EquippedGear(weapon=None, armor=None, head=None, shield=None, back=None, headAccessory=None, eyewear=None, body=None), costume=EquippedGear(weapon=None, armor=None, head=None, shield=None, back=None, headAccessory=None, eyewear=None, body=None), owned={}), currentMount=None, currentPet=None, special=SpecialItems(birthdayReceived=[], birthday=None, thankyouReceived=[], thankyou=None, greetingReceived=[], greeting=None, nyeReceived=[], nye=None, valentineReceived=[], valentine=None, seafoam=None, shinySeed=None, spookySparkles=None, snowball=None, congrats=None, congratsReceived=[], getwell=None, getwellReceived=[], goodluck=None, goodluckReceived=[]), lastDrop=LastDropItems(count=None, date=None), quests={}, mounts={}, food={}, hatchingPotions={}, eggs={}, pets={}), preferences=PreferencesUser(hair=HairPreferences(color=None, base=None, bangs=None, beard=None, mustache=None, flower=None), size=None, skin=None, shirt=None, chair=None, costume=None, sleep=None, background=None, emailNotifications=EmailNotificationsPreferences(unsubscribeFromAll=None, newPM=None, kickedGroup=None, wonChallenge=None, giftedGems=None, giftedSubscription=None, invitedParty=None, invitedGuild=None, questStarted=None, invitedQuest=None, importantAnnouncements=None, weeklyRecaps=None, onboarding=None, majorUpdates=None, subscriptionReminders=None, contentRelease=None), pushNotifications=PushNotificationsPreferences(unsubscribeFromAll=None, newPM=None, wonChallenge=None, giftedGems=None, giftedSubscription=None, invitedParty=None, invitedGuild=None, questStarted=None, invitedQuest=None, majorUpdates=None, mentionParty=None, mentionJoinedGuild=None, mentionUnjoinedGuild=None, partyActivity=None, contentRelease=None), suppressModals=SuppressModalsPreferences(levelUp=None, hatchPet=None, raisePet=None, streak=None), tasks=TasksPreferences(activeFilter=ActiveFilterTask(habit=None, daily=None, todo=None, reward=None), groupByChallenge=None, confirmScoreNotes=None, mirrorGroupTasks=[]), dayStart=None, hideHeader=None, timezoneOffset=None, sound=None, allocationMode=None, autoEquip=None, dateFormat=None, stickyHeader=None, disableClasses=None, newTaskEdit=None, dailyDueDefaultView=None, advancedCollapsed=None, toolbarCollapsed=None, reverseChatOrder=None, developerMode=None, displayInviteToPartyWhenPartyIs1=None, automaticAllocation=None, webhooks={}, improvementCategories=[], timezoneOffsetAtLastCron=None, language=None), stats=StatsUser(buffs=BuffsStats(seafoam=None, shinySeed=None, snowball=None, spookySparkles=None, Str=None, per=None, con=None, stealth=None, streaks=None, Int=None), Class=<HabiticaClass.WARRIOR: 'warrior'>, training=TrainingStats(Str=None, per=None, con=None, Int=None), hp=None, mp=None, exp=None, gp=None, lvl=None, points=None, Str=None, con=None, per=None, toNextLevel=None, maxHealth=None, maxMP=None, Int=None), id=None, flags=FlagsUser(customizationsNotification=None, tour=TourFlags(intro=None, classes=None, stats=None, tavern=None, party=None, guilds=None, challenges=None, market=None, pets=None, mounts=None, hall=None, equipment=None, groupPlans=None), showTour=None, tutorial=TutorialFlags(common=None, ios=None), dropsEnabled=None, itemsEnabled=None, lastNewStuffRead=None, rewrite=None, classSelected=None, rebirthEnabled=None, levelDrops={}, recaptureEmailsPhase=None, weeklyRecapEmailsPhase=None, lastWeeklyRecap=None, communityGuidelinesAccepted=None, cronCount=None, welcomed=None, armoireEnabled=None, armoireOpened=None, armoireEmpty=None, cardReceived=None, warnedLowHealth=None, verifiedUsername=None, newStuff=None, thirdPartyTools=None, mathUpdates=None, lastFreeRebirth=None, chatRevoked=None, chatShadowMuted=None, lastWeeklyRecapDiscriminator=None, onboardingEmailsPhase=None), auth=AuthUser(local=LocalAuth(email=None, username=None, lowerCaseUsername=None, has_password=None), timestamps=LocalTimestamps(created=None, loggedin=None, updated=None), facebook=None, google=None, apple=None), achievements=AchievementsUser(ultimateGearSets=UltimateGearSetsAchievments(healer=None, wizard=None, rogue=None, warrior=None), streak=None, challenges=[], perfect=None, quests=QuestsAchievments(bewilder=None, burnout=None, stressbeast=None, harpy=None, atom3=None, vice3=None, vice1=None, gryphon=None, evilsanta2=None, evilsanta=None, dilatory_derby=None, dilatory=None, atom2=None, atom1=None, dysheartener=None), backToBasics=None, dustDevil=None, primedForPainting=None, completedTask=None, createdTask=None, fedPet=None, hatchedPet=None, purchasedEquipment=None, tickledPink=None, goodAsGold=None, boneCollector=None, seeingRed=None, violetsAreBlue=None, shadyCustomer=None, joinedGuild=None, joinedChallenge=None, partyUp=None), backer=BackerUser(tier=None, npc=None, tokensApplied=None), contributor=ContributorUser(contributions=None, level=None, text=None), permissions=PermissionsUser(fullAccess=None, news=None, userSupport=None, challengeAdmin=None, moderator=None, coupons=None), purchased=PurchasedUser(plan=PlanPurchased(consecutive=ConsecutivePlan(trinkets=None, gemCapExtra=None, offset=None, count=None), mysteryItems=[], gemsBought=None, extraMonths=None, dateUpdated=None, perkMonthCount=None, quantity=None), txnCount=None, background={}, shirt={}, hair={}, skin={}, ads=None, mobileChat=None), history=HistoryUser(todos=[], exp=[]), invitations=InvitationsUser(party={}, guilds=[], parties=[]), party=PartyUser(quest=QuestParty(progress=ProgressQuest(up=None, down=None, collect={}, collectedItems=None, hp=None), RSVPNeeded=None, key=None, completed=None, active=None, leader=None, members={}), order=None, orderAscending=None, _id=None, id=None), profile=ProfileUser(blurb=None, imageUrl=None, name=None), notifications=[], tags=[], inbox=InboxUser(newMessages=None, optOut=None, blocks=[], messages={}), tasksOrder=TasksOrderUser(habits=[], dailys=[], todos=[], rewards=[]), extra={}, pushDevices=[], webhooks=[], loginIncentives=None, invitesSent=None, pinnedItems=[], pinnedItemsOrder=[], unpinnedItems=[], secret=None, balance=None, lastCron=None, needsCron=None, challenges=[], guilds=[], newMessages={}), tasks=[]))
|
7
7
|
# ---
|
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
|
{habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/__snapshots__/test_avatar/test_generate_avatar.png
RENAMED
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
|
{habiticalib-0.4.0rc4 → habiticalib-0.4.2}/tests/fixtures/user_styles_animated_background.json
RENAMED
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
|