diff --git a/jaklis.py b/jaklis.py index ac03340..68c20ec 100755 --- a/jaklis.py +++ b/jaklis.py @@ -62,6 +62,7 @@ commands = { ("j", "json"): {"action": "store_true", "help": "Output in JSON format"}, ("o", "outbox"): {"action": "store_true", "help": "Read sent messages"}, }, + "type": "cesium", }, "send": { "help": "Send a message", @@ -78,6 +79,7 @@ commands = { "help": "Send the message to the outbox", }, }, + "type": "cesium", }, "delete": { "help": "Delete a message", @@ -93,6 +95,7 @@ commands = { "help": "Delete a sent message", }, }, + "type": "cesium", }, "get": { "help": "View a Cesium+ profile", @@ -103,6 +106,7 @@ commands = { "help": "Also retrieve the avatar in raw base64 format", }, }, + "type": "cesium", }, "page": { "help": "View a Cesium+ page", @@ -113,6 +117,7 @@ commands = { "help": "Also retrieve the page's avatar in raw base64 format", }, }, + "type": "cesium", }, "set": { "help": "Configure your Cesium+ profile", @@ -128,26 +133,34 @@ commands = { ("s", "site"): {"help": "Profile website"}, ("A", "avatar"): {"help": "Path to profile avatar in PNG"}, }, + "type": "cesium", + }, + "erase": { + "help": "Erase your Cesium+ profile", + "arguments": {}, + "type": "cesium", }, - "erase": {"help": "Erase your Cesium+ profile", "arguments": {}}, "stars": { "help": "View a profile's stars / Rate a profile (option -s RATING)", "arguments": { ("p", "profile"): {"help": "Target profile"}, ("n", "number"): {"type": int, "help": "Number of stars"}, }, + "type": "cesium", }, "unstars": { "help": "Remove a star", "arguments": { ("p", "profile"): {"help": "Profile to unstar"}, }, + "type": "cesium", }, "getoffer": { "help": "Get information about a Ḡchange listing", "arguments": { ("i", "id"): {"help": "Target listing to retrieve"}, }, + "type": "cesium", }, "setoffer": { "help": "Create a Ḡchange listing", @@ -163,12 +176,19 @@ commands = { ("ci", "city"): {"help": "City of the listing to create"}, ("pr", "price"): {"help": "Price of the listing to create"}, }, + "type": "cesium", }, "deleteoffer": { "help": "Delete a Ḡchange listing", "arguments": { ("i", "id"): {"help": "Target listing to delete"}, }, + "type": "cesium", + }, + "geolocProfiles": { + "help": "Get JSON of all geolocated accounts", + "arguments": {}, + "type": "cesium", }, "pay": { "help": "Pay in Ḡ1", @@ -189,6 +209,7 @@ commands = { "help": "Display the JSON result of the transaction", }, }, + "type": "gva", }, "history": { "help": "View Ḡ1 account transaction history", @@ -208,6 +229,7 @@ commands = { "help": "Display the result in black and white", }, }, + "type": "gva", }, "balance": { "help": "View Ḡ1 account balance", @@ -218,6 +240,7 @@ commands = { "help": "Use mempool sources", }, }, + "type": "gva", }, "id": { "help": "View public key/username identity", @@ -225,43 +248,44 @@ commands = { ("p", "pubkey"): {"help": "Public key of the target account"}, ("u", "username"): {"help": "Username of the target account"}, }, + "type": "gva", }, "idBalance": { "help": "View public key/username identity and balance", "arguments": { ("p", "pubkey"): {"help": "Public key of the target account"}, }, + "type": "gva", }, "currentUd": { "help": "Display the current Universal Dividend amount", "arguments": { ("p", "pubkey"): {"help": "Public key of the target account"}, }, + "type": "gva", }, "listWallets": { "help": "List all G1 wallets", "arguments": { - ("b", "balance"): {"action": "store_true", "help": "Display balances"}, - ("mbr"): { + ("m", "mbr"): { "action": "store_true", "help": "Display raw list of member pubkeys", }, - ("non_mbr"): { + ("nm", "non_mbr"): { "action": "store_true", "help": "Display raw list of nonmember identity pubkeys", }, - ("larf"): { + ("l", "larf"): { "action": "store_true", "help": "Display raw list of nonmember pubkeys", }, - ("brut"): { + ("b", "brut"): { "action": "store_true", "help": "Display raw list of all pubkeys", }, - ("p", "pubkey"): {"help": "Useless but needed"}, }, + "type": "gva", }, - "geolocProfiles": {"help": "Get JSON of all geolocated accounts", "arguments": {}}, } # Process commands and arguments @@ -276,8 +300,8 @@ for cmd, cmd_info in commands.items(): cmd_parser.add_argument("-" + short_arg, "--" + long_arg, **kwargs) args = parser.parse_args() +args_dict = vars(args) cmd = args.cmd - if args.version: print(__version__) sys.exit(0) @@ -336,6 +360,7 @@ noNeedDunikey = cmd in ( "id", "idBalance", "listWallets", + "geolocProfiles", ) and (pubkey or profile) if noNeedDunikey: @@ -347,9 +372,14 @@ keyPath = False if dunikey else createTmpDunikey() def handle_cesium_commands(args, cmd, cesium): + # Get args of the command + cmd_args = list(zip(*list(commands[cmd]["arguments"].keys())))[1] + cmd_args_dict = {arg: args_dict[arg] for arg in cmd_args if arg in args_dict} + cmd_args_values = list(cmd_args_dict.values()) + # Messaging if cmd == "read": - cesium.read(args.number, args.outbox, args.json) + cesium.read(*cmd_args_values) elif cmd == "send": if args.fichier: with open(args.fichier, "r") as f: @@ -373,19 +403,11 @@ def handle_cesium_commands(args, cmd, cesium): # Profiles elif cmd == "set": - cesium.set( - args.name, - args.description, - args.ville, - args.adresse, - args.position, - args.site, - args.avatar, - ) + cesium.set(**cmd_args_dict) elif cmd == "get": - cesium.get(args.profile, args.avatar) + cesium.get(**cmd_args_dict) elif cmd == "page": - cesium.getPage(args.page, args.avatar) + cesium.getPage(**cmd_args_dict) elif cmd == "erase": cesium.erase() elif cmd == "geolocProfiles": @@ -404,22 +426,19 @@ def handle_cesium_commands(args, cmd, cesium): elif cmd == "getoffer": cesium.getOffer(args.id) elif cmd == "setoffer": - cesium.setOffer( - args.title, - args.description, - args.city, - args.localisation, - args.category, - args.price, - args.picture, - ) + cesium.setOffer(**cmd_args_dict) elif cmd == "deleteoffer": - cesium.deleteOffer(args.id) + cesium.deleteOffer(**cmd_args_dict) else: raise ValueError(f"Unknown command: {cmd}") def handle_gva_commands(args, cmd, gva): + # Get args of the command + cmd_args = list(zip(*list(commands[cmd]["arguments"].keys())))[1] + cmd_args_dict = {arg: args_dict[arg] for arg in cmd_args if arg in args_dict} + # cmd_args_values = list(cmd_args_dict.values()) + if cmd == "pay": gva.pay(args.amount, args.comment, args.mempool, args.verbose) elif cmd == "history": @@ -427,9 +446,9 @@ def handle_gva_commands(args, cmd, gva): elif cmd == "balance": gva.balance(args.mempool) elif cmd == "id": - gva.id(args.pubkey, args.username) + gva.id(**cmd_args_dict) elif cmd == "idBalance": - gva.idBalance(args.pubkey) + gva.idBalance(**cmd_args_dict) elif cmd == "currentUd": gva.currentUd() elif cmd == "listWallets": @@ -439,21 +458,7 @@ def handle_gva_commands(args, cmd, gva): # Construct the CesiumPlus object -if cmd in ( - "read", - "send", - "delete", - "set", - "get", - "page", - "erase", - "stars", - "unstars", - "getoffer", - "setoffer", - "deleteoffer", - "geolocProfiles", -): +if commands[cmd]["type"] == "cesium": if args.node: pod = args.node @@ -461,19 +466,11 @@ if cmd in ( handle_cesium_commands(args, cmd, cesium) # Construct the GvaApi object -elif cmd in ( - "pay", - "history", - "balance", - "id", - "idBalance", - "currentUd", - "listWallets", -): +elif commands[cmd]["type"] == "gva": if args.node: node = args.node - if args.pubkey: + if hasattr(args, "pubkey"): destPubkey = args.pubkey gva = GvaApi(dunikey, node, destPubkey, noNeedDunikey) diff --git a/lib/cesium.py b/lib/cesium.py index 0534b9b..0342fe8 100755 --- a/lib/cesium.py +++ b/lib/cesium.py @@ -12,7 +12,7 @@ from lib.offers import Offers class CesiumPlus(CesiumCommon): #################### Messaging #################### - def read(self, nbrMsg, outbox, isJSON): + def read(self, nbrMsg, isJSON, outbox): readCesium = ReadFromCesium(self.dunikey, self.pod) jsonMsg = readCesium.sendDocument(nbrMsg, outbox) if isJSON: @@ -139,14 +139,14 @@ class CesiumPlus(CesiumCommon): title=None, description=None, city=None, - localisation=None, + location=None, category=None, price=None, picture=None, ): setOffer = Offers(self.dunikey, self.pod) document = setOffer.configDocSet( - title, description, city, localisation, category, price, picture + title, description, city, location, category, price, picture ) result = setOffer.sendDocumentSet(document, "set") diff --git a/lib/offers.py b/lib/offers.py index ce406df..901102d 100755 --- a/lib/offers.py +++ b/lib/offers.py @@ -4,7 +4,7 @@ from lib.cesiumCommon import CesiumCommon, PUBKEY_REGEX class Offers(CesiumCommon): # Configure JSON document SET to send - def configDocSet(self, title, description, city, localisation, category, price: float, picture): + def configDocSet(self, title, description, city, location, category, price: float, picture): timeSent = int(time()) # {"parent":"cat90","localizedNames":{"en":"Fruits & Vegetables","es-ES":"Frutas y Vegetales","fr-FR":"Fruits & Légumes"},"name":"Fruits & Légumes","id":"cat92"} @@ -13,10 +13,10 @@ class Offers(CesiumCommon): if title: data['title'] = title if description: data['description'] = description if city: data['city'] = city - if localisation: + if location: geoPoint = {} - geoPoint['lat'] = localisation[0] - geoPoint['lon'] = localisation[1] + geoPoint['lat'] = location[0] + geoPoint['lon'] = location[1] data['geoPoint'] = geoPoint if picture: picture = open(picture, 'rb').read()