2
2
3
3
import logging
4
4
import json
5
+ import six
5
6
6
7
from .response import Response
7
8
from .exceptions import InvalidUsage
@@ -67,14 +68,31 @@ def _get_response(self, method, **kwargs):
67
68
stream = use_stream ,
68
69
)
69
70
71
+ def _get_custom_endpoint (self , value ):
72
+ if isinstance (value , dict ) and "value" in value :
73
+ value = value ["value" ]
74
+ elif not isinstance (value , six .string_types ):
75
+ raise InvalidUsage (
76
+ "Argument 'path_append' must be a string in the following format: "
77
+ "/path-to-append[/.../...]"
78
+ )
79
+
80
+ segment = value if value .startswith ("/" ) else "/{0}" .format (value )
81
+ return self ._url_builder .get_appended_custom (segment )
82
+
70
83
def get (self , * args , ** kwargs ):
71
84
"""Fetches one or more records
72
85
73
86
:return:
74
87
- :class:`pysnow.Response` object
75
88
"""
76
89
77
- self ._parameters .query = kwargs .pop ("query" , {}) if len (args ) == 0 else args [0 ]
90
+ query = kwargs .pop ("query" , {}) if len (args ) == 0 else args [0 ]
91
+ for key , value in query .items ():
92
+ if isinstance (value , dict ):
93
+ query [key ] = value ["value" ]
94
+
95
+ self ._parameters .query = query
78
96
self ._parameters .limit = kwargs .pop ("limit" , 10000 )
79
97
self ._parameters .offset = kwargs .pop ("offset" , 0 )
80
98
self ._parameters .fields = kwargs .pop ("fields" , kwargs .pop ("fields" , []))
@@ -109,11 +127,9 @@ def update(self, query, payload):
109
127
if not isinstance (payload , dict ):
110
128
raise InvalidUsage ("Update payload must be of type dict" )
111
129
112
- record = self .get (query ).one ()
130
+ record = self .get (query = query ).one ()
113
131
114
- self ._url = self ._url_builder .get_appended_custom (
115
- "/{0}" .format (record ["sys_id" ])
116
- )
132
+ self ._url = self ._get_custom_endpoint (record ["sys_id" ])
117
133
return self ._get_response ("PUT" , data = json .dumps (payload ))
118
134
119
135
def delete (self , query ):
@@ -125,10 +141,8 @@ def delete(self, query):
125
141
"""
126
142
127
143
record = self .get (query = query ).one ()
144
+ self ._url = self ._get_custom_endpoint (record ["sys_id" ])
128
145
129
- self ._url = self ._url_builder .get_appended_custom (
130
- "/{0}" .format (record ["sys_id" ])
131
- )
132
146
return self ._get_response ("DELETE" ).one ()
133
147
134
148
def custom (self , method , path_append = None , ** kwargs ):
@@ -142,12 +156,6 @@ def custom(self, method, path_append=None, **kwargs):
142
156
- :class:`pysnow.Response` object
143
157
"""
144
158
if path_append is not None :
145
- try :
146
- self ._url = self ._url_builder .get_appended_custom (path_append )
147
- except InvalidUsage :
148
- raise InvalidUsage (
149
- "Argument 'path_append' must be a string in the following format: "
150
- "/path-to-append[/.../...]"
151
- )
159
+ self ._url = self ._get_custom_endpoint (path_append )
152
160
153
161
return self ._get_response (method , ** kwargs )
0 commit comments