4
4
logger = logging .getLogger (__name__ )
5
5
logger .addHandler (logging .NullHandler ())
6
6
7
+
7
8
class BaseAPI (object ):
8
9
"""Base class for API methods
9
10
@@ -24,17 +25,21 @@ def __init__(self, session, entity_type=None):
24
25
def _get_single_record_data (self , id ):
25
26
"""Retrieve one record given the record ID"""
26
27
# Set path to return record type by specific ID
27
- path = self .entity_type + '/' + str (id ) + ' .json'
28
+ path = self .entity_type + "/" + str (id ) + " .json"
28
29
29
- logger .debug ('Getting single record data for id: %s of entity type: %s' , id , self .entity_type )
30
+ logger .debug (
31
+ "Getting single record data for id: %s of entity type: %s" ,
32
+ id ,
33
+ self .entity_type ,
34
+ )
30
35
response = self .session .http_request (path = path )
31
36
32
37
return response .json ()
33
38
34
39
def _get_record_data (self , filters ):
35
40
"""Retrieve one page of raw record data from the farmOS API."""
36
41
# Set path to return record type + filters
37
- path = self .entity_type + ' .json'
42
+ path = self .entity_type + " .json"
38
43
# Combine instance filters and filters from the method call
39
44
filters = {** self .filters , ** filters }
40
45
@@ -44,12 +49,12 @@ def _get_record_data(self, filters):
44
49
data = {}
45
50
46
51
response = response .json ()
47
- if ' list' in response :
48
- data [' list' ] = response [' list' ]
49
- data [' page' ] = {
50
- ' self' : _parse_api_page (url = response [' self' ]),
51
- ' first' : _parse_api_page (url = response [' first' ]),
52
- ' last' : _parse_api_page (url = response [' last' ]),
52
+ if " list" in response :
53
+ data [" list" ] = response [" list" ]
54
+ data [" page" ] = {
55
+ " self" : _parse_api_page (url = response [" self" ]),
56
+ " first" : _parse_api_page (url = response [" first" ]),
57
+ " last" : _parse_api_page (url = response [" last" ]),
53
58
}
54
59
55
60
return data
@@ -59,31 +64,37 @@ def _get_all_record_data(self, filters, page=0, list=None):
59
64
if list is None :
60
65
list = []
61
66
62
- filters [' page' ] = page
67
+ filters [" page" ] = page
63
68
64
- logger .debug ('Getting page: %s of record data of entity type: %s' , filters ['page' ], self .entity_type )
69
+ logger .debug (
70
+ "Getting page: %s of record data of entity type: %s" ,
71
+ filters ["page" ],
72
+ self .entity_type ,
73
+ )
65
74
data = self ._get_record_data (filters = filters )
66
75
67
76
# Append record data to list of all requested data
68
- if ' list' in data :
69
- list = list + data [' list' ]
77
+ if " list" in data :
78
+ list = list + data [" list" ]
70
79
71
80
# Check to see if there are more pages
72
- if ' page' in data :
73
- last_page = data [' page' ][ ' last' ]
81
+ if " page" in data :
82
+ last_page = data [" page" ][ " last" ]
74
83
# Last page, return the list
75
84
if last_page == page :
76
85
data = {
77
- ' page' : {
78
- ' first' : data [' page' ][ ' first' ],
79
- ' last' : data [' page' ][ ' last' ],
86
+ " page" : {
87
+ " first" : data [" page" ][ " first" ],
88
+ " last" : data [" page" ][ " last" ],
80
89
},
81
- ' list' : list ,
90
+ " list" : list ,
82
91
}
83
92
return data
84
93
# Recursive call, get the next page
85
94
else :
86
- return self ._get_all_record_data (list = list , page = (page + 1 ), filters = filters )
95
+ return self ._get_all_record_data (
96
+ list = list , page = (page + 1 ), filters = filters
97
+ )
87
98
88
99
def _get_records (self , filters = None ):
89
100
"""Helper function that checks to retrieve one record, one page or multiple pages of farmOS records"""
@@ -95,11 +106,17 @@ def _get_records(self, filters=None):
95
106
return self ._get_single_record_data (filters )
96
107
elif isinstance (filters , dict ):
97
108
# Check if the caller requests a specific page
98
- if 'page' in filters :
99
- logger .debug ('Getting page: %s of record data of entity type: %s' , filters ['page' ], self .entity_type )
109
+ if "page" in filters :
110
+ logger .debug (
111
+ "Getting page: %s of record data of entity type: %s" ,
112
+ filters ["page" ],
113
+ self .entity_type ,
114
+ )
100
115
return self ._get_record_data (filters = filters )
101
116
else :
102
- logger .debug ('Getting all record data of entity type: %s' , self .entity_type )
117
+ logger .debug (
118
+ "Getting all record data of entity type: %s" , self .entity_type
119
+ )
103
120
return self ._get_all_record_data (filters = filters )
104
121
105
122
def get (self , filters = None ):
@@ -110,43 +127,47 @@ def get(self, filters=None):
110
127
return data
111
128
112
129
def send (self , payload ):
113
- options = {' json' : payload }
130
+ options = {" json" : payload }
114
131
115
132
# If an ID is included, update the record
116
- id = payload .pop ('id' , None )
133
+ id = payload .pop ("id" , None )
117
134
if id :
118
- logger .debug ('Updating record id: of entity type: %s' , id , self .entity_type )
119
- path = self .entity_type + '/' + str (id )
120
- response = self .session .http_request (method = 'PUT' , path = path , options = options )
135
+ logger .debug ("Updating record id: of entity type: %s" , id , self .entity_type )
136
+ path = self .entity_type + "/" + str (id )
137
+ response = self .session .http_request (
138
+ method = "PUT" , path = path , options = options
139
+ )
121
140
# If no ID is included, create a new record
122
141
else :
123
- logger .debug (' Creating record of entity type: %s' , self .entity_type )
142
+ logger .debug (" Creating record of entity type: %s" , self .entity_type )
124
143
path = self .entity_type
125
- response = self .session .http_request (method = 'POST' , path = path , options = options )
144
+ response = self .session .http_request (
145
+ method = "POST" , path = path , options = options
146
+ )
126
147
127
148
# Handle response from POST requests
128
149
if response .status_code == 201 :
129
- logger .debug (' Record created.' )
150
+ logger .debug (" Record created." )
130
151
return response .json ()
131
152
132
153
# Handle response from PUT requests
133
154
if response .status_code == 200 :
134
- logger .debug (' Record updated.' )
155
+ logger .debug (" Record updated." )
135
156
# farmOS returns no response data for PUT requests
136
157
# response_data = response.json()
137
158
138
159
# Hard code the entity ID, path, and resource
139
160
entity_data = {
140
- 'id' : id ,
141
- ' uri' : path ,
142
- ' resource' : self .entity_type ,
161
+ "id" : id ,
162
+ " uri" : path ,
163
+ " resource" : self .entity_type ,
143
164
}
144
165
return entity_data
145
166
146
167
def delete (self , id ):
147
- logger .debug (' Deleted record id: %s of entity type: %s' , id , self .entity_type )
148
- path = self .entity_type + '/' + str (id )
149
- response = self .session .http_request (method = ' DELETE' , path = path )
168
+ logger .debug (" Deleted record id: %s of entity type: %s" , id , self .entity_type )
169
+ path = self .entity_type + "/" + str (id )
170
+ response = self .session .http_request (method = " DELETE" , path = path )
150
171
151
172
return response
152
173
@@ -156,15 +177,15 @@ class TermAPI(BaseAPI):
156
177
157
178
def __init__ (self , session ):
158
179
# Define 'taxonomy_term' as the farmOS API entity endpoint
159
- super ().__init__ (session = session , entity_type = ' taxonomy_term' )
180
+ super ().__init__ (session = session , entity_type = " taxonomy_term" )
160
181
161
182
def get (self , filters = None ):
162
183
"""Get method that supports a bundle name as the 'filter' parameter"""
163
184
164
185
# Check if filters parameter is a str
165
186
if isinstance (filters , str ):
166
187
# Add filters to instance requests.session filter dict with keyword 'bundle'
167
- self .filters [' bundle' ] = filters
188
+ self .filters [" bundle" ] = filters
168
189
# Reset filters to empty dict
169
190
filters = {}
170
191
@@ -178,23 +199,23 @@ class LogAPI(BaseAPI):
178
199
179
200
def __init__ (self , session ):
180
201
# Define 'log' as the farmOS API entity endpoint
181
- super ().__init__ (session = session , entity_type = ' log' )
202
+ super ().__init__ (session = session , entity_type = " log" )
182
203
183
204
184
205
class AssetAPI (BaseAPI ):
185
206
"""API for interacting with farm assets"""
186
207
187
208
def __init__ (self , session ):
188
209
# Define 'farm_asset' as the farmOS API entity endpoint
189
- super ().__init__ (session = session , entity_type = ' farm_asset' )
210
+ super ().__init__ (session = session , entity_type = " farm_asset" )
190
211
191
212
192
213
class AreaAPI (TermAPI ):
193
214
"""API for interacting with farm areas, a subset of farm terms"""
194
215
195
216
def __init__ (self , session ):
196
217
super ().__init__ (session = session )
197
- self .filters [' bundle' ] = ' farm_areas'
218
+ self .filters [" bundle" ] = " farm_areas"
198
219
199
220
def get (self , filters = None ):
200
221
"""Retrieve raw record data from the farmOS API.
@@ -208,7 +229,7 @@ def get(self, filters=None):
208
229
tid = str (filters )
209
230
# Add tid to filters object
210
231
filters = {
211
- ' tid' : tid ,
232
+ " tid" : tid ,
212
233
}
213
234
214
235
data = self ._get_records (filters = filters )
@@ -219,7 +240,7 @@ def get(self, filters=None):
219
240
def info (session ):
220
241
"""Retrieve info about the farmOS server."""
221
242
222
- logger .debug (' Retrieving farmOS server info.' )
243
+ logger .debug (" Retrieving farmOS server info." )
223
244
response = session .http_request ("farm.json" )
224
245
return response .json ()
225
246
@@ -233,6 +254,6 @@ def _parse_api_page(url):
233
254
"""
234
255
235
256
parsed_url = urlparse (url )
236
- page_num = parse_qs (parsed_url .query )[' page' ][0 ]
257
+ page_num = parse_qs (parsed_url .query )[" page" ][0 ]
237
258
238
259
return int (page_num )
0 commit comments