@@ -219,6 +219,44 @@ def _date_from_string(self, date_string, date_format=LEASE_DATE_FORMAT):
219219 date_format = date_format )
220220 return date
221221
222+ def _parse_lease_dates (self , start_date , end_date ):
223+ now = datetime .datetime .utcnow ()
224+ now = datetime .datetime (now .year ,
225+ now .month ,
226+ now .day ,
227+ now .hour ,
228+ now .minute )
229+ if start_date == 'now' :
230+ start_date = now
231+ else :
232+ start_date = self ._date_from_string (start_date )
233+ if end_date == 'now' :
234+ end_date = now
235+ else :
236+ end_date = self ._date_from_string (end_date )
237+
238+ return start_date , end_date , now
239+
240+ def _check_for_invalid_date_inputs (self , lease , values , now ):
241+ if (lease ['start_date' ] < now and
242+ values ['start_date' ] != lease ['start_date' ]):
243+ raise common_ex .InvalidInput (
244+ 'Cannot modify the start date of already started leases' )
245+
246+ if (lease ['start_date' ] > now and
247+ values ['start_date' ] < now ):
248+ raise common_ex .InvalidInput (
249+ 'Start date must be later than current date' )
250+
251+ if lease ['end_date' ] < now :
252+ raise common_ex .InvalidInput (
253+ 'Terminated leases can only be renamed' )
254+
255+ if (values ['end_date' ] < now or
256+ values ['end_date' ] < values ['start_date' ]):
257+ raise common_ex .InvalidInput (
258+ 'End date must be later than current and start date' )
259+
222260 def validate_params (self , values , required_params ):
223261 if isinstance (required_params , list ):
224262 required_params = set (required_params )
@@ -253,20 +291,8 @@ def create_lease(self, lease_values):
253291 self .validate_params (res , ['resource_type' ])
254292
255293 # Create the lease without the reservations
256- start_date = lease_values ['start_date' ]
257- end_date = lease_values ['end_date' ]
258-
259- now = datetime .datetime .utcnow ()
260- now = datetime .datetime (now .year ,
261- now .month ,
262- now .day ,
263- now .hour ,
264- now .minute )
265- if start_date == 'now' :
266- start_date = now
267- else :
268- start_date = self ._date_from_string (start_date )
269- end_date = self ._date_from_string (end_date )
294+ start_date , end_date , now = self ._parse_lease_dates (
295+ lease_values ['start_date' ], lease_values ['end_date' ])
270296
271297 if start_date < now :
272298 raise common_ex .InvalidInput (
@@ -384,42 +410,13 @@ def update_lease(self, lease_id, values):
384410 datetime .datetime .strftime (lease ['end_date' ], LEASE_DATE_FORMAT ))
385411 before_end_date = values .get ('before_end_date' , None )
386412
387- now = datetime .datetime .utcnow ()
388- now = datetime .datetime (now .year ,
389- now .month ,
390- now .day ,
391- now .hour ,
392- now .minute )
393- if start_date == 'now' :
394- start_date = now
395- else :
396- start_date = self ._date_from_string (start_date )
397- if end_date == 'now' :
398- end_date = now
399- else :
400- end_date = self ._date_from_string (end_date )
413+ start_date , end_date , now = self ._parse_lease_dates (start_date ,
414+ end_date )
401415
402416 values ['start_date' ] = start_date
403417 values ['end_date' ] = end_date
404418
405- if (lease ['start_date' ] < now and
406- values ['start_date' ] != lease ['start_date' ]):
407- raise common_ex .InvalidInput (
408- 'Cannot modify the start date of already started leases' )
409-
410- if (lease ['start_date' ] > now and
411- values ['start_date' ] < now ):
412- raise common_ex .InvalidInput (
413- 'Start date must be later than current date' )
414-
415- if lease ['end_date' ] < now :
416- raise common_ex .InvalidInput (
417- 'Terminated leases can only be renamed' )
418-
419- if (values ['end_date' ] < now or
420- values ['end_date' ] < values ['start_date' ]):
421- raise common_ex .InvalidInput (
422- 'End date must be later than current and start date' )
419+ self ._check_for_invalid_date_inputs (lease , values , now )
423420
424421 with trusts .create_ctx_from_trust (lease ['trust_id' ]) as ctx :
425422 if before_end_date :
@@ -478,6 +475,9 @@ def update_lease(self, lease_id, values):
478475 resource_type = v .get ('resource_type' ,
479476 reservation ['resource_type' ])
480477
478+ if resource_type != reservation ['resource_type' ]:
479+ raise exceptions .CantUpdateParameter (
480+ param = 'resource_type' )
481481 self .plugins [resource_type ].update_reservation (
482482 reservation ['id' ], v )
483483
@@ -584,7 +584,7 @@ def end_lease(self, lease_id, event_id):
584584 lease = self .get_lease (lease_id )
585585 allocations = self ._existing_allocations (lease ['reservations' ])
586586
587- with trusts .create_ctx_from_trust (lease ['trust_id' ]) as ctx :
587+ with trusts .create_ctx_from_trust (lease ['trust_id' ]):
588588 self .enforcement .on_end (context .current (), lease , allocations )
589589 self ._basic_action (lease_id , event_id , 'on_end' ,
590590 status .reservation .DELETED )
0 commit comments