|
1 | 1 | __author__ = 'Booskit' |
2 | | -__version__ = '1.2' |
| 2 | +__version__ = '1.2a' |
3 | 3 | __description__ = 'PyITAgent - Python agent for sending computer information to your Snipe-IT instance.' |
4 | 4 |
|
5 | 5 | import requests |
@@ -135,14 +135,18 @@ def send_request(self, method, endpoint, payload=None): |
135 | 135 | def get_manufacturer(self, manufacturer_name): |
136 | 136 | endpoint = f'manufacturers?name={manufacturer_name}' |
137 | 137 | response = self.send_request('GET', endpoint) |
138 | | - try: |
139 | | - if response['total'] != 0: |
| 138 | + # Check for API error response |
| 139 | + if response.get('status') == 'error': |
| 140 | + print("API Error:", response.get('messages', 'Unknown error')) |
| 141 | + return None |
| 142 | + # Handle case where 'total' key is missing or 0 |
| 143 | + if response.get('total', 0) != 0: |
| 144 | + try: |
140 | 145 | return response['rows'][0]['id'] |
141 | | - else: |
142 | | - print("No manufacturer found in database, perhaps create a new one?") |
143 | | - return None |
144 | | - except KeyError: |
145 | | - raise |
| 146 | + except (KeyError, IndexError): |
| 147 | + raise KeyError("Unexpected response format or empty 'rows'") |
| 148 | + else: |
| 149 | + raise Exception(f"Failed to get hardware: {response.get('messages')}") |
146 | 150 |
|
147 | 151 | def post_manufacturer(self, manufacturer_name): |
148 | 152 | endpoint = 'manufacturers' |
@@ -182,13 +186,18 @@ def post_model(self, manufacturer_id, category_id = 3, fieldset_id = 1): |
182 | 186 | def get_model(self, model_name): |
183 | 187 | endpoint = f'models?limit=1&search={model_name}&sort=name' |
184 | 188 | response = self.send_request('GET', endpoint) |
185 | | - try: |
186 | | - if response['total'] != 0: |
| 189 | + # Check for API error response |
| 190 | + if response.get('status') == 'error': |
| 191 | + print("API Error:", response.get('messages', 'Unknown error')) |
| 192 | + return None |
| 193 | + # Handle case where 'total' key is missing or 0 |
| 194 | + if response.get('total', 0) != 0: |
| 195 | + try: |
187 | 196 | return response['rows'][0]['id'] |
188 | | - except KeyError: |
189 | | - raise |
190 | | - print("No model found in database, perhaps create a new one?") |
191 | | - return None |
| 197 | + except (KeyError, IndexError): |
| 198 | + raise KeyError("Unexpected response format or empty 'rows'") |
| 199 | + else: |
| 200 | + raise Exception(f"Failed to get model: {response.get('messages')}") |
192 | 201 |
|
193 | 202 | def get_or_create_model(self, manufacturer_id): |
194 | 203 | model_id = self.get_model(self.model) |
@@ -217,13 +226,19 @@ def post_hardware(self, serial_number, model_id, status_id, company_id): |
217 | 226 | def get_hardware(self, serial_number): |
218 | 227 | endpoint = f'hardware/byserial/{serial_number}?deleted=false' |
219 | 228 | response = self.send_request('GET', endpoint) |
220 | | - try: |
221 | | - if response['total'] != 0: |
| 229 | + # Check for API error response |
| 230 | + if response.get('status') == 'error': |
| 231 | + print("API Error:", response.get('messages', 'Unknown error')) |
| 232 | + return None |
| 233 | + # Handle case where 'total' key is missing or 0 |
| 234 | + if response.get('total', 0) != 0: |
| 235 | + try: |
222 | 236 | return response['rows'][0]['id'] |
223 | | - except KeyError: |
224 | | - raise |
225 | | - print("No hardware found in database, perhaps create a new one?") |
226 | | - return None |
| 237 | + except (KeyError, IndexError): |
| 238 | + raise KeyError("Unexpected response format or empty 'rows'") |
| 239 | + else: |
| 240 | + raise Exception(f"Failed to get hardware: {response.get('messages')}") |
| 241 | + |
227 | 242 |
|
228 | 243 | def patch_hardware(self, hardware_id, serial_number, model_id, status_id, company_id): |
229 | 244 | endpoint = f'hardware/{hardware_id}?deleted=false' |
|
0 commit comments