From 169a610e9118a6f6dd3452beba4695f0b6f5efe1 Mon Sep 17 00:00:00 2001 From: MiranDaniel Date: Mon, 14 Jun 2021 21:07:41 +0200 Subject: [PATCH] Added custom exceptions, fixed formatting --- pnrw/__init__.py | 1 + pnrw/exceptions.py | 10 ++++++++++ pnrw/pnrwf.py | 48 ++++++++++++++++++++++++++++++++++++++-------- setup.py | 2 +- 4 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 pnrw/exceptions.py diff --git a/pnrw/__init__.py b/pnrw/__init__.py index 7809e37..da4cedc 100644 --- a/pnrw/__init__.py +++ b/pnrw/__init__.py @@ -1,2 +1,3 @@ from .pnrwf import Node as N +from . import exceptions Node = N \ No newline at end of file diff --git a/pnrw/exceptions.py b/pnrw/exceptions.py new file mode 100644 index 0000000..e7f6db0 --- /dev/null +++ b/pnrw/exceptions.py @@ -0,0 +1,10 @@ + +class AddressInvalid(Exception): + def __init__(self, address, message="This address is not valid."): + self.message = message + super().__init__(self.message) + +class BlockInvalid(Exception): + def __init__(self, address, message="This block is not valid, are you sure you are sending the right variable?"): + self.message = message + super().__init__(self.message) diff --git a/pnrw/pnrwf.py b/pnrw/pnrwf.py index 8cb078e..435e2e5 100644 --- a/pnrw/pnrwf.py +++ b/pnrw/pnrwf.py @@ -1,4 +1,5 @@ """ + Copyright (C) 2021 MiranDaniel This program is free software: you can redistribute it and/or modify @@ -13,10 +14,13 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . + """ import requests import json +from .exceptions import * + def _validate_ip(s): a = s.split('.') @@ -31,6 +35,24 @@ def _validate_ip(s): return False return True + +def _validate_address(s): + if s.startswith("nano_") == False and s.startswith("ban_") == False: + raise AddressInvalid(s) + else: + if s.startswith("nano_"): + if len(s) != 65: + raise AddressInvalid(s) + elif s.startswith("ban_"): + if len(s) != 64: + raise AddressInvalid(s) + + +def _validate_block(s): + if len(s) != 64: + raise BlockInvalid(s) + + class Node: def __init__(self, ip, port=7076, dontUseHTTPS=False, headers="Default"): self.ip = ip @@ -40,13 +62,20 @@ def __init__(self, ip, port=7076, dontUseHTTPS=False, headers="Default"): self.target = f"http{self.secure}://{self.ip}:{self.port}" else: self.target = f"http{self.secure}://{self.ip}" - if headers != "Default": - self.headers = {'Content-type': 'application/json', 'Accept': '*/*',"Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive"} + if headers == "Default": + self.headers = {'Content-type': 'application/json', 'Accept': '*/*', + "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive"} else: self.headers = headers def _request(self, data): - response = requests.post(self.target, data=json.dumps(data), headers=self.headers).text + if "account" in data: + _validate_address(data["account"]) + if "block" in data: + _validate_block(data["block"]) + + response = requests.post(self.target, data=json.dumps( + data), headers=self.headers).text return json.loads(response) def account_balance(self, account): @@ -310,7 +339,7 @@ def delegators_count(self, account): def deterministic_key(self, seed, index): response = self._request( - {"action": "deterministic_key", "seed":seed,"index":index}) + {"action": "deterministic_key", "seed": seed, "index": index}) return response def epoch_upgrade(self, epoch, key): @@ -322,8 +351,9 @@ def frontier_count(self): response = self._request({"action": "frontier_count"}) return int(response["count"]) - def frontiers(self,account,count): - response = self._request({"action": "frontiers","account":account,"count":count}) + def frontiers(self, account, count): + response = self._request( + {"action": "frontiers", "account": account, "count": count}) return response["frontiers"] def keepalive(self, address, port): @@ -340,7 +370,8 @@ def key_expand(self, key): return response def ledger(self, account, count): - response = self._request({"action": "ledger", "account":account,"count":count}) + response = self._request( + {"action": "ledger", "account": account, "count": count}) ret = {} for i in response["accounts"]: ret[i] = { @@ -378,7 +409,8 @@ def pending_exists(self, Hash): return int(response["exists"]) def process(self, json_block, subtype, block): - response = self._request({"action": "process", "json_block":json_block,"subtype":subtype, "block":block}) + response = self._request( + {"action": "process", "json_block": json_block, "subtype": subtype, "block": block}) return response["hash"] def representatives(self): diff --git a/setup.py b/setup.py index 5ff7fff..c46c542 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name='pnrw', - version='0.1.1', + version='0.1.2', description='Python Nanocurrency RPC Wrapper', long_description=long_description, long_description_content_type="text/markdown",