Ideas for More Options

This commit is contained in:
fred 2024-06-08 02:34:40 +02:00
parent 277b50bc7e
commit d2af38a94c
1 changed files with 358 additions and 0 deletions

358
tools/jaklis/MORE.md Normal file
View File

@ -0,0 +1,358 @@
Ensemble de scripts Python pour un client CLI (Command Line Interface) appelé "Jaklis" qui interagit avec les services Cesium+ et Ğchange, ainsi qu'avec le réseau Duniter pour la monnaie libre Ğ1. Voici une analyse détaillée de ce code :
## Structure Générale
Le code est organisé en plusieurs fichiers Python, chacun ayant une responsabilité spécifique. Voici un aperçu des principaux fichiers et de leurs fonctions :
### 1. `paiements.py`
Ce fichier gère les paiements en Ğ1 via une interface graphique utilisant PySimpleGUI. Il permet de saisir les informations de paiement (destinataire, montant, commentaire) et d'envoyer la transaction.
### 2. `gva.py`
Ce fichier contient la classe `GvaApi` qui fournit des méthodes pour interagir avec le nœud GVA (GraphQL API) de Duniter. Les principales méthodes incluent :
- `pay`: pour effectuer un paiement.
- `history`: pour récupérer l'historique des transactions.
- `balance`: pour obtenir le solde d'un compte.
- `id`: pour obtenir l'identité d'un utilisateur.
- `currentUd`: pour obtenir la valeur actuelle du Dividende Universel (DU).
### 3. `gvaPay.py`
Ce fichier définit la classe `Transaction` qui gère la génération, la vérification, la signature et l'envoi des documents de transaction pour les paiements en Ğ1.
### 4. `gvaHistory.py`
Ce fichier contient la classe `History` qui permet de récupérer et de parser l'historique des transactions d'un compte Ğ1.
### 5. `messaging.py`
Ce fichier gère l'envoi et la réception de messages via Cesium+. Il contient des classes pour lire (`ReadFromCesium`), envoyer (`SendToCesium`), et supprimer (`DeleteFromCesium`) des messages.
### 6. `profiles.py`
Ce fichier gère les profils utilisateurs sur Cesium+. Il contient des méthodes pour configurer (`configDocSet`), obtenir (`configDocGet`), et effacer (`configDocErase`) des profils.
### 7. `currentUd.py`
Ce fichier contient une classe pour récupérer la valeur actuelle du Dividende Universel (DU) via une requête GraphQL.
### 8. `cesiumCommon.py`
Ce fichier contient des fonctions et des classes communes utilisées par d'autres modules, notamment pour la gestion des clés publiques et privées, la signature de documents, et l'envoi de requêtes HTTP.
### 9. `natools.py`
Ce fichier fournit des outils pour la cryptographie, y compris le chiffrement, le déchiffrement, la signature et la vérification de données.
### 10. `jaklis.py`
Ce fichier est le point d'entrée principal du client CLI. Il utilise `argparse` pour parser les arguments de la ligne de commande et appelle les fonctions appropriées en fonction des commandes fournies par l'utilisateur.
## Fonctionnalités Clés
### Paiements en Ğ1
Le script `paiements.py` permet d'effectuer des paiements en Ğ1 via une interface graphique. Il utilise la classe `GvaApi` pour interagir avec le nœud GVA et envoyer des transactions.
### Gestion des Messages
Les scripts dans `messaging.py` permettent de lire, envoyer et supprimer des messages via Cesium+. Les messages sont chiffrés et déchiffrés en utilisant des clés publiques et privées.
### Gestion des Profils
Le script `profiles.py` permet de configurer, obtenir et effacer des profils utilisateurs sur Cesium+. Les profils peuvent inclure des informations telles que le nom, la description, la ville, l'adresse, et des liens vers des réseaux sociaux.
### Historique des Transactions
Le script `gvaHistory.py` permet de récupérer et de parser l'historique des transactions d'un compte Ğ1. Les transactions sont affichées avec des détails tels que la date, le montant, le destinataire, et les commentaires.
### Cryptographie
Le script `natools.py` fournit des outils pour la cryptographie, y compris le chiffrement et le déchiffrement de données, ainsi que la signature et la vérification de documents.
## Conclusion
Le code de Jaklis est un ensemble complet de scripts Python pour interagir avec les services Cesium+ et Ğchange, ainsi qu'avec le réseau Duniter pour la monnaie libre Ğ1. Il offre des fonctionnalités pour les paiements, la gestion des messages et des profils, la récupération de l'historique des transactions, et des outils de cryptographie. Le tout est bien structuré et utilise des bibliothèques telles que `PySimpleGUI`, `requests`, `json`, et `gql` pour faciliter les interactions avec les API et les interfaces utilisateur.
Citations:
[1] https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-files/12445647/f03d4521-c0f7-4af2-a8b2-bf73a9df3280/paste.txt
---
Pour ajouter la possibilité de recherche historique entre deux dates dans le script `gvaHistory.py`, vous devez modifier la méthode `sendDoc` pour accepter des paramètres de date de début et de fin, et ajuster la requête GraphQL en conséquence. Voici les étapes détaillées pour effectuer cette modification :
### 1. Modifier la méthode `sendDoc` pour accepter les dates de début et de fin
Ajoutez les paramètres `start_date` et `end_date` à la méthode `sendDoc` de la classe `History` :
```python
def sendDoc(self, number, start_date=None, end_date=None):
# Build history generation document
queryBuild = gql(
"""
query ($pubkey: PubKeyGva!, $script: PkOrScriptGva!, $number: Int!, $start_date: DateTime, $end_date: DateTime){
txsHistoryBc(
script: $script
pagination: { pageSize: $number, ord: DESC }
filter: { writtenTime: { gte: $start_date, lte: $end_date } }
) {
both {
pageInfo { hasPreviousPage hasNextPage }
edges {
direction
node {
currency issuers outputs comment writtenTime
}
}
}
}
txsHistoryMp(pubkey: $pubkey) {
receiving { currency issuers comment outputs receivedTime }
receiving { currency issuers comment outputs receivedTime }
}
balance(script: $script) { amount base }
node { peer { currency } }
currentUd { amount base }
}
"""
)
paramsBuild = {
"pubkey": self.pubkey,
"number": number,
"script": f"SIG({self.pubkey})",
"start_date": start_date,
"end_date": end_date,
}
# Send history document
try:
self.historyDoc = self.client.execute(queryBuild, variable_values=paramsBuild)
except Exception as e:
message = ast.literal_eval(str(e))["message"]
sys.stderr.write("Echec de récupération de l'historique:\n" + message + "\n")
sys.exit(1)
```
### 2. Adapter l'appel de la méthode `sendDoc` dans la classe `GvaApi`
Modifiez la méthode `history` de la classe `GvaApi` pour accepter les dates de début et de fin et les passer à la méthode `sendDoc` :
```python
def history(self, isJSON=False, noColors=False, number=10, start_date=None, end_date=None):
gva = History(self.dunikey, self.node, self.destPubkey)
gva.sendDoc(number, start_date, end_date)
transList = gva.parseHistory()
if isJSON:
transJson = gva.jsonHistory(transList)
print(transJson)
else:
gva.printHistory(transList, noColors)
```
### 3. Modifier le script principal `jaklis.py` pour accepter les dates de début et de fin en tant qu'arguments
Ajoutez les arguments `--start-date` et `--end-date` à la commande `history` dans le script principal `jaklis.py` :
```python
history_cmd.add_argument('-p', '--pubkey', help="Clé publique du compte visé")
history_cmd.add_argument('-n', '--number', type=int, default=10, help="Affiche les NUMBER dernières transactions")
history_cmd.add_argument('-j', '--json', action='store_true', help="Affiche le résultat en format JSON")
history_cmd.add_argument('--nocolors', action='store_true', help="Affiche le résultat en noir et blanc")
history_cmd.add_argument('--start-date', help="Date de début pour la recherche historique (format ISO 8601)")
history_cmd.add_argument('--end-date', help="Date de fin pour la recherche historique (format ISO 8601)")
```
### 4. Passer les dates de début et de fin aux méthodes appropriées
Modifiez l'appel de la méthode `history` dans le script principal pour inclure les dates de début et de fin :
```python
elif cmd == "history":
gva.history(args.json, args.nocolors, args.number, args.start_date, args.end_date)
```
### Exemple Complet
Voici un exemple complet de la méthode `sendDoc` modifiée dans `gvaHistory.py` :
```python
def sendDoc(self, number, start_date=None, end_date=None):
queryBuild = gql(
"""
query ($pubkey: PubKeyGva!, $script: PkOrScriptGva!, $number: Int!, $start_date: DateTime, $end_date: DateTime){
txsHistoryBc(
script: $script
pagination: { pageSize: $number, ord: DESC }
filter: { writtenTime: { gte: $start_date, lte: $end_date } }
) {
both {
pageInfo { hasPreviousPage hasNextPage }
edges {
direction
node {
currency issuers outputs comment writtenTime
}
}
}
}
txsHistoryMp(pubkey: $pubkey) {
receiving { currency issuers comment outputs receivedTime }
receiving { currency issuers comment outputs receivedTime }
}
balance(script: $script) { amount base }
node { peer { currency } }
currentUd { amount base }
}
"""
)
paramsBuild = {
"pubkey": self.pubkey,
"number": number,
"script": f"SIG({self.pubkey})",
"start_date": start_date,
"end_date": end_date,
}
try:
self.historyDoc = self.client.execute(queryBuild, variable_values=paramsBuild)
except Exception as e:
message = ast.literal_eval(str(e))["message"]
sys.stderr.write("Echec de récupération de l'historique:\n" + message + "\n")
sys.exit(1)
```
En suivant ces étapes, vous pouvez ajouter la fonctionnalité de recherche historique entre deux dates dans votre script `gvaHistory.py`.
Citations:
[1] https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-files/12445647/f03d4521-c0f7-4af2-a8b2-bf73a9df3280/paste.txt
---
Pour ajouter la possibilité de recherche historique entre deux dates dans le script `gvaHistory.py`, vous devez modifier la méthode `sendDoc` pour accepter des paramètres de date de début et de fin, et ajuster la requête GraphQL en conséquence. Voici les étapes détaillées pour effectuer cette modification :
### 1. Modifier la méthode `sendDoc` pour accepter les dates de début et de fin
Ajoutez les paramètres `start_date` et `end_date` à la méthode `sendDoc` de la classe `History` :
```python
def sendDoc(self, number, start_date=None, end_date=None):
# Build history generation document
queryBuild = gql(
"""
query ($pubkey: PubKeyGva!, $script: PkOrScriptGva!, $number: Int!, $start_date: DateTime, $end_date: DateTime){
txsHistoryBc(
script: $script
pagination: { pageSize: $number, ord: DESC }
filter: { writtenTime: { gte: $start_date, lte: $end_date } }
) {
both {
pageInfo { hasPreviousPage hasNextPage }
edges {
direction
node {
currency issuers outputs comment writtenTime
}
}
}
}
txsHistoryMp(pubkey: $pubkey) {
receiving { currency issuers comment outputs receivedTime }
receiving { currency issuers comment outputs receivedTime }
}
balance(script: $script) { amount base }
node { peer { currency } }
currentUd { amount base }
}
"""
)
paramsBuild = {
"pubkey": self.pubkey,
"number": number,
"script": f"SIG({self.pubkey})",
"start_date": start_date,
"end_date": end_date,
}
# Send history document
try:
self.historyDoc = self.client.execute(queryBuild, variable_values=paramsBuild)
except Exception as e:
message = ast.literal_eval(str(e))["message"]
sys.stderr.write("Echec de récupération de l'historique:\n" + message + "\n")
sys.exit(1)
```
### 2. Adapter l'appel de la méthode `sendDoc` dans la classe `GvaApi`
Modifiez la méthode `history` de la classe `GvaApi` pour accepter les dates de début et de fin et les passer à la méthode `sendDoc` :
```python
def history(self, isJSON=False, noColors=False, number=10, start_date=None, end_date=None):
gva = History(self.dunikey, self.node, self.destPubkey)
gva.sendDoc(number, start_date, end_date)
transList = gva.parseHistory()
if isJSON:
transJson = gva.jsonHistory(transList)
print(transJson)
else:
gva.printHistory(transList, noColors)
```
### 3. Modifier le script principal `jaklis.py` pour accepter les dates de début et de fin en tant qu'arguments
Ajoutez les arguments `--start-date` et `--end-date` à la commande `history` dans le script principal `jaklis.py` :
```python
history_cmd.add_argument('-p', '--pubkey', help="Clé publique du compte visé")
history_cmd.add_argument('-n', '--number', type=int, default=10, help="Affiche les NUMBER dernières transactions")
history_cmd.add_argument('-j', '--json', action='store_true', help="Affiche le résultat en format JSON")
history_cmd.add_argument('--nocolors', action='store_true', help="Affiche le résultat en noir et blanc")
history_cmd.add_argument('--start-date', help="Date de début pour la recherche historique (format ISO 8601)")
history_cmd.add_argument('--end-date', help="Date de fin pour la recherche historique (format ISO 8601)")
```
### 4. Passer les dates de début et de fin aux méthodes appropriées
Modifiez l'appel de la méthode `history` dans le script principal pour inclure les dates de début et de fin :
```python
elif cmd == "history":
gva.history(args.json, args.nocolors, args.number, args.start_date, args.end_date)
```
### Exemple Complet
Voici un exemple complet de la méthode `sendDoc` modifiée dans `gvaHistory.py` :
```python
def sendDoc(self, number, start_date=None, end_date=None):
queryBuild = gql(
"""
query ($pubkey: PubKeyGva!, $script: PkOrScriptGva!, $number: Int!, $start_date: DateTime, $end_date: DateTime){
txsHistoryBc(
script: $script
pagination: { pageSize: $number, ord: DESC }
filter: { writtenTime: { gte: $start_date, lte: $end_date } }
) {
both {
pageInfo { hasPreviousPage hasNextPage }
edges {
direction
node {
currency issuers outputs comment writtenTime
}
}
}
}
txsHistoryMp(pubkey: $pubkey) {
receiving { currency issuers comment outputs receivedTime }
receiving { currency issuers comment outputs receivedTime }
}
balance(script: $script) { amount base }
node { peer { currency } }
currentUd { amount base }
}
"""
)
paramsBuild = {
"pubkey": self.pubkey,
"number": number,
"script": f"SIG({self.pubkey})",
"start_date": start_date,
"end_date": end_date,
}
try:
self.historyDoc = self.client.execute(queryBuild, variable_values=paramsBuild)
except Exception as e:
message = ast.literal_eval(str(e))["message"]
sys.stderr.write("Echec de récupération de l'historique:\n" + message + "\n")
sys.exit(1)
```
En suivant ces étapes, vous pouvez ajouter la fonctionnalité de recherche historique entre deux dates dans votre script `gvaHistory.py`.
Citations:
[1] https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-files/12445647/f03d4521-c0f7-4af2-a8b2-bf73a9df3280/paste.txt