Skip to content

Commit 78b0a21

Browse files
authored
Merge pull request #9 from btoron/resource-management
Added create-resource function
2 parents 282f005 + b0c950b commit 78b0a21

4 files changed

Lines changed: 108 additions & 42 deletions

File tree

ofsc/ofsc_proxy.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import json
44
import urllib
55
from urllib.parse import urljoin
6+
import logging
67
TEXT_RESPONSE=1
78
FULL_RESPONSE=2
89
JSON_RESPONSE=3
@@ -106,6 +107,10 @@ def get_events(self, params, response_type=TEXT_RESPONSE):
106107
else:
107108
return response.text
108109

110+
#####
111+
# RESOURCE MANAGEMENT
112+
####
113+
109114
def get_resource(self, resource_id, inventories=False, workSkills=False, workZones=False, workSchedules=False , response_type=TEXT_RESPONSE):
110115
url = urljoin(self.baseUrl, "/rest/ofscCore/v1/resources/{}".format(str(resource_id)))
111116
data = {}
@@ -140,6 +145,19 @@ def get_resource(self, resource_id, inventories=False, workSkills=False, workZon
140145
else:
141146
return response.text
142147

148+
# 202107
149+
def create_resource (self, resourceId, data, response_type=TEXT_RESPONSE):
150+
url = urljoin(self.baseUrl, f"/rest/ofscCore/v1/resources/{resourceId}")
151+
response = requests.put(url, headers=self.headers, data=data)
152+
#print (response.status_code)
153+
if response_type==FULL_RESPONSE:
154+
return response
155+
elif response_type==JSON_RESPONSE:
156+
return response.json()
157+
else:
158+
return response.text
159+
160+
143161
def get_position_history(self, resource_id,date,response_type=TEXT_RESPONSE):
144162
url = urljoin(self.baseUrl, "/rest/ofscCore/v1/resources/{}/positionHistory".format(str(resource_id)))
145163
params = {}
@@ -197,6 +215,7 @@ def get_resource_descendants(self, resource_id, resourceFields=None, offset=0,
197215
params['fields'] = resourceFields
198216
params['limit'] = limit
199217
params['offset']= offset
218+
logging.debug(json.dumps(params, indent=2))
200219

201220
response = requests.get(url, params=params, headers=self.headers)
202221

ofsc/tests/OFSC_resources_test.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import unittest
2+
3+
4+
import sys, os
5+
sys.path.append(os.path.abspath('.'))
6+
from ofsc import OFSC, FULL_RESPONSE
7+
import logging
8+
import json
9+
import argparse
10+
11+
12+
import pprint
13+
14+
15+
class ofscTest(unittest.TestCase):
16+
17+
def setUp(self):
18+
self.logger = logging.getLogger()
19+
self.pp = pprint.PrettyPrinter(indent=4)
20+
self.logger.setLevel(logging.DEBUG)
21+
#todo add credentials to test run
22+
logging.warning("Here {}".format(os.environ.get('OFSC_CLIENT_ID')))
23+
self.instance = OFSC(clientID=os.environ.get('OFSC_CLIENT_ID'), secret=os.environ.get('OFSC_CLIENT_SECRET'), companyName=os.environ.get('OFSC_COMPANY'))
24+
self.date = os.environ.get('OFSC_TEST_DATE')
25+
26+
# Test R.0.1
27+
def test_R01_get_resource_route_nofields(self):
28+
instance = self.instance
29+
logger = self.logger
30+
raw_response = instance.get_resource_route(33001, date=self.date, response_type=FULL_RESPONSE)
31+
logging.debug(self.pp.pformat(raw_response.json()))
32+
response = raw_response.json()
33+
self.assertEqual(response['totalResults'], 13)
34+
35+
def test_R02_get_resource_route_twofields(self):
36+
instance = self.instance
37+
logger = self.logger
38+
raw_response = instance.get_resource_route(33001, date=self.date, activityFields="activityId,activityType")
39+
response = json.loads(raw_response)
40+
#print(response)
41+
self.assertEqual(response['totalResults'], 13)
42+
43+
def test_R03_get_resource_descendants_noexpand(self):
44+
instance = self.instance
45+
logger = self.logger
46+
raw_response = instance.get_resource_descendants("FLUSA")
47+
response = json.loads(raw_response)
48+
#print(response)
49+
self.assertEqual(response['totalResults'], 37)
50+
51+
def test_R04_get_resource_descendants_expand(self):
52+
instance = self.instance
53+
logger = self.logger
54+
raw_response = instance.get_resource_descendants("FLUSA", workSchedules=True, workZones=True, workSkills=True)
55+
response = json.loads(raw_response)
56+
#print(response)
57+
self.assertEqual(response['totalResults'], 37)
58+
59+
def test_R05_get_resource_descendants_noexpand_fields(self):
60+
instance = self.instance
61+
logger = self.logger
62+
raw_response = instance.get_resource_descendants("FLUSA", resourceFields="resourceId,phone", response_type=FULL_RESPONSE)
63+
# logging.debug(self.pp.pformat(raw_response.json()))
64+
response = raw_response.json()
65+
logger.info(self.pp.pformat(response))
66+
self.assertEqual(response['totalResults'], 37)
67+
68+
def test_R07_create_resource(self):
69+
self.logger.info("...R.07 Create Resource (not existent)")
70+
instance = self.instance
71+
logger = self.logger
72+
new_data = {
73+
"parentResourceId": "SUNRISE",
74+
"resourceType": "BK",
75+
"name" : "Test Name",
76+
"language": "en",
77+
"timeZone": "Arizona"
78+
}
79+
raw_response = instance.create_resource(resourceId="test_resource", data=json.dumps(new_data), response_type=FULL_RESPONSE)
80+
logging.debug(self.pp.pformat(raw_response.json()))
81+
response = raw_response.json()
82+
logger.info(self.pp.pformat(response))
83+
self.assertEqual(raw_response.status_code, 201)
84+
self.assertIsNotNone(response['externalId'])
85+
self.assertEqual(response['name'], 'Test Name')
86+
87+
if __name__ == '__main__':
88+
unittest.main()

ofsc/tests/OFSC_test.py

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -134,47 +134,6 @@ def test_203_get_position_history(self):
134134
self.assertIsNotNone(response['totalResults'])
135135
self.assertTrue(response['totalResults']>200)
136136

137-
def test_204_get_resource_route_nofields(self):
138-
instance = self.instance
139-
logger = self.logger
140-
raw_response = instance.get_resource_route(33001, date=self.date, response_type=FULL_RESPONSE)
141-
logging.debug(self.pp.pformat(raw_response.json()))
142-
response = raw_response.json()
143-
self.assertEqual(response['totalResults'], 13)
144-
145-
def test_205_get_resource_route_twofields(self):
146-
instance = self.instance
147-
logger = self.logger
148-
raw_response = instance.get_resource_route(33001, date=self.date, activityFields="activityId,activityType")
149-
response = json.loads(raw_response)
150-
#print(response)
151-
self.assertEqual(response['totalResults'], 13)
152-
153-
def test_206_get_resource_descendants_noexpand(self):
154-
instance = self.instance
155-
logger = self.logger
156-
raw_response = instance.get_resource_descendants("FLUSA")
157-
response = json.loads(raw_response)
158-
#print(response)
159-
self.assertEqual(response['totalResults'], 37)
160-
161-
def test_207_get_resource_descendants_expand(self):
162-
instance = self.instance
163-
logger = self.logger
164-
raw_response = instance.get_resource_descendants("FLUSA", workSchedules=True, workZones=True, workSkills=True)
165-
response = json.loads(raw_response)
166-
#print(response)
167-
self.assertEqual(response['totalResults'], 37)
168-
169-
def test_208_get_resource_descendants_noexpand_fields(self):
170-
instance = self.instance
171-
logger = self.logger
172-
raw_response = instance.get_resource_descendants("FLUSA", resourceFields="resourceId,phone", response_type=FULL_RESPONSE)
173-
# logging.debug(self.pp.pformat(raw_response.json()))
174-
response = raw_response.json()
175-
logger.info(self.pp.pformat(response))
176-
self.assertEqual(response['totalResults'], 37)
177-
178137
# Capacity tests
179138
def test_301_get_capacity_areas_simple(self):
180139
instance = self.instance

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
setup(
33
name = 'ofsc',
44
packages = ['ofsc'],
5-
version = 'v1.10',
5+
version = 'v1.11',
66
license='MIT', # Chose a license from here: https://help.github.com/articles/licensing-a-repository
77
description = 'Python Wrapper for Oracle Field Service API',
88
author = 'Borja Toron',

0 commit comments

Comments
 (0)