This repository has been archived by the owner on Apr 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpollweb.py
56 lines (44 loc) · 1.85 KB
/
pollweb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import re
import pkg_resources
import requests
from pollweb.context_web import ContextWeb
try:
version = pkg_resources.require('rabenyx')[0].version
except pkg_resources.DistributionNotFound:
version = '1.0'
class PollWeb:
REQUEST_PATH = '/apps/polls'
HEADERS = {
"User-Agent": f"Rabenyx/{version}",
"Accept": "application/json",
}
TIMEOUT_SEC = 4.0
def __init__(self):
context = ContextWeb()
self.url = context.get_url()
def get_headers(self, content):
headers = self.HEADERS
pattern = r'data-requesttoken=\"([^\"]+)\"'
headers['requesttoken'] = re.search(pattern, content).group(1)
return headers
def get_login(self, token):
url = self.url + self.REQUEST_PATH + '/s/' + token
session = requests.Session()
response = session.get(url, timeout=self.TIMEOUT_SEC)
headers = self.get_headers(bytes.decode(response.content))
login = {"session": session, "headers": headers}
return login
def add_external_voter(self, login, token, user_id, email_address):
url = self.url + self.REQUEST_PATH + '/s/' + token + '/register'
payload = {"userName": user_id, "emailAddress": email_address}
result = login['session'].post(url, json=payload, headers=login['headers'], timeout=self.TIMEOUT_SEC)
result.raise_for_status()
if result.status_code == 201:
return result.json()
def add_external_vote(self, login, token, option_id, vote_answer):
url = self.url + self.REQUEST_PATH + '/s/' + token + '/vote'
payload = {"optionId": option_id, "setTo": vote_answer}
result = login['session'].put(url, json=payload, headers=login['headers'], timeout=self.TIMEOUT_SEC)
result.raise_for_status()
if result.status_code == 200:
return result.json()