silkaj issueshttps://git.duniter.org/clients/python/silkaj/-/issues2024-03-27T21:18:01+01:00https://git.duniter.org/clients/python/silkaj/-/issues/487Move sources in `src` directory2024-03-27T21:18:01+01:00MoulMove sources in `src` directory…as [recommended by Python packaging](https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/).
- [ ] Move `silkaj` directory in `src` directory
- [ ] Add this commit in a `.git-blame-ignore-revs`?…as [recommended by Python packaging](https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/).
- [ ] Move `silkaj` directory in `src` directory
- [ ] Add this commit in a `.git-blame-ignore-revs`?Backloghttps://git.duniter.org/clients/python/silkaj/-/issues/486Website follow-ups2024-03-11T22:39:00+01:00MoulWebsite follow-ups### Advanced content
- [ ] Add new content to documentation: #479+
- [ ] Improve index/readme/first page
- [ ] #277+
- [ ] Set up [`mkdocs-rss-plugin`](https://guts.github.io/mkdocs-rss-plugin/)
- Fix warnings about temporary files gen...### Advanced content
- [ ] Add new content to documentation: #479+
- [ ] Improve index/readme/first page
- [ ] #277+
- [ ] Set up [`mkdocs-rss-plugin`](https://guts.github.io/mkdocs-rss-plugin/)
- Fix warnings about temporary files generated in `/tmp` for coverage and blog
- [ ] Website navigation thinking
- [ ] Automatically generate CLI usage with [`mkdocs-click`](https://github.com/mkdocs/mkdocs-click) (#179+)
- [ ] #468+: automatically generate screenshots
- [ ] Donation page: to Silkaj and Duniter projects
### Set up new domain name
- [ ] Domain name: silkaj.${tld}?
- [ ] Choose domain name, rent it
- [ ] CNAME to pages.duniter.org
- [ ] Adapt Ansible conf
- [ ] Set silkaj.duniter.org redirection to new domain
<!--
- https://en.wikipedia.org/wiki/.ml
- https://en.wikipedia.org/wiki/.lc
.click, .site, .website, .world
-->0.20.0https://git.duniter.org/clients/python/silkaj/-/issues/485Bump copyright to 20252023-12-09T14:01:05+01:00MoulBump copyright to 2025- [ ] Update to 2025:
- [In the header file](https://git.duniter.org/clients/python/silkaj/-/blob/main/CONTRIBUTING.md#update-copyright-year)
- In MkDocs config once #433+ is done
- [ ] Open ticket for 2026 and link it to this one- [ ] Update to 2025:
- [In the header file](https://git.duniter.org/clients/python/silkaj/-/blob/main/CONTRIBUTING.md#update-copyright-year)
- In MkDocs config once #433+ is done
- [ ] Open ticket for 2026 and link it to this one0.20.02024-12-10https://git.duniter.org/clients/python/silkaj/-/issues/482Add support for Python v3.132023-11-20T14:27:16+01:00MoulAdd support for Python v3.13### Python pre-releases
- [ ] Set up v3.13 test job
- [ ] With `allow_failure: true`, to allow tests to fail
### Python stable release
- [ ] Remove `allow_failure: true`, now on the tests should pass
- [ ] Move coverage to v3.13 job
-...### Python pre-releases
- [ ] Set up v3.13 test job
- [ ] With `allow_failure: true`, to allow tests to fail
### Python stable release
- [ ] Remove `allow_failure: true`, now on the tests should pass
- [ ] Move coverage to v3.13 job
- [ ] Set default container used by jobs to v3.13
- [ ] Handle deprecation warning and breaking features
- [ ] Switch Silkaj image build to v3.13
### Post
- [ ] Open follow-up v3.14 tickets
### References
- Expected to be release the [October 1st 2024](https://peps.python.org/pep-0719/).
- docker/python3/poetry#10+
- clients/python/duniterpy#208+0.20.02024-10-01https://git.duniter.org/clients/python/silkaj/-/issues/479Document Silkaj usage2024-03-11T22:36:40+01:00MoulDocument Silkaj usage- [ ] Installation
- [ ] CLI basics: group of commands, general and command specific options
- [ ] Authentication: already in `account_storage`, move it somewhere else?
- [x] #477+
- [ ] `wot` commands:
- [ ] `lookup`
- [ ] `status`
...- [ ] Installation
- [ ] CLI basics: group of commands, general and command specific options
- [ ] Authentication: already in `account_storage`, move it somewhere else?
- [x] #477+
- [ ] `wot` commands:
- [ ] `lookup`
- [ ] `status`
- [ ] `certify`
- [ ] `membership`
- [ ] `revocation`
- [ ] `money` commands:
- [ ] `transfer`
- [ ] transfer to multiple recipients
- [ ] transfer with recipients from a file
- [ ] `balance`
- [ ] `history`
- [ ] `license`
- [ ] `blockchain` commands:
- [ ] `info`
- [ ] `blocks`
- [ ] How to
- [ ] How to create a wallet
- [ ] How to become member
- [ ] FAQ
To be put later on the website #433+0.20.0https://git.duniter.org/clients/python/silkaj/-/issues/478Implement authentication on money history command2023-08-16T21:12:04+02:00MoulImplement authentication on money history commandConvenient with account authentication.
- Can be done together with #350 refactoring
- [ ] Implement authentication on `money history` command
- [ ] Write tests
- [ ] Document usage also for `balance` commandConvenient with account authentication.
- Can be done together with #350 refactoring
- [ ] Implement authentication on `money history` command
- [ ] Write tests
- [ ] Document usage also for `balance` commandBackloghttps://git.duniter.org/clients/python/silkaj/-/issues/477Account storage support: authentication, revocation2024-02-29T08:56:19+01:00MoulAccount storage support: authentication, revocation- https://askubuntu.com/a/14536
- Storage per currency, per account name
- `$XDG_DATA_HOME`|`$HOME/.local/share/silkaj/${currency}`
- `${account_name}`: defined by the user, passed via general/specific option `-a/--account`
- `revo...- https://askubuntu.com/a/14536
- Storage per currency, per account name
- `$XDG_DATA_HOME`|`$HOME/.local/share/silkaj/${currency}`
- `${account_name}`: defined by the user, passed via general/specific option `-a/--account`
- `revocation.txt`
- `authentication_file_${format}.json`: Silkaj would discover which format is it, v1 formats will be dropped at some point
## Implementation
### Account storage
* [x] Introduce global `-a/--account` option
* [x] Storage class into `silkaj/storage.py` with tests `tests/units/test_storage.py`
### Authentication
Read from `--auth-*` method, store into account storage:
```plaintext
silkaj --account <account> authentication --auth-*
```
Need special handling of `--auth-*` and `--account` options separately in the authentication selection handling for the `authentication` command. Other commands using the authentication should read only from `--account`. The `authentication` command is kind of a converter command from `--auth-*` methods to account storage.
Use `authentication` command as an importer from scattered files to this account storage structure
* [x] Move `--auth-*` options as `authentication` specific options?
- Con: Would no longer allow easy authentication on other commands
- Pro: Would force more secure account storage usage, conversion
* [x] Set authentication methods as `MutuallyExclusive`
* [x] Implementation in `authentication` command to store in the account storage
* [x] Support a better default authentication file format creation in the storage than `seedhex`?
* [x] Implement [(E)WIF](https://git.duniter.org/documents/rfcs/-/blob/master/rfc/0013_Duniter_Encrypted_Wallet_Import_Format.md) authfile saving #173
* [ ] Discover which authfile format it is: v1 (seedhex, pubsec), v2 (encrypted json)
- `authentication_file_ed25519.txt`, `authentication_file_sr25519.json`
* [ ] Write tests
### Revocation
```plaintext
# read auth file, write revocation file
silkaj --account <account> wot revocation create
# read revocation file
silkaj --account <account> wot revocation {verify,publish}
```
* [x] `create` read authfile from `--account` and write revocation file into `--account`
* [x] `verify`/`publish`: consume file from general `--account` option
* [ ] Write tests
### Importer command?
- `account import`
- import already generated auth and revocation files to an account?
### New Account label
- [x] replace `Storage` label
### Documentation
- [x] Write documentation how this works (input as general option, output as command-specific option)
- [x] Update `README.md§Features` with `Account (storage)` and `Authentication methods`.
### `account` commands
- `account list` command
```py
def list(self):
for root, dirnames, filenames in self.path.parent.walk():
print(root, dirnames, filenames)
```
- list available accounts per currencies: there contents, auth file, revocation file
- following implementations can all be done with Unix commands. To be done in a follow-up ticket?
- instead of a copy to the right place?
- `account remove $account`: remove complete account, remove only authentication or revocation file?
- `account rename $old_name $new_name`0.12.0MoulMoulhttps://git.duniter.org/clients/python/silkaj/-/issues/471Rename transfer’s comment to reference2023-06-30T16:20:34+02:00MoulRename transfer’s comment to referenceBanks are using this term: _Payment reference_.
This is more what we are aiming for.
- [ ] Rename CLI option: `silkaj money transfer -c/--comment` −> `-ref/--reference`. `-r` is already used by `--recipient`
- [ ] Rename UI fields of `t...Banks are using this term: _Payment reference_.
This is more what we are aiming for.
- [ ] Rename CLI option: `silkaj money transfer -c/--comment` −> `-ref/--reference`. `-r` is already used by `--recipient`
- [ ] Rename UI fields of `transfer` and `history` commands
- [ ] Adapt run time code and tests. Keep it named `comment` when using DuniterPy document, that’s the interface we won’t change.Backloghttps://git.duniter.org/clients/python/silkaj/-/issues/468rich-codex: Automate terminal screenshot for doc2024-03-11T22:36:41+01:00Moulrich-codex: Automate terminal screenshot for doc- https://github.com/ewels/rich-codex
- https://ewels.github.io/rich-codex/- https://github.com/ewels/rich-codex
- https://ewels.github.io/rich-codex/Backloghttps://git.duniter.org/clients/python/silkaj/-/issues/467Consider trogon: turn Click CLI app into a powerful terminal app2023-06-04T19:45:25+02:00MoulConsider trogon: turn Click CLI app into a powerful terminal app- https://github.com/Textualize/trogon- https://github.com/Textualize/trogonBackloghttps://git.duniter.org/clients/python/silkaj/-/issues/464Drop Python v3.8 support2023-09-22T16:15:29+02:00MoulDrop Python v3.8 support### Date when Python project won’t support v3.8
- [Python 3.8 support will be dropped in October 14th of 2024](https://devguide.python.org/versions/) [[1](https://endoflife.date/python)]
- [Platform which still uses Py3.8](https://repolo...### Date when Python project won’t support v3.8
- [Python 3.8 support will be dropped in October 14th of 2024](https://devguide.python.org/versions/) [[1](https://endoflife.date/python)]
- [Platform which still uses Py3.8](https://repology.org/badge/vertical-allrepos/python.svg)
## Todos
### DuniterPy
- [ ] Create DuniterPy follow-up? duniterpy#193+
### Silkaj
- [ ] `pyproject.toml`: Bump minimum versions:
- [ ] `tools.poetry.dependency.python`
- [ ] `tools.ruff.target-version`
- [ ] Delete test job for v3.8 from `.gitlab-ci.yml`
### Container
- [ ] Remove v3.8 Docker image generation. Can be removed when no Silkaj or DuniterPy maintenance releases support are stopped
---
- [ ] Create ticket for dropping Python 3.9 supportBacklog2024-10-14https://git.duniter.org/clients/python/silkaj/-/issues/463Consider Ward test framework2023-04-10T14:50:27+02:00MoulConsider Ward test framework- https://github.com/darrenburns/ward
- https://ward.readthedocs.io/en/latest/- https://github.com/darrenburns/ward
- https://ward.readthedocs.io/en/latest/Backloghttps://git.duniter.org/clients/python/silkaj/-/issues/462DeathReaper enhancements2023-11-13T15:06:54+01:00MoulDeathReaper enhancements### Display job link in the message
- [ ] New `--{job,pipeline}-link` Silkaj option to pass the link to the job which generated the message.
- [ ] [Predefined variables reference](https://docs.gitlab.com/ee/ci/variables/predefined_vari...### Display job link in the message
- [ ] New `--{job,pipeline}-link` Silkaj option to pass the link to the job which generated the message.
- [ ] [Predefined variables reference](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html): `CI_JOB_URL`, `CI_PIPELINE_URL`
- [ ] DeathReaper CI: pass `CI_JOB_URL` [GitLab predefined variable](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html)
`Generated [from job](link).`
### Report number of exclusions in the report
- [ ] as a header: `Number of exclusions since $T: $X`
### Ability to pass Discourse forums URLs as an option
- Great pre-requisite for #446+
- With multiple-values: `@click.option(multiple=True)`
- [ ] `--discourse-forums-urls/-dfu forum.monnaie-libre.fr forum.duniter.org foro.moneda-libre.org` `--api-key ml-fr, duniter, ml-es`
### Tests
- [ ] Add tests, since `excluded` coverage is 38%, and makes the total coverage drop from 81 to 77%Backloghttps://git.duniter.org/clients/python/silkaj/-/issues/461Publish Silkaj container to DockerHub2023-03-10T13:48:58+01:00MoulPublish Silkaj container to DockerHubPublish additionally Silkaj container to DockerHub for more visibility.
- [ ] Publish `pip` image
- [ ] Publish readme as Duniter-v2s is doingPublish additionally Silkaj container to DockerHub for more visibility.
- [ ] Publish `pip` image
- [ ] Publish readme as Duniter-v2s is doingBackloghttps://git.duniter.org/clients/python/silkaj/-/issues/460Harden Ruff rules2023-02-18T18:06:11+01:00MoulHarden Ruff rules#### Rules to introduce
- "C90", "N", "ANN", "EM", "T20", "TCH", "ARG"
```toml
[tool.ruff.mccabe]
# Unlike Flake8, default to a complexity level of 10.
max-complexity = 8
```#### Rules to introduce
- "C90", "N", "ANN", "EM", "T20", "TCH", "ARG"
```toml
[tool.ruff.mccabe]
# Unlike Flake8, default to a complexity level of 10.
max-complexity = 8
```Backloghttps://git.duniter.org/clients/python/silkaj/-/issues/455Update Debian package for Trixie (v13)2023-05-30T16:36:33+02:00MoulUpdate Debian package for Trixie (v13)## Bullseye release policy
- [Must be published before 12th of January 2025 to be in Debian Trixie](https://wiki.debian.org/DebianTrixie)
- [Trixie Freeze policy](https://release.debian.org/trixie/freeze_policy.html)
## Todos
The most i...## Bullseye release policy
- [Must be published before 12th of January 2025 to be in Debian Trixie](https://wiki.debian.org/DebianTrixie)
- [Trixie Freeze policy](https://release.debian.org/trixie/freeze_policy.html)
## Todos
The most important thing to do is `py-substrate-interface` packaging. For release %"0.20.0"
### Dependencies
- [ ] [`py-substrate-interface`](https://github.com/polkascan/py-substrate-interface) targeting %"0.20.0".
- Missing `xxhash`, `eth-keys`, `eth_utils`, `scalecodec`, `py-sr25519-bindings`, `py-ed25519-bindings`, `py-bip39-bindings`
- [ ] #440+?
- [ ] ~~#221: Ğ1 monetary license packaging~~
- ~~[`graphql-core`](https://repology.org/badge/vertical-allrepos/python:graphql-core.svg) [PyPI](https://pypi.org/project/graphql-core/): will be required when switching to GVA API usage (not happening)~~
### Codebases
- [ ] Update Silkaj codebase to latest available release
- [ ] Update DuniterPy codebase to latest available release?
## Later
- [ ] #256: package [`pydiscourse`](https://github.com/bennylope/pydiscourse) for DeathReaper, kept in a separated branch, and distributed via a Docker image for nowBackloghttps://git.duniter.org/clients/python/silkaj/-/issues/452Add Windows pipx installation2022-10-31T18:12:56+01:00MoulAdd Windows pipx installationOnce #437 is solved, add following documentation, documenting how to install Silkaj with `pipx`:
- [Get latest Python version](https://www.python.org/downloads/release/python-3110/)
- Install `pipx`
- Install Silkaj with `pipx`Once #437 is solved, add following documentation, documenting how to install Silkaj with `pipx`:
- [Get latest Python version](https://www.python.org/downloads/release/python-3110/)
- Install `pipx`
- Install Silkaj with `pipx`Backloghttps://git.duniter.org/clients/python/silkaj/-/issues/446Publish on Spanish forum2023-11-13T15:06:54+01:00MoulPublish on Spanish forum- [ ] Setup DeathReaper account on https://foro.moneda-libre.org/
- [ ] Ask to make it administrator
- [ ] Generate token
- [ ] Implement Spanish forum handling in `excluded` command
- [ ] Spanish(/English) translation of the output
- [ ...- [ ] Setup DeathReaper account on https://foro.moneda-libre.org/
- [ ] Ask to make it administrator
- [ ] Generate token
- [ ] Implement Spanish forum handling in `excluded` command
- [ ] Spanish(/English) translation of the output
- [ ] DeathReaper repo: Setup Spanish Forum credentials for DeathReaper in CI/CD variables.
---
Priority to be considered regarding Substrate migration.
With Substrate, a better system could be setup. An web based email registration system, which would be listening to the blockchain/RPC or the Indexer and then send email. This would be a more efficient system, since now new G1 members do not necessarily have forums accounts.Backloghttps://git.duniter.org/clients/python/silkaj/-/issues/440Set console interface with Textual console/TUI framework2024-01-17T15:02:33+01:00MoulSet console interface with Textual console/TUI framework- Maintain both CLI and Console interfaces using same backend
## Prerequisites
- Read documentation, tutorials, get familiar with the framework, try PoC
## Implementation
- [ ] Install `textual` and [`textual-dev`](https://github.com/...- Maintain both CLI and Console interfaces using same backend
## Prerequisites
- Read documentation, tutorials, get familiar with the framework, try PoC
## Implementation
- [ ] Install `textual` and [`textual-dev`](https://github.com/Textualize/textual-dev)
- [ ] Find a way to have substrate client passed for the CLI and Console interfaces
- [ ] Sketch the views
- [ ] Implement the interfaces
- [ ] Write tests
### Design views of the interface
- https://excalidraw.com/ ([YunoHost package of excalidraw](https://github.com/YunoHost-Apps/excalidraw_ynh))
### Testing
- [Testing How-to](https://textual.textualize.io/guide/testing/)
- [pytest-asyncio](https://pypi.org/project/pytest-asyncio/)
- [pytest-textual-snapshot](https://github.com/Textualize/pytest-textual-snapshot)
## Launcher
- [ ] Create launcher, like for Vim, Neovim, Emacs, Ranger, so it can be started from GNOME Shell for instance
## Later
- Ploting: https://github.com/Textualize/textual-plotext
---
### About Textual
- [Repository](https://github.com/Textualize/textual)
- [Website](https://textual.textualize.io/)
- [Repology](https://repology.org/badge/vertical-allrepos/python:textual.svg)
- [Textual: The Definitive Guide](https://dev.to/wiseai/textual-the-definitive-guide-part-1-1i0p)
- [CSS in the Terminal with Python and Textual](https://www.willmcgugan.com/blog/tech/post/css-in-the-terminal-with-python-and-textual/)
- [Crash course on Fedora Magazine](https://fedoramagazine.org/crash-course-on-using-textual/)
### Videos
- [A Look At – and Inside – Textual](https://www.youtube.com/watch?v=1kTWxamIJ_k)
- [Terminal magic with Rich and Textual - Talk Python Live Stream](https://www.youtube.com/watch?v=laWyjfzur28)
- [CSS within the terminal with Python and Textual](https://www.youtube.com/watch?v=bXgIj2cXaZ4)
- [Will McGugan](https://www.youtube.com/c/WillMcGugan/videos)0.20.0https://git.duniter.org/clients/python/silkaj/-/issues/439Consider Typer CLI framework2023-06-23T19:09:05+02:00MoulConsider Typer CLI frameworkTyper is based on Click:
- [Typer — Probably The Simplest To Use Python Command-Line Interface Library](https://towardsdatascience.com/typer-probably-the-simplest-to-use-python-command-line-interface-library-17abf1a5fd3e)
- https://pypi....Typer is based on Click:
- [Typer — Probably The Simplest To Use Python Command-Line Interface Library](https://towardsdatascience.com/typer-probably-the-simplest-to-use-python-command-line-interface-library-17abf1a5fd3e)
- https://pypi.org/project/typer/
- https://github.com/tiangolo/typer
- https://typer.tiangolo.com/
- [Repology](https://repology.org/badge/vertical-allrepos/python:typer.svg)Backlog