This repository has been archived by the owner on Sep 23, 2022. It is now read-only.
/
__init__.py
83 lines (60 loc) · 2.06 KB
/
__init__.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
73
74
75
76
77
78
79
80
81
82
83
# -*- coding: utf-8 -*-
import os
import subprocess
import time
import lxml.html
import pytest
import requests
from vdirsyncer.http import request
owncloud_repo = os.path.dirname(__file__)
php_sh = os.path.abspath(os.path.join(owncloud_repo, 'php.sh'))
base = 'http://127.0.0.1:8080'
username, password = ('asdf', 'asdf')
def wait():
for i in range(5):
try:
requests.get(base + '/')
except Exception as e:
# Don't know exact exception class, don't care.
# Also, https://github.com/kennethreitz/requests/issues/2192
if 'connection refused' not in str(e).lower():
raise
time.sleep(2 ** i)
else:
return True
return False
def get_request_token(session):
r = request('GET', base + '/', session=session)
tree = lxml.html.fromstring(r.content)
return tree.find('head').attrib['data-requesttoken']
def create_address_book(name):
session = requests.session()
session.auth = (username, password)
token = get_request_token(session)
r = request(
'POST',
base + '/index.php/apps/contacts/addressbook/local/add',
data=dict(displayname=name, uri=name, description=''),
headers=dict(requesttoken=token),
session=session
).json()
return r['uri']
class ServerMixin(object):
storage_class = None
wsgi_teardown = None
@pytest.fixture(autouse=True)
def setup(self, monkeypatch, xprocess):
def preparefunc(cwd):
return wait, ['sh', php_sh]
xprocess.ensure('owncloud_server', preparefunc)
subprocess.check_call([os.path.join(owncloud_repo, 'reset.sh')])
@pytest.fixture
def get_storage_args(self):
def inner(collection='test'):
dav_path = '/remote.php/dav/'
rv = {'url': base + dav_path, 'collection': collection,
'username': username, 'password': password}
if collection is not None:
return self.storage_class.create_collection(**rv)
return rv
return inner