Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python
- import requests
- import json
- import sys
- import random
- import string
- username = 'user@example.com'
- password = 'xxxsecretxxx'
- key = 'H3PLMKJKIVATLDPWHJH3AGWEJPFU5GRT'
- i = 'docassemble.demo:data/questions/questions.yml'
- r = requests.get('http://localhost/api/secret', params={'key': key, 'username': username, 'password': password})
- if r.status_code != 200:
- sys.exit(r.text)
- secret = json.loads(r.text)
- r = requests.get('http://localhost/api/session/new', params={'key': key, 'i': i, 'secret': secret})
- if r.status_code != 200:
- sys.exit(r.text)
- info = json.loads(r.text)
- session = info['session']
- r = requests.get('http://localhost/api/session/question', params={'key': key, 'i': i, 'secret': secret, 'session': session})
- if r.status_code != 200:
- sys.exit(r.text)
- info = json.loads(r.text)
- print r.text
- steps = 0
- while steps < 1000 and info['questionType'] != 'deadend':
- variables = dict()
- for field in info['fields']:
- if field.get('datatype', None) in ('html', 'note'):
- continue
- elif 'variable_name' not in field:
- if field.get('fieldtype', None) == 'multiple_choice' and 'choices' in field:
- variables[field['choices'][0]['variable_name']] = field['choices'][0]['value']
- else:
- sys.exit("Field not recognized:\n" + repr(field))
- elif 'datatype' not in field and 'fieldtype' not in field:
- variables[field['variable_name']] = True
- elif field.get('datatype', None) == 'object':
- if not field.get('required', True):
- continue
- else:
- sys.exit("Field not recognized:\n" + repr(field))
- elif field.get('fieldtype', None) == 'multiple_choice' or 'choices' in field:
- variables[field['variable_name']] = field['choices'][0]['value']
- elif field.get('datatype', None) == 'boolean':
- variables[field['variable_name']] = True if random.random() > 0.5 else False
- elif field.get('datatype', None) == 'threestate':
- variables[field['variable_name']] = True if random.random() > 0.66 else (False if random.random() > 0.5 else None)
- elif field.get('datatype', None) in ('text', 'area'):
- variables[field['variable_name']] = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5))
- elif field.get('datatype', None) == 'email':
- variables[field['variable_name']] = ''.join(random.choice(string.ascii_lowercase) for _ in range(5)) + '@' + ''.join(random.choice(string.ascii_lowercase) for _ in range(5)) + random.choice(['.com', '.net', '.org'])
- elif field.get('datatype', None) == 'currency':
- variables[field['variable_name']] = "{0:.2f}".format(random.random() * 100.0)
- elif field.get('datatype', None) == 'date':
- variables[field['variable_name']] = "2015-04-15"
- elif field.get('datatype', None) == 'range':
- variables[field['variable_name']] = float(field.get('min', 1)) + int(random.random() * (float(field.get('max', 10)) - float(field.get('min', 1))))
- #elif ...
- #elif ...
- #elif ...
- else:
- sys.exit("Field not recognized:\n" + repr(field))
- if len(variables) == 0:
- sys.exit("Fields not recognized:\n" + repr(info['fields']))
- print "Setting variables:\n" + repr(variables)
- data = {'key': key, 'i': i, 'secret': secret, 'session': session, 'variables': json.dumps(variables)}
- if info.get('mandatory', False):
- data['question_name'] = info['questionName']
- r = requests.post('http://localhost/api/session', data=data)
- if r.status_code != 200:
- sys.exit(r.text)
- print "Got question:\n" + r.text
- try:
- info = json.loads(r.text)
- assert isinstance(info, dict)
- except:
- sys.exit(r.text)
- steps += 1
- r = requests.delete('http://localhost/api/session', params={'key': key, 'i': i, 'session': session})
- if r.status_code != 204:
- sys.exit(r.text)
- sys.exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement