def validate_recipient(recipient): if not recipient or \ (not is_email(recipient) and not is_mobile(recipient) and not is_address(recipient)): return False ##TODO: direct wallet address not yet implemented if is_address(recipient): return False return True
def _create_transaction_waves(recipient, amount, attachment): # get fee path = f"/assets/details/{ASSET_ID}" response = requests.get(NODE_BASE_URL + path) if response.ok: asset_fee = response.json()["minSponsoredAssetFee"] else: short_msg = "failed to get asset info" logger.error("%s: (%d, %s, %s):\n\t%s", short_msg, response.status_code, response.request.method, response.url, response.text) err = OtherError(short_msg, tx_utils.ERR_FAILED_TO_GET_ASSET_INFO) err.data = response.text raise err if not recipient: short_msg = "recipient is null or an empty string" logger.error(short_msg) err = OtherError(short_msg, tx_utils.ERR_EMPTY_ADDRESS) raise err if not utils.is_address(recipient): short_msg = "recipient is not a valid address" logger.error(short_msg) err = OtherError(short_msg, tx_utils.ERR_EMPTY_ADDRESS) raise err recipient = pywaves.Address(recipient) asset = pywaves.Asset(ASSET_ID) address_data = PW_ADDRESS.sendAsset(recipient, asset, amount, attachment, feeAsset=asset, txFee=asset_fee) signed_tx = json.loads(address_data["api-data"]) signed_tx["type"] = 4 # sendAsset does not include "type" - https://github.com/PyWaves/PyWaves/issues/131 # calc txid properly txid = tx_utils.tx_to_txid(signed_tx) # store tx in db dbtx = WavesTx(txid, "transfer", tx_utils.CTX_CREATED, signed_tx["amount"], True, json.dumps(signed_tx)) return dbtx
def _create_transaction(recipient, amount, attachment): # get fee path = f"assets/details/{cfg.asset_id}" response = requests.get(cfg.node_http_base_url + path) if response.ok: asset_fee = response.json()["minSponsoredAssetFee"] else: short_msg = "failed to get asset info" logger.error(f"{short_msg}: ({response.status_code}, {response.request.method} {response.url}):\n\t{response.text}") err = OtherError(short_msg, ERR_FAILED_TO_GET_ASSET_INFO) err.data = response.text raise err if not recipient: short_msg = "recipient is null or an empty string" logger.error(short_msg) err = OtherError(short_msg, ERR_EMPTY_ADDRESS) raise err if not utils.is_address(recipient): short_msg = "recipient is not a valid address" logger.error(short_msg) err = OtherError(short_msg, ERR_EMPTY_ADDRESS) raise err recipient = pywaves.Address(recipient) asset = pywaves.Asset(cfg.asset_id) address_data = pw_address.sendAsset(recipient, asset, amount, attachment, feeAsset=asset, txFee=asset_fee) signed_tx = json.loads(address_data["api-data"]) # calc txid properly txid = transfer_asset_txid(signed_tx) # store tx in db dbtx = CreatedTransaction(txid, CTX_CREATED, signed_tx["amount"], address_data["api-data"]) return dbtx
def _add_payment(self, model, recipient, message, amount): email = recipient if is_email(recipient) else None mobile = recipient if is_mobile(recipient) else None address = recipient if is_address(recipient) else None amount = int(amount * 100) payment = Payment(model, mobile, email, address, message, amount) self.session.add(payment)
def _reward_create(user, reason, category, recipient, amount, message): proposal = Proposal(user, reason) proposal.categories.append(category) proposal.authorize(user) db.session.add(proposal) email = recipient if utils.is_email(recipient) else None mobile = recipient if utils.is_mobile(recipient) else None address = recipient if utils.is_address(recipient) else None payment = Payment(proposal, mobile, email, address, message, amount) db.session.add(payment) return proposal, payment
def audit(osmfile): """Audits osmfile for address and key type info""" osm_file = open(osmfile, "r") for event, elem in ET.iterparse(osm_file, events=("start", )): if elem.tag == "node" or elem.tag == "way": for tag in elem.iter("tag"): # tag: k="address" if is_address(tag): audit_address(tag.attrib['v']) # tag: k="addr:street" elif is_street(tag): audit_suffix(tag.attrib['v']) # enumerate tag keys if tag.attrib['k']: if tag.attrib['k'] in key_set.keys(): key_set[tag.attrib['k']] += 1 else: key_set[tag.attrib['k']] = 1 osm_file.close()
def audit(osmfile): """Audits osmfile for address and key type info""" osm_file = open(osmfile, "r") for event, elem in ET.iterparse(osm_file, events=("start",)): if elem.tag == "node" or elem.tag == "way": for tag in elem.iter("tag"): # tag: k="address" if is_address(tag): audit_address(tag.attrib['v']) # tag: k="addr:street" elif is_street(tag): audit_suffix(tag.attrib['v']) # enumerate tag keys if tag.attrib['k']: if tag.attrib['k'] in key_set.keys(): key_set[tag.attrib['k']] += 1 else: key_set[tag.attrib['k']] = 1 osm_file.close()
def parse_element(element): """Parses elem from iterparse, cleans address, returns dict""" node = {} if element.tag == "node" or element.tag == "way": data = dict() # Parse data branching on elem.tag for elem in element.iter(): if 'k' in elem.attrib: if re.match(problemchars, elem.attrib['k']): print 'Skipping element: ', elem continue if elem.tag == 'node': data['id'] = elem.attrib['id'] data['type'] = elem.tag if 'visible' in elem.attrib: data['visible'] = elem.attrib['visible'] data['pos'] = [ float(elem.attrib['lat']), float(elem.attrib['lon']) ] data['created'] = {} data['created']['version'] = elem.attrib['version'] data['created']['changeset'] = elem.attrib['changeset'] data['created']['timestamp'] = elem.attrib['timestamp'] data['created']['user'] = elem.attrib['user'] data['created']['uid'] = elem.attrib['uid'] elif elem.tag == 'way': data['id'] = elem.attrib['id'] data['type'] = elem.tag if 'visible' in elem.attrib: data['visible'] = elem.attrib['visible'] elif elem.tag == 'tag': if re.match(problemchars, elem.attrib['k']): print 'Skipping tag: ', elem.attrib['k'] continue if is_address(elem): data['address'] = clean_address(elem.attrib['v']) if is_street(elem): if 'address' not in data: data['address'] = {} data['address']['street'] = update_street_suffix( elem.attrib['v']) elem_key = elem.attrib['k'].split(':') if elem_key[0] == 'addr' or elem_key[0] == 'address': continue # already parsed address else: data[':'.join(elem_key)] = elem.attrib['v'] elif elem.tag == 'nd': if 'node_refs' not in data: data['node_refs'] = [] data['node_refs'].append(elem.attrib['ref']) return data else: return None
def parse_element(element): """Parses elem from iterparse, cleans address, returns dict""" node = {} if element.tag == "node" or element.tag == "way": data = dict() # Parse data branching on elem.tag for elem in element.iter(): if 'k' in elem.attrib: if re.match(problemchars, elem.attrib['k']): print 'Skipping element: ', elem continue if elem.tag == 'node': data['id'] = elem.attrib['id'] data['type'] = elem.tag if 'visible' in elem.attrib: data['visible'] = elem.attrib['visible'] data['pos'] = [ float(elem.attrib['lat']), float(elem.attrib['lon'])] data['created'] = {} data['created']['version'] = elem.attrib['version'] data['created']['changeset'] = elem.attrib['changeset'] data['created']['timestamp'] = elem.attrib['timestamp'] data['created']['user'] = elem.attrib['user'] data['created']['uid'] = elem.attrib['uid'] elif elem.tag == 'way': data['id'] = elem.attrib['id'] data['type'] = elem.tag if 'visible' in elem.attrib: data['visible'] = elem.attrib['visible'] elif elem.tag == 'tag': if re.match(problemchars, elem.attrib['k']): print 'Skipping tag: ', elem.attrib['k'] continue if is_address(elem): data['address'] = clean_address(elem.attrib['v']) if is_street(elem): if 'address' not in data: data['address'] = {} data['address']['street'] = update_street_suffix( elem.attrib['v']) elem_key = elem.attrib['k'].split(':') if elem_key[0] == 'addr' or elem_key[0] == 'address': continue # already parsed address else: data[':'.join(elem_key)] = elem.attrib['v'] elif elem.tag == 'nd': if 'node_refs' not in data: data['node_refs'] = [] data['node_refs'].append(elem.attrib['ref']) return data else: return None
def binding_address(value): if not utils.is_address(value): raise argparse.ArgumentTypeError("Malformed bind address: %s" % value)
def host_address(value): if not utils.is_domain(value) and not utils.is_address(value): raise argparse.ArgumentTypeError("Malformed host/address: %s" % value) return value