2727
2828import requests
2929
30-
3130# pylint: disable=invalid-name
3231
3332
@@ -531,17 +530,77 @@ def delete(self, scheduleName, category):
531530 url = self .schedules .baseObj .fixUrlPath (url )
532531 self .logger .debug ("schedule url now: %s" , url )
533532 header = {'Accept' : 'application/json' }
534- response = self .baseObj .deleteResponse (url , header = header , acceptCodes = [204 ])
533+ response = self .baseObj .deleteResponse (url , header = header ,
534+ acceptCodes = [204 ])
535535 self .logger .debug ("response is: %s" , response )
536536 return response
537537
538- def __setEnabledFlag (self , scheduleName , category , enabledFlag ):
539- # first make sure the schedule exists, which at the same
540- # time will load the schedule list which can then be
541- # retrieved to determine if the schedule in question
542- # is enable or not, then if its status has changed
543- # we can resubmit that schedule as is but with the
544- # changed enable parameter
538+ def updateParameters (self , scheduleName , category , newParams ):
539+ '''
540+ used to update an existing parameter. Quick fix to support
541+ need to be able to automate update of kirk schedules.
542+
543+ :param scheduleName: Name of the schedule that is to be updated
544+ :type scheduleName: str
545+ :param category: Name of the category that is to be updated
546+ :type category: str
547+ :param newParams: a dictionary where the key is the parameter name
548+ and the value is the parameter value.
549+ :type newParams: dict
550+ '''
551+ # makeing the keys all lower case.
552+ paramsLowerCase = {}
553+ for k , v in newParams .iteritems ():
554+ paramsLowerCase [k .lower ()] = v
555+
556+ sched2Use = self .__verifyScheduleCategory (scheduleName , category )
557+ url = self .__getScheduleCategoryUrl (scheduleName , category )
558+ # update the params defined in sched2Use
559+ pubParams = sched2Use ['request' ]['publishedParameters' ]
560+ paramCnt = 0
561+ for param in pubParams :
562+ paramValue = param ['value' ]
563+ paramName = param ['name' ]
564+ # now iterate through the list of new params
565+ if paramName .lower () in paramsLowerCase :
566+ pubParams [paramCnt ]['value' ] = \
567+ paramsLowerCase [paramName .lower ()]
568+ msg = 'updated {0} from {1} to {2}' .format (
569+ paramName , paramValue , paramsLowerCase [paramName .lower ()])
570+ self .logger .info (msg )
571+ paramCnt += 1
572+ sched2Use ['request' ]['publishedParameters' ] = pubParams
573+ body = sched2Use
574+ header = {'Content-Type' : 'application/json' ,
575+ 'Accept' : 'application/json' }
576+ bodyStr = json .dumps (body )
577+ resp = self .baseObj .putResponse (url = url , data = bodyStr ,
578+ header = header )
579+ return resp
580+
581+ def __getScheduleCategoryUrl (self , scheduleName , category ):
582+ catEncode = urllib .quote (category )
583+ scheduleNameEncode = urllib .quote (scheduleName )
584+ url = self .schedules .baseObj .fixUrlPath (self .schedules .url )
585+ url = urlparse .urljoin (url , catEncode )
586+ url = self .schedules .baseObj .fixUrlPath (url )
587+ url = urlparse .urljoin (url , scheduleNameEncode )
588+ return url
589+
590+ def __verifyScheduleCategory (self , scheduleName , category ):
591+ '''
592+ checks to make sure that a given schedule and category actually
593+ exist. Will also return the data object that is currently associated
594+ with a schedule / category.
595+
596+ :param scheduleName: name of the schedule to verify
597+ :type scheduleName: str
598+ :param category: name of the category to verify
599+ :type category: str
600+
601+ :return: the data associated with the schedule and category provided
602+ as arguments
603+ '''
545604 if not self .schedules .exists (scheduleName , category ):
546605 msg = 'Cannot enable/disable the schedule: {0} in the category {1} ' + \
547606 'as there is no schedule with this name and category'
@@ -555,17 +614,17 @@ def __setEnabledFlag(self, scheduleName, category, enabledFlag):
555614 sched2Use = sched
556615 break
557616 if not sched2Use :
558- msg = "Cannot enable/disable the schedule {0} in the category {1} as " + \
559- "I am unable to find a schedule that matches this combination"
617+ msg = "Cannot enable/disable the schedule {0} in the category" + \
618+ " {1} as I am unable to find a schedule that matches " + \
619+ "this combination"
560620 msg = msg .format (scheduleName , category )
561- raise ValueError , msg
621+ raise ValueError (msg )
622+ return sched2Use
623+
624+ def __setEnabledFlag (self , scheduleName , category , enabledFlag ):
625+ sched2Use = self .__verifyScheduleCategory (scheduleName , category )
626+ url = self .__getScheduleCategoryUrl (scheduleName , category )
562627
563- catEncode = urllib .quote (category )
564- scheduleNameEncode = urllib .quote (scheduleName )
565- url = self .schedules .baseObj .fixUrlPath (self .schedules .url )
566- url = urlparse .urljoin (url , catEncode )
567- url = self .schedules .baseObj .fixUrlPath (url )
568- url = urlparse .urljoin (url , scheduleNameEncode )
569628 validStrings = ['true' , 'false' ]
570629 if isinstance (enabledFlag , bool ):
571630 if enabledFlag :
@@ -578,7 +637,7 @@ def __setEnabledFlag(self, scheduleName, category, enabledFlag):
578637 'this is not a valid value. Supply either a boolean value ' + \
579638 'or one of the following values: {1}'
580639 msg = msg .format (enabledFlag , validStrings )
581- raise ValueError , msg
640+ raise ValueError ( msg )
582641 else :
583642 enabledFlag = enabledFlag .lower ()
584643 else :
@@ -587,7 +646,7 @@ def __setEnabledFlag(self, scheduleName, category, enabledFlag):
587646 'Supply either a boolean value or a string with one of the ' + \
588647 'following values: {2}'
589648 msg = msg .format (enabledFlag , type (enabledFlag ), validStrings )
590- raise ValueError , msg
649+ raise ValueError ( msg )
591650
592651 if enabledFlag == 'true' :
593652 enabledFlagBool = True
@@ -596,15 +655,16 @@ def __setEnabledFlag(self, scheduleName, category, enabledFlag):
596655
597656 # before proceed check to see if there is actually a change to the
598657 # enabled property of it is already set to whatever the target is.
599- if sched2Use [self .const .enabled ] <> enabledFlagBool :
658+ if sched2Use [self .const .enabled ] != enabledFlagBool :
600659 sched2Use [self .const .enabled ] = enabledFlag
601660 msg = "enabled flag: {0}" .format (sched2Use [self .const .enabled ])
602661 self .logger .debug (msg )
603662 body = sched2Use
604663 header = {'Content-Type' : 'application/json' ,
605- 'Accept' : 'application/json' }
664+ 'Accept' : 'application/json' }
606665 bodyStr = json .dumps (body )
607- resp = self .baseObj .putResponse (url = url , data = bodyStr , header = header )
666+ resp = self .baseObj .putResponse (url = url , data = bodyStr ,
667+ header = header )
608668 return resp
609669
610670 def disable (self , scheduleName , category ):
0 commit comments