__author__ = "Basheeruddin Ahmed" __copyright__ = "Copyright(c) 2014, Cisco Systems, Inc." __license__ = "New-style BSD" __email__ = "syedbahm@cisco.com" import sys import util import settings # #Creates the specified number of cars based on Cars yang model # using RESTCONF # def addCar(numberOfCars): for x in range(1, numberOfCars+1): strId = str(x) payload = settings.add_car_payload_template.substitute(id=strId,category="category"+strId,model="model"+strId, manufacturer="manufacturer"+strId, year=(2000+x%100)) print("payload formed after template substitution=") print(payload) # Send the POST request resp = util.post(settings.getAddCarUrl(),"admin", "admin",payload) print("the response of the POST to add car=") print(resp) print("getting the cars in store ") resp = getCars(0) #TBD: Detailed validation # #Creates the specified number of persons based on People yang model # using main RPC # # To enable RPC a non-user input person entry is created with personId=user0 # # def addPerson(numberOfPersons): #FOR RPC TO WORK PROPERLY THE FIRST ENTRY SHOULD BE VIA RESTCONF if(numberOfPersons==0): strId =str(numberOfPersons) payload = settings.add_person_payload_template.substitute(personId="user"+strId,gender="unknown",age=0, address=strId + "Way, Some Country, Some Zip "+strId, contactNo= "some number"+strId) # Send the POST request using RESTCONF resp = util.nonprintpost(settings.getAddPersonUrl(),"admin", "admin",payload) return genderToggle = "Male" for x in range(1, numberOfPersons+1): if(genderToggle == "Male"): genderToggle = "Female" else: genderToggle = "Male" strId = str(x) payload = settings.add_person_rpc_payload_template.substitute(personId="user"+strId,gender=genderToggle,age=(20+x%100), address=strId + "Way, Some Country, Some Zip "+str(x%1000), contactNo= "some number"+strId) # Send the POST request using RPC resp = util.post(settings.getAddPersonRpcUrl(),"admin", "admin",payload) print("payload formed after template substitution=") print(payload) print("the response of the POST to add person=") print(resp) print("getting the persons for verification") resp=getPersons(0) #TBD: Detailed validation #This method is not exposed via commands as only getCarPersons is of interest #addCarPerson entry happens when buyCar is called # # To enable RPC a non-user input car-person entry is created with personId=user0 # # def addCarPerson(numberOfCarPersons): #FOR RPC TO WORK PROPERLY THE FIRST ENTRY SHOULD BE VIA RESTCONF if(numberOfCarPersons==0): payload = settings.add_car_person_template.substitute(Id=str(numberOfCarPersons),personId="user"+str(numberOfCarPersons)) # Send the POST request REST CONF resp = util.nonprintpost(settings.getAddCarPersonUrl(),"admin", "admin",payload) return for x in range(1, numberOfCarPersons+1): strId = str(x) payload = settings.add_car_person_template.substitute(Id=strId,personId="user"+strId) # Send the POST request REST CONF resp = util.post(settings.getAddCarPersonUrl(),"admin", "admin",payload) print("payload formed after template substitution=") print(payload) print("the response of the POST to add car_person=") print(resp) print("getting the car_persons for verification") resp=getCarPersonMappings(0) #TBD detailed validation # # Invokes an RPC REST call that does a car purchase by a person id # # It is expected that the Car and Person entries are already created # before invoking this method # # def buyCar(numberOfCarBuyers): for x in range(1, numberOfCarBuyers+1): strId = str(x) payload = settings.buy_car_rpc_template.substitute(personId="user"+strId,carId=strId) # Send the POST request using RPC resp = util.post(settings.getBuyCarRpcUrl(),"admin", "admin",payload) print("payload formed after template substitution=") print(payload) print("the response of the POST to buycar=") print(resp) print("getting the car_persons for verification") resp=getCarPersonMappings(0) # # Uses the GET on car:cars resource # to get all cars in the store using RESTCONF # # def getCars(ignore): resp = util.get(settings.getCarsUrl(),"admin", "admin") print (resp) return resp # # Uses the GET on people:people resource # to get all persons in the store using RESTCONF # #This also returns the dummy entry created for routed RPC # with personId being user0 # # # def getPersons(ignore): resp = util.get(settings.getPersonsUrl(),"admin","admin") print (resp) return resp # # Uses the GET on car-people:car-people resource # to get all car-persons entry in the store using RESTCONF # #This also returns the dummy entry created for routed RPC # with personId being user0 # # def getCarPersonMappings(ignore): resp = util.get(settings.getCarPersonUrl(),"admin","admin") print (resp) return resp # #delete all cars in the store using RESTCONF # # def deleteAllCars(ignore): util.delete(settings.getCarsUrl(),"admin","admin") resp = getCars(ignore) print("Cars in store after deletion:"+ str(resp)) # #delete all persons in the store using RESTCONF # # def deleteAllPersons(ignore): util.delete(settings.getPersonsUrl(),"admin","admin") resp = getPersons(ignore) print("Persons in store after deletion:"+ str(resp)) # # Usage message shown to user # def options(): command = 'ac=Add Car\n\t\tap=Add Person \n\t\tbc=Buy Car\n\t\tgc=Get Cars\n\t\tgp=Get Persons\n\t\t' \ 'gcp=Get Car-Person Mappings\n\t\tdc=Delete All Cars\n\t\tdp=Delete All Persons)' param = '\n\t is\n\t\t' \ 'number of cars to be added if =ac\n\t\t' \ 'number of persons to be added if =ap\n\t\t' \ 'number of car buyers if =bc\n\t\t'\ 'pass 0 if =gc or gp or gcp or dc or dp'\ usageString = 'usage: python crud \nwhere\n\t = ODL server ip address' \ '\n\t = any of the following commands \n\t\t' usageString = usageString + command +param print (usageString) # # entry point for command executions # def main(): if len(sys.argv) < 4: options() quit(0) settings.hostname = sys.argv[1] settings.port = '8080' call = dict(ac=addCar, ap=addPerson, bc=buyCar, gc=getCars, gp=getPersons, gcp=getCarPersonMappings,dc=deleteAllCars,dp=deleteAllPersons) #FOR RPC TO WORK PROPERLY THE FIRST PERSON SHOULD BE ADDED VIA RESTCONF addPerson(0) #FOR RPC TO WORK PROPERLY THE FIRST PERSON SHOULD BE ADDED VIA RESTCONF addCarPerson(0) call[sys.argv[2]](int(sys.argv[3])) # # main invoked main()