コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
 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)
コード例 #5
0
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
コード例 #6
0
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()
コード例 #7
0
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()
コード例 #8
0
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
コード例 #9
0
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
コード例 #10
0
def binding_address(value):
    if not utils.is_address(value):
        raise argparse.ArgumentTypeError("Malformed bind address: %s" % value)
コード例 #11
0
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