Merge branch 'geoffturk/mock-data' into 'master'

Add better mocked data

See merge request grassrootseconomics/cic-internal-integration!172
This commit is contained in:
Geoff Turk 2021-06-02 14:59:00 +00:00
commit d0f2bc0120

View File

@ -2,21 +2,18 @@
# standard imports # standard imports
import json import json
import time
import datetime import datetime
import random import random
import logging import logging
import os import os
import base64
import hashlib import hashlib
import sys
import argparse import argparse
import random import random
# external imports # external imports
import vobject
import celery import celery
from faker import Faker from faker import Faker
from collections import OrderedDict
import confini import confini
from cic_types.models.person import ( from cic_types.models.person import (
Person, Person,
@ -37,12 +34,16 @@ config_dir = os.environ.get('CONFINI_DIR', os.path.join(script_dir, 'config'))
argparser = argparse.ArgumentParser() argparser = argparse.ArgumentParser()
argparser.add_argument('-c', type=str, default=config_dir, help='Config dir') argparser.add_argument('-c', type=str, default=config_dir, help='Config dir')
argparser.add_argument('--tag', type=str, action='append', help='Tags to add to record') argparser.add_argument('--tag', type=str, action='append',
argparser.add_argument('--gift-threshold', type=int, help='If set, users will be funded with additional random balance (in token integer units)') help='Tags to add to record')
argparser.add_argument('--gift-threshold', type=int,
help='If set, users will be funded with additional random balance (in token integer units)')
argparser.add_argument('-v', action='store_true', help='Be verbose') argparser.add_argument('-v', action='store_true', help='Be verbose')
argparser.add_argument('-vv', action='store_true', help='Be more verbose') argparser.add_argument('-vv', action='store_true', help='Be more verbose')
argparser.add_argument('--dir', default='out', type=str, help='path to users export dir tree') argparser.add_argument('--dir', default='out', type=str,
argparser.add_argument('user_count', type=int, help='amount of users to generate') help='path to users export dir tree')
argparser.add_argument('user_count', type=int,
help='amount of users to generate')
args = argparser.parse_args() args = argparser.parse_args()
if args.v: if args.v:
@ -60,7 +61,8 @@ dt_then = dt_now - datetime.timedelta(weeks=150)
ts_now = int(dt_now.timestamp()) ts_now = int(dt_now.timestamp())
ts_then = int(dt_then.timestamp()) ts_then = int(dt_then.timestamp())
celery_app = celery.Celery(broker=config.get('CELERY_BROKER_URL'), backend=config.get('CELERY_RESULT_URL')) celery_app = celery.Celery(broker=config.get(
'CELERY_BROKER_URL'), backend=config.get('CELERY_RESULT_URL'))
gift_max = args.gift_threshold or 0 gift_max = args.gift_threshold or 0
gift_factor = (10**6) gift_factor = (10**6)
@ -88,6 +90,7 @@ if tags == None or len(tags) == 0:
random.seed() random.seed()
def genPhoneIndex(phone): def genPhoneIndex(phone):
h = hashlib.new('sha256') h = hashlib.new('sha256')
h.update(phone.encode('utf-8')) h.update(phone.encode('utf-8'))
@ -147,10 +150,10 @@ def genDob():
def gen(): def gen():
old_blockchain_address = '0x' + os.urandom(20).hex() old_blockchain_address = '0x' + os.urandom(20).hex()
old_blockchain_checksum_address = to_checksum_address(old_blockchain_address) old_blockchain_checksum_address = to_checksum_address(
old_blockchain_address)
gender = random.choice(['female', 'male', 'other']) gender = random.choice(['female', 'male', 'other'])
phone = genPhone() phone = genPhone()
city = fake.city_name()
v = genPersonal(phone) v = genPersonal(phone)
contact_data = get_contact_data_from_vcard(v) contact_data = get_contact_data_from_vcard(v)
@ -167,11 +170,43 @@ def gen():
], ],
}, },
} }
p.location['area_name'] = city p.products = [fake.random_element(elements=OrderedDict(
[('fruit', 0.25),
('maji', 0.05),
('milk', 0.1),
('teacher', 0.1),
('doctor', 0.05),
('boutique', 0.15),
('recycling', 0.05),
('farmer', 0.05),
('oil', 0.05),
('pastor', 0.1),
('chama', 0.03),
('pastor', 0.01),
('bzrTsuZieaq', 0.01)
]))]
p.location['area_name'] = fake.random_element(elements=OrderedDict(
[('mnarani', 0.05),
('chilumani', 0.1),
('madewani', 0.1),
('kisauni', 0.05),
('bangla', 0.1),
('kabiro', 0.1),
('manyani', 0.05),
('ruben', 0.15),
('makupa', 0.05),
('kingston', 0.05),
('rangala', 0.05),
('homabay', 0.1),
('nakuru', 0.03),
('kajiado', 0.01),
('zurtWicKtily', 0.01)
]))
if random.randint(0, 1): if random.randint(0, 1):
p.location['latitude'] = (random.random() + 180) - 90 #fake.local_latitude() # fake.local_latitude()
p.location['longitude'] = (random.random() + 360) - 180 #fake.local_latitude() p.location['latitude'] = (random.random() + 180) - 90
# fake.local_latitude()
p.location['longitude'] = (random.random() + 360) - 180
return (old_blockchain_checksum_address, phone, p) return (old_blockchain_checksum_address, phone, p)
@ -239,7 +274,8 @@ if __name__ == '__main__':
ft.write('{}:{}\n'.format(eth, ','.join(tags))) ft.write('{}:{}\n'.format(eth, ','.join(tags)))
amount = genAmount() amount = genAmount()
fa.write('{},{}\n'.format(eth, amount)) fa.write('{},{}\n'.format(eth, amount))
logg.debug('pidx {}, uid {}, eth {}, amount {}, phone {}'.format(pidx, uid, eth, amount, phone)) logg.debug('pidx {}, uid {}, eth {}, amount {}, phone {}'.format(
pidx, uid, eth, amount, phone))
i += 1 i += 1