Merge lp:~rhuddie/cloudspacesclient/share_request into lp:cloudspacesclient

Proposed by Richard Huddie
Status: Merged
Merged at revision: 49
Proposed branch: lp:~rhuddie/cloudspacesclient/share_request
Merge into: lp:cloudspacesclient
Diff against target: 108 lines (+65/-2)
2 files modified
src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py (+50/-2)
src/cloudspacesclient/ubuntuone.py (+15/-0)
To merge this branch: bzr merge lp:~rhuddie/cloudspacesclient/share_request
Reviewer Review Type Date Requested Status
Leo Arias (community) Approve
Review via email: mp+199237@code.launchpad.net

Description of the change

Prototype code for doing share request. This test code is not yet completed.

To post a comment you must log in.
Revision history for this message
Leo Arias (elopio) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py'
2--- src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-12-17 05:56:23 +0000
3+++ src/cloudspacesclient/tests/conformance/test_cloudspaces_api.py 2013-12-17 09:19:22 +0000
4@@ -27,8 +27,10 @@
5 import cloudspacer.cooked
6 import cloudspacer.errors
7 from dateutil import parser, tz
8+import requests
9
10 from cloudspacesclient import config, schemas
11+import re
12
13
14 def get_test_server_adapter():
15@@ -49,15 +51,22 @@
16 self.start_datetime = self._get_now_datetime()
17 self.test_server = get_test_server_adapter()
18 self.test_user = self.test_server.create_test_user()
19+ self.test_user2 = self.test_server.create_test_user()
20 self.addCleanup(self.test_server.delete_test_user, self.test_user)
21+ self.addCleanup(self.test_server.delete_test_user, self.test_user2)
22
23- auth_session = self.test_server.get_auth_session(self.test_user)
24+ self.auth = self.test_server.get_auth_session_oauth1(self.test_user)
25+ self.auth2 = self.test_server.get_auth_session_oauth1(self.test_user2)
26+ self.auth_session = self.test_server.get_auth_session(self.test_user)
27+ self.auth_session2 = self.test_server.get_auth_session(self.test_user2)
28 self.service_root = urllib.parse.urljoin(
29 self.cloudspaces_server_url, 'api/cloudspaces/')
30 # TODO the client class should be defined in a config file, to make
31 # it easy to test different Cloudspaces clients.
32 self.cloudspaces_api_client = cloudspacer.cooked.CloudSpacer(
33- self.service_root, auth_session)
34+ self.service_root, self.auth_session)
35+ self.cloudspaces_api_client2 = cloudspacer.cooked.CloudSpacer(
36+ self.service_root, self.auth_session2)
37
38 def _get_now_datetime(self):
39 now = datetime.now(tz.tzutc())
40@@ -548,3 +557,42 @@
41 # get the latest version and compare with expected content
42 content = self.cloudspaces_api_client.get_file(file_node_id)
43 self._assert_file_content(content, content_v2)
44+
45+ def _get_headers(self):
46+ MIME_TYPE = 'application/x-www-form-urlencoded'
47+ return {
48+ 'Content-Type': MIME_TYPE,
49+ 'Accept': MIME_TYPE
50+ }
51+
52+ def test_share_request(self):
53+ # Create a file and folder to share
54+ folder_metadata = self.cloudspaces_api_client.make_folder(
55+ self.root_node_id, "share_folder")
56+ self.cloudspaces_api_client.make_file(
57+ folder_metadata.get("node_id"), "share_file")
58+ # Create the share offer
59+ offer = self.cloudspaces_api_client.share_offer(
60+ "bob@bob.bob", folder_metadata.get("node_id"),
61+ self.test_user2.full_name)
62+ # Do a Get on the url to choose cloud provider
63+ # using the UID from share offer
64+ url = self.cloudspaces_server_url + "/files/cloudspaces_choose/"
65+ url = url + offer["share_offer"]
66+ response = requests.get(url, auth=self.auth2)
67+ # Read auth token for use in cookie
68+ cookie = {'csrftoken': response.cookies['csrftoken']}
69+ # Read out the csfrmiddlewaretoken value to send back from html body
70+ html = response.text
71+ start = 'name=\'csrfmiddlewaretoken\'\s+value=\''
72+ end = '\''
73+ token = re.search('%s(.*)%s' % (start, end), html).group(1)
74+ choice = "providerA"
75+ # Body of POST should be:
76+ # csfrmiddlewaretoken=<value>&provider=<provider>
77+ body = "csrfmiddlewaretoken={0}&provider={1}".format(token, choice)
78+ # Send Post command using cookie
79+ response = requests.post(
80+ url, data=body, headers=self._get_headers(), cookies=cookie,
81+ auth=self.auth2)
82+ print("\nRESPONSE:\n%s" % response.text)
83
84=== modified file 'src/cloudspacesclient/ubuntuone.py'
85--- src/cloudspacesclient/ubuntuone.py 2013-12-05 18:53:04 +0000
86+++ src/cloudspacesclient/ubuntuone.py 2013-12-17 09:19:22 +0000
87@@ -127,6 +127,21 @@
88 response.get('consumer_key'), response.get('consumer_secret'),
89 response.get('token_key'), response.get('token_secret'))
90
91+ def get_auth_session_oauth1(self, user):
92+ """Return the auth session to sign the Cloudspaces API requests.
93+
94+ :parameter user: An object with the user information.
95+
96+ """
97+ data = dict(
98+ email=user.email,
99+ password=user.password,
100+ token_name='Cloudspaces API test')
101+ response = self._get_sso_api_client().login(data)
102+ return requests_oauthlib.OAuth1(
103+ response.get('consumer_key'), response.get('consumer_secret'),
104+ response.get('token_key'), response.get('token_secret'))
105+
106 def get_root_path(self):
107 """Return the path to the root folder."""
108 return '/'

Subscribers

People subscribed via source and target branches