Skip to content
This repository was archived by the owner on Oct 2, 2024. It is now read-only.

Commit daa65b5

Browse files
committed
Added resource_discovery.py
- Has some debug print() statements in there - AuthProvider changes to only have a getter for access_token, looks into the _session property to get it.
1 parent b3f8a56 commit daa65b5

File tree

3 files changed

+104
-10
lines changed

3 files changed

+104
-10
lines changed

src/onedrivesdk/auth_provider.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ def __init__(self, http_provider, client_id=None, scopes=None, access_token=None
5151
application
5252
scopes (list of str): Defaults to None, the scopes
5353
that are required for your application
54-
access_token (str): Defaults to None, the access token
55-
for your application
54+
access_token (str): Defaults to None. Not used in this implementation.
5655
session_type (:class:`SessionBase<onedrivesdk.session_base.SessionBase>`):
5756
Defaults to :class:`Session<onedrivesdk.session.Session>`,
5857
the implementation of SessionBase that stores your
@@ -72,7 +71,6 @@ def __init__(self, http_provider, client_id=None, scopes=None, access_token=None
7271
self._http_provider = http_provider
7372
self._client_id = client_id
7473
self._scopes = scopes
75-
self._access_token = access_token
7674
self._session_type = Session if session_type is None else session_type
7775
self._session = None
7876
self._auth_server_url = self.AUTH_SERVER_URL if auth_server_url is None else auth_server_url
@@ -116,13 +114,11 @@ def access_token(self):
116114
AuthProvider
117115
118116
Returns:
119-
str: The access token
117+
str: The access token. Looks at the session
120118
"""
121-
return self._access_token
122-
123-
@access_token.setter
124-
def access_token(self, value):
125-
self._access_token = value
119+
if self._session is not None:
120+
return self._session.access_token
121+
return None
126122

127123
@property
128124
def auth_server_url(self):
@@ -192,7 +188,8 @@ def authenticate(self, code, redirect_uri, client_secret, resource=None):
192188
"redirect_uri": redirect_uri,
193189
"client_secret": client_secret,
194190
"code": code,
195-
"response_type": "code"
191+
"response_type": "code",
192+
"grant_type": "authorization_code"
196193
}
197194

198195
if resource is not None:
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import requests
2+
import json
3+
4+
5+
class ResourceDiscoveryRequest(object):
6+
def __init__(self):
7+
self._method = 'GET'
8+
self._discovery_service_url = 'https://api.office.com/discovery/v2.0/me/services'
9+
10+
def get_service_info(self, access_token):
11+
"""Send request to discovery service. Return ServiceInfo
12+
for valid services.
13+
14+
Args:
15+
access_token (str): A valid access token for resource
16+
'https://api.office.com/discovery/'
17+
18+
Returns:
19+
List of :class:`ServiceInfo<onedrivesdk.helpers.resource_discovery.ServiceInfo>`:
20+
ServiceInfo for each service that the caller can access. NOTE: values that
21+
do not provide access to OneDrive for Business will be excluded (i.e. must have
22+
capability = 'MyFiles' and service_api_version = 'v2.0'
23+
"""
24+
headers = {'Authorization': 'bearer ' + access_token}
25+
response = json.loads(requests.get(self._discovery_service_url, headers=headers).text)
26+
print(response)
27+
service_info_list = [ServiceInfo(x) for x in response['value']]
28+
trimmed_service_info_list = [si for si in service_info_list
29+
if si.capability == 'MyFiles' and si.service_api_version == 'v2.0']
30+
return trimmed_service_info_list
31+
32+
33+
class ServiceInfo(object):
34+
def __init__(self, prop_dict={}):
35+
self._prop_dict = prop_dict
36+
37+
def __str__(self):
38+
return 'serviceResourceId: {}\nserviceEndpointUri: {}'\
39+
.format(self.service_resource_id, self.service_endpoint_uri)
40+
41+
def _prop_dict_get(self, prop):
42+
if prop in self._prop_dict:
43+
return self._prop_dict[prop]
44+
else:
45+
return None
46+
47+
def _prop_dict_set(self, prop, val):
48+
self._prop_dict[prop] = val
49+
50+
@property
51+
def capability(self):
52+
return self._prop_dict_get('capability')
53+
54+
@capability.setter
55+
def capability(self, value):
56+
self._prop_dict_set('capability', value)
57+
58+
@property
59+
def service_id(self):
60+
return self._prop_dict_get('serviceId')
61+
62+
@service_id.setter
63+
def service_id(self, value):
64+
self._prop_dict_set('serviceId', value)
65+
66+
@property
67+
def service_name(self):
68+
return self._prop_dict_get('serviceName')
69+
70+
@service_name.setter
71+
def service_name(self, value):
72+
self._prop_dict_set('serviceName', value)
73+
74+
@property
75+
def service_endpoint_uri(self):
76+
return self._prop_dict_get('serviceEndpointUri')
77+
78+
@service_endpoint_uri.setter
79+
def service_endpoint_uri(self, value):
80+
self._prop_dict_set('serviceEndpointUri', value)
81+
82+
@property
83+
def service_resource_id(self):
84+
return self._prop_dict_get('serviceResourceId')
85+
86+
@service_resource_id.setter
87+
def service_resource_id(self, value):
88+
self._prop_dict_set('serviceResourceId', value)
89+
90+
@property
91+
def service_api_version(self):
92+
return self._prop_dict_get('serviceApiVersion')
93+
94+
@service_api_version.setter
95+
def service_api_version(self, value):
96+
self._prop_dict_set('serviceApiVersion', value)

src/onedrivesdk/http_provider.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def send(self, method, headers, url, data=None, content=None, path=None):
6666
data=data,
6767
json=content)
6868
prepped = request.prepare()
69+
print(prepped.body, prepped.url, prepped.method)
6970
response = session.send(prepped)
7071

7172
custom_response = HttpResponse(response.status_code, response.headers, response.text)

0 commit comments

Comments
 (0)