-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdoc_app.py
72 lines (52 loc) · 1.98 KB
/
doc_app.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import os
import pathlib
import sys
from urllib.parse import urlparse
from wsgiref.simple_server import WSGIRequestHandler
import tomlkit
sys.path.insert(0, os.path.abspath(".."))
from demo.demoapp import create_app
WSGIRequestHandler.log_request = lambda *args, **kwargs: None
def create_doc_app(sphinx_app):
conf_path = (
pathlib.Path(__file__).parent.parent / "demo" / "conf" / "canaille-memory.toml"
)
with open(conf_path) as fd:
conf = dict(tomlkit.load(fd))
conf["CANAILLE"]["SECRET_KEY"] = "doc"
conf["CANAILLE"]["SMTP"] = {"HOST": "localhost"}
conf["CANAILLE"]["LANGUAGE"] = sphinx_app.config["language"]
app = create_app(conf)
return app
def get_root_url(url):
parsed_url = urlparse(url)
root_url = f"{parsed_url.scheme}://{parsed_url.hostname}"
if parsed_url.port:
root_url += f":{parsed_url.port}"
return root_url
contexts = {}
def context_login(browser, url, color_scheme, user, password=True):
try:
context = browser.new_context(
color_scheme=color_scheme, storage_state=contexts[user]
)
except KeyError:
context = browser.new_context(color_scheme=color_scheme)
page = context.new_page()
page.goto(get_root_url(url) + "/login")
page.wait_for_load_state()
page.locator("input[name=login]").fill(user)
page.click("*[type=submit]")
page.wait_for_load_state()
if password:
page.locator("input[name=password]").fill(user)
page.locator("*[type=submit]").click()
page.wait_for_load_state()
contexts[user] = context.storage_state()
return context
def admin_login(browser, url, color_scheme):
return context_login(browser, url, color_scheme, "admin")
def user_login(browser, url, color_scheme):
return context_login(browser, url, color_scheme, "user")
def james_login(browser, url, color_scheme):
return context_login(browser, url, color_scheme, "james", password=False)