You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mipac/.github/CONTRIBUTING.md

81 lines
3.8 KiB

# Contribution guide
Thank you for considering contributing to MiPAC!!!
## Issue
Check the going points before creating an assignment
- To avoid duplicates, please search for similar Issues
- Do not use Issue for questions, etc.
- We welcome your questions in GitHub Discussion or on the Discord server in the README.
## About Brunch
- `master` is a branch intended for use in a production environment
- `develop` is the branch to work on for the next release
- If you want to create a pull request, please send it to this branch
## Creating a pull request
- Create an Issue before creating a pull request.
- Please prefix the branch name with a keyword such as `feat` / `fix` / `refactor` / `chore` to identify the pull request as much as possible.
- Also, do not include changes other than to resolve the pull request issue
- If you have an Issue that will be resolved by a pull request, please include a link
- Any changes should be described in `CHANGELOG.md`. However, if there is no change from the user's point of view, there is no need to describe it.
- If possible, please use `flake8`, `mypy`, etc. to lint in your local environment.
Thank you for your cooperation.
## Notes
### About the Format
This project uses `axblack` and `isort` formatting. The difference between `axblack` and `black` is whether double or single quotes are used.
### About supported Misskey versions
- Ayuskey v5, 6
- Misskey v13, 12, 11
### 引数に関する例外について
Misskey側に渡すBodyにおいて、例えば `limit` に渡せる最大数が100だと分かっていても、MiPAC側で特別なことはしないものとする。これはAPIを叩いた際に帰ってくるエラーをより直接的に見れるようにするためです
### 引数のデフォルト値について
少し複雑な話になる為例を出しつつの説明になります。
例として `/api/channels/update` には `isSensitive``bannerId` といったキーを渡すことができます。では `update` メソッドを実際に作ってみましょう。
```python
async def update(
self,
banner_id: str | None = None,
is_sensitive: bool | None = None,
) -> :
...
```
まず、 `is_sensitive``None` が選べてしまうのは何か気持ち悪い所があります。次に`banner_id` は エンドポイント側がnullを許容している為、既に `banner_id` が設定してあった場合、`is_sensitive` のみを更新しようとした場合にnullに設定されてしまいます。また、`request` メソッドが持つ `remove_none=True` でNoneを消すことができますが、これでは `banner_id` を nullにする方法がなくなってしまします。
では、ここで`MISSING` を使って書き直します。
```python
async def update(
self,
banner_id: str | None = MISSING,
is_sensitive: bool = MISSING,
) -> :
data = remove_dict_missing({
"bannerId": banner_id,
"isSensitive": is_sensitive
})
self._session.request(Route("POST", "/api/channels/update"), auth=True, json=data, remove_none=False)
...
```
`is_sensitive` のTypeHintsが `bool` のみにできるので気持ち悪さが解消されます。
また、 `remove_dict_missing` を使用することで `MISSING` のみを削除出来るため、Noneに設定したい場合は `await update(banner_id=None)` とすることで `banner_id` を null に設定できるようになります。注意点として、 `request` メソッドの `remove_none=False` に設定しないと `None` が削除されてしまうため気を付けてください。基本的に `/api/channels/create` のように作成系等では既にサーバー上にあるデータに留意する必要が無いため、`MISSING` ではなく `None` を使用しても問題ないです