def enter_food_items(): global category_items global category_items_quantity #Getting valid item from the displayed items for the selected category item_selected=input("Enter a Items for order: ") print() print("Item Selected from the Menu : ") print(item_selected) #Splitting the item_selected with respect to multiple items selected category_items = item_selected.split(',') ''' #print("In function def enter_food_items(category_items): ") #printing the list of multi selects or single selects using split print(category_items) print() Validate the Food Items enter_food_items input ''' try : item_selected = Validate.validate_item_present(category_items) except Validate_item_present as e: print(e) #Extra print #print(" The selected item is Not Available , Please Re-Enter Again") enter_food_items() finally : pass
def enter_food_quantity(): global category_items global category_items_quantity ''' #Taking input for quantity of Food Items #Splitting the category with respect to multiple items selected or single item ''' quantity_req = input("Enter a quantity required : ") category_items_quantity = quantity_req.split(',') #Checking values returned are digits for number in category_items_quantity : if Validate.validate_input_is_decimal(number) == False : enter_food_quantity() elif int(number) > 25 and int(number) <= 0 : enter_food_quantity() print("Category name , Quantity") for category_index , quantity_item in zip(category_items , category_items_quantity) : print(category_index ," ", quantity_item) FoodModule.Food.cart_dict[category_index] = quantity_item
def search_as_guest(): try: FoodModule.Food.is_registered_user = False city1 = input("Enter your city:") area1 = input("Enter your area:") city = city1.upper() area = area1.upper() list_of_restaurants = Validate.validate_search_category(city, area) ''' Print the details ''' print("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") print( "resturantname type of food likes dislikes rating") for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() filter(city, area) except CustomException2.Invalidcityareaname as e: print(e) except Exception as e: print(e) print()
def search_as_login(city,area): try: list_of_restaurants=Validate.validate_search_category(city,area) print("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") print("resturantname type of food likes dislikes rating") for select in list_of_restaurants: print(select.get_restaurantname()," ",select.get_type_of_food()," " , select.get_likes()," ",select.get_dislikes()," ",select.get_rating()) print() choice=input("Do you want to filter or select restaurant?(F/S)") if (choice=="F"): filtersearch.Filter_search() if (choice=="S"): resturant_name=input("Enter the resturant name:") print("") except InvalidCategoryException as e: print(e) except Exception as e: print("here is") print("Sorry. Some system error occurred") print(e) print()
def display_highest_booked_hotel_by_city(): print("In Function display_highest_booked_hotel_by_city") city1 = input("Enter city name:") city = city1.upper() list_of_restaurants = Validate.validate_city_wise_highest_booked(city) print("resturantname", "\t", "city", "\t", "area", "\t", "rating") for select in list_of_restaurants: print(select.get_restaurantname(), "\t", select.get_city(), "\t", select.get_area(), "\t", select.get_rating()) print()
def display_most_rated_hotel(): print("In Function def display_most_rated_hotel():") list_of_restaurants = Validate.validate_highest_rated() print("resturantname", "\ttype of food", "\tlikes", "\tdislikes", "\trating") for select in list_of_restaurants: print(select.get_restaurantname(), "\t", select.get_type_of_food(), "\t", select.get_likes(), "\t", select.get_dislikes(), "\t", select.get_rating()) print()
def get_restaurantname(city, area): try: restaurant_name1 = input("Enter the restaurant name:") restaurant_name = restaurant_name1.upper() list_of_restaurants = Validate.validate_hotel_name( city, area, restaurant_name) print(restaurant_name) FoodModule.Food.restaurant_name = restaurant_name FoodModule.Food.restaurant_city = city FoodModule.Food.restaurant_area = area except CustomException2.Invalidselectname as e: print(e) except Exception as e: print("Sorry. Some system error occurred") print(e)
def availability_view(category_items): ''' Validate the Food Items Availability input ''' #print("In function def availability_view(category_items): ") food_available = False try : food_available = Validate.validate_item_available(category_items) except Validate_item_available as e: print(e) #print(" after e Selected item not Available!!! Please Select a different item") view_category_items(category_item_name) finally : pass
def validate_restaurant_name(restaurant): global list_of_category global list_numbers ''' Validate the user input ''' #Empty the list_numbers del list_numbers[:] list_of_category = Validate.validate_view_category(restaurant) for i in range(1, len(list_of_category) + 1): list_numbers.append(i) #Using Zip Functionality for zipping two lists print("Index ", "Category") for index, category in zip(list_numbers, list_of_category): print(index, " ", category) print()
def search_as_guest(): try: city = input("Enter your city:") area = input("Enter your area:") # city=city1.upper() # area=area1.upper() list_of_restaurants = Validate.validate_search_category(city, area) ''' Print the details ''' print("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") print( "resturantname type of food likes dislikes rating") for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() choice = input("Do you want to filter or select restaurant?(F/S)") try: if (choice.upper() == "F"): filtersearch.Filter_search(city, area) except CustomException2.Invalidfilter as e: print(e) except Exception as e: print("Choose F or S") print(e) if (choice.upper() == "S"): resturant_name = input("Enter the resturant name:") print("") except CustomException2.InvalidCategoryException as e: print(e) except Exception as e: print(e) print()
def select_category_choice(): global list_of_category global list_numbers choice=input("Please Select The Category with its Corresponding Number :") v_choice = Validate.validate_input_is_decimal(choice) # print(v_choice) # print("len(list_of_category)") # print(len(list_of_category)) if v_choice == False: print("Please select from the given choices only.") select_category_choice() else : if int(choice) <= len(list_of_category) and int(choice) >= 1 : for index in zip(list_numbers,list_of_category) : if int(choice) == index[0] : print("Choice Selected : ", index[0],"-", index[1]) return index[1] else : print("Please select from the given choices only.") select_category_choice()
def get_restaurantname(city, area): try: restaurant_name1 = input("Enter the restaurant name:") restaurant_name = restaurant_name1.upper() list_of_restaurants = Validate.validate_hotel_name( city, area, restaurant_name) print(restaurant_name) #Saving to Global Project Variables FoodModule.Food.restaurant_name = restaurant_name FoodModule.Food.restaurant_city = city FoodModule.Food.restaurant_area = area from functionality import ViewFunctions #Calling Module 3 print("Calling Module 3") ViewFunctions.view_category() except CustomException2.Invalidselectname as e: print(e) except Exception as e: print("Sorry. Some system error occurred") print(e)
def search_as_login(city1, area1): try: city = city1.upper() area = area1.upper() list_of_restaurants = Validate.validate_search_category(city, area) print("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") print( "resturantname type of food likes dislikes rating") for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() filter(city, area) except CustomException2.InvalidCategoryException as e: print(e) except Exception as e: print("Sorry. Some system error occurred") print(e) print()
def view_category_items(category): try: ''' Validate the user input ''' list_of_category_items=Validate.validate_view_category_items(category) ''' Print the details ''' for product in list_of_category_items: print(product.get_product_id()," ",product.get_product_name()," ",product.get_price()) print() #Getting valid item from the displayed items for the selected category item_selected=input("Enter a Items for order: ") print() category_items = [] category_items_quantity = [] #Splitting the category with respect to multiple items selected category_items = category.split(',') quantity_req =input("Enter a quantity required : ") #Splitting the category with respect to multiple items selected category_items_quantity = quantity_req.split(',') for index , category in zip(category_items , list_of_category_items) : print(index ," ", category) print() choice=input("Please Select The Category. Enter Corresponding Number ") if(choice=="1"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="2"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="3"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="4"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="5"): category_id=input("Enter the Category ID") '''
def view_category(): try: restaurant=input("Enter a category: ") print() ''' Validate the user input ''' list_of_category=Validate.validate_view_category(restaurant) ''' Print the details ''' for index , category in list_of_category: print(index ," ", category) print() choice=input("Please Select The Category. Enter Corresponding Number ") if(choice=="1"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="2"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="3"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="4"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="5"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' elif(choice=="6"): category_id=input("Enter the Category ID") ''' Here we are invoking a dummy function and passing the data to it. This dummy function has to be completed by another programmer. ''' Checkout.checkout(category_id) ''' Handle all the exceptions that can occur ''' except InvalidCategoryException as e: print(e) except Exception as e: print("Sorry. Some system error occurred") print(e) print()
def Filter_search(city1, area1): city = city1.upper() area = area1.upper() filter = input("Filter based on:") temp = 0 filter_list = filter.split(",") list = [] for value in filter_list: list.append(value.lower()) for value in list: if value == "rating" or value == "likes" or value == "dislikes" or value == "type of food": temp = 0 else: temp += 1 if temp == 0: if len(list) == 1: for value in list: if value == "rating": var1 = input("Enter the rating range:") var1_list = var1.split("-") rating_lower = var1_list[0] rating_upper = var1_list[1] list_of_restaurants = Validate.validate_search_as_rating( city, area, rating_lower, rating_upper) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) elif value == "likes": list_of_restaurants = Validate.validate_search_as_likes( city, area) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) elif value == "dislikes": list_of_restaurants = Validate.validate_search_as_dislikes( city, area) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) elif value == "type of food": var1 = input("enter your food type:(N/V):") list_of_restaurants = Validate.validate_search_as_type( city, area, var1) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) if len(list) == 2: if "rating" in list: var1 = input("Enter the rating range:") var1_list = var1.split("-") rating_lower = var1_list[0] rating_upper = var1_list[1] if "dislikes" in list: list_of_restaurants = Validate.validate_search_as_rating_dislikes( city, area, rating_lower, rating_upper) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) elif "likes" in list: list_of_restaurants = Validate.validate_search_as_rating_likes( city, area, rating_lower, rating_upper) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() select = input( "Do u wish to select restaurant or go back to previous menu?(S/P)" ) previous_select(city, area) elif "type of food" in list: var1 = input("Enter youe type of food:") list_of_restaurants = Validate.validate_search_as_rating_type( city, area, rating_lower, rating_upper, var1) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) if "dislikes" in list: if "likes" in list: list_of_restaurants = Validate.validate_search_as_dislike_like( city, area) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) elif "type of food" in list: var1 = input("Enter youe type of food:") list_of_restaurants = Validate.validate_search_as_dislike_type( city, area, var1) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) if "likes" in list: if "type of food" in list: var1 = input("Enter youe type of food:") list_of_restaurants = Validate.validate_search_as_like_type( city, area, var1) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) if len(list) == 3: if "rating" in list: var1 = input("Enter the rating range:") var1_list = var1.split("-") rating_lower = var1_list[0] rating_upper = var1_list[1] if "dislikes" in list: if "likes" in list: list_of_restaurants = Validate.validate_search_as_rating_dislike_like( city, area, rating_lower, rating_upper) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) if "type of food" in list: var1 = input("Enter youe type of food:") list_of_restaurants = Validate.validate_search_as_rating_dislike_type( city, area, rating_lower, rating_upper, var1) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) if "likes" in list: if "type of food" in list: var1 = input("Enter youe type of food:") list_of_restaurants = Validate.validate_search_as_like_type_rating( city, area, rating_lower, rating_upper, var1) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) if "dislikes" in list: if "likes" in list: if "type of food" in list: var1 = input("Enter youe type of food:") list_of_restaurants = Validate.validate_search_as_dislike_like_type( city, area, var1) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) if len(list) == 4: if "rating" in list: var1 = input("Enter the rating range:") var1_list = var1.split("-") rating_lower = var1_list[0] rating_upper = var1_list[1] if "dislikes" in list: if "likes" in list: if "type of food" in list: var1 = input("Enter youe type of food:") list_of_restaurants = Validate.validate_search_as_all( city, area, rating_lower, rating_upper, var1) print( "resturantname type of food likes dislikes rating" ) for select in list_of_restaurants: print(select.get_restaurantname(), " ", select.get_type_of_food(), " ", select.get_likes(), " ", select.get_dislikes(), " ", select.get_rating()) print() previous_select(city, area) else: print( "invalid filter,please choose from rating,likes,dislikes,type of food" ) Filter_search(city, area)
def view_category(): try: global category_item_name restaurant=input("Enter a Restaurant Name: ") print() list_numbers = [] #list_of_category_str = [] FoodModule.Food.restaurant_name = restaurant ''' Validate the user input ''' list_of_category=Validate.validate_view_category(restaurant) length_categories = len(list_of_category) for i in range(1,length_categories+1) : list_numbers.append(i) #Using Zip Functionality for zipping two lists print("Index ","Category") for index , category in zip(list_numbers,list_of_category) : print(index," " ,category) print() choice=input("Please Select The Category with its Corresponding Number ") if(choice=="1"): #Converting to int for easy manipulation category_item = int(choice) #Storing the name from displayed items for specific category category_item_name = list_of_category[category_item-1] print("Choice Selected :" , choice , ":" , category_item_name) FoodModule.Food.category = category_item_name elif(choice=="2"): #Converting to int for easy manipulation category_item = int(choice) #Storing the name from displayed items for specific category category_item_name = list_of_category[category_item-1] print("Choice Selected :" , choice , ":" , category_item_name) FoodModule.Food.category = category_item_name elif(choice=="3"): #Converting to int for easy manipulation category_item = int(choice) #Storing the name from displayed items for specific category category_item_name = list_of_category[category_item-1] print("Choice Selected :" , choice , ":" , category_item_name) FoodModule.Food.category = category_item_name elif(choice=="4"): #Converting to int for easy manipulation category_item = int(choice) #Storing the name from displayed items for specific category category_item_name = list_of_category[category_item-1] print("Choice Selected :" , choice , ":" , category_item_name) FoodModule.Food.category = category_item_name elif(choice=="5"): #Converting to int for easy manipulation category_item = int(choice) #Storing the name from displayed items for specific category category_item_name = list_of_category[category_item-1] print("Choice Selected :" , choice , ":" , category_item_name) FoodModule.Food.category = category_item_name elif(choice=="6"): #Converting to int for easy manipulation category_item = int(choice) #Storing the name from displayed items for specific category category_item_name = list_of_category[category_item-1] print("Choice Selected :" , choice ,":", category_item_name) FoodModule.Food.category = category_item_name print() #Calling def view_category_items(category): with parameter view_category_items(category_item_name) ''' Handle all the exceptions that can occur ''' except InvalidCategoryException as e: print(e) except Exception as e: print("Sorry. Some system error occurred") print(e) print()
def view_category_items(category): global category_items global category_items_quantity try: ''' Validate the user input & get Restaurant name from Class Global Variables ''' restaurant_name = FoodModule.Food.restaurant_name list_of_category_items=Validate.validate_view_category_items(category,restaurant_name) # print("Printing restaurant name accessed from FoodModule.Food.restaurant_name ") # print(restaurant_name) # print("After List_of_category_items=Validate.val") ''' Print the food items details ''' print("FoodName \t Price \t Availability") for item in list_of_category_items: print(item.get_food_name(),"\t",item.get_price(),"\t",item.get_availability()) print() ''' Calling the function defined below ''' enter_food_items() availability_view(category_items) enter_food_quantity() ''' Printing Dictionary #print("Printing Dictionary") ''' print("FoodName \t Quantity") for index , value in FoodModule.Food.cart_dict.items() : print(index , " \t" ,value) ''' WIll call them later after debugging next function #Temporary hardcoding for easy debugging # username = "******" # Checkout.checkout(username) ''' ''' Calling Class Checkout for further processing ''' username = FoodModule.Food.registered_user Checkout.checkout(username) print() ''' Handle all the exceptions that can occur ''' except InvalidCategoryException as e: print(e) except InvalidCatItemsException as e: print(e) except Exception as e: #Will edit the Error messages in View functions print("Sorry. Some system error occurred.") print(e) finally : pass
def pushLinked(): ##TODO: validate and push json load to task table print 'datttttttta' print request.data print 'jsonnnnnnnn' print request.json if not request.json: ##is a dict!! return error_helper("The request body does not have JSON Data",400) ##removed entities, rels alone can be pushed if previous ids known ##changed name to meta_desc required_master_props = ['taskid', 'userid', 'token'] for prop in required_master_props: if not prop in request.json: return error_helper(str(prop)+"property not in json data", 400) # patch for one of these should be present but never none # relations can exist in isolation coz of entities that are already present in db oneofthese = ['entities','relations'] flag = False for prop in oneofthese: if prop in request.json: flag = True break if not flag: return error_helper("neither entities nor relations in json data", 400) taskid = request.json['taskid'] tokenid = request.json['token'] userid = request.json['userid'] ##XXX: validate these three varibales ##XXX: tken, userid, task all valid if not taskid.isdigit(): return error_helper("taskid should be an integer", 400) # INFO: tokenid is just for initial validation, will not be saved # taskid and userid will be saved ##TODO: if the combination is valid ##else abort ##TODO: get fetchdate and source_url to entities, , 'fetchdate', 'sourceurls' ## MAJOR TODO! ## some props are interanally reserved crawl_en_id not allowed for nodes ## what about ternary relations? ## ## check for strings ## validation checks: if task exists, ## ids repeated in nodes in json and in actual ## ids repeated in relations ## source_urls known in particular format ## fetch date in format ## allowed labels ## props allowed ## values all in strings or particular format? ## apis to add a new property in allowed dict with its description? ## ids ints? ## check if nodeid already exists in temp graph db, or relid ## create indexes and contsraints will have to add an internal label and internal relation label ##MAJOR TODO what to do about metadata? ##"description": "Naveen Jindal Connections", ##"fetchdate": "01/01/2011", ##use this metadata ##entities must part in request json entities = [] if 'entities' in request.json: entities = request.json['entities'] ##MAJOR TODO: change this to nodes ##can be there or can not be, in json relations = [] if 'relations' in request.json: relations = request.json['relations'] # this is for returning the json to the user! subgraph = {} ##no need to return back token to the user #subgraph['token'] = tokenid ##TODO: exatly this? _token! conflict? subgraph['userid'] = userid subgraph['taskid'] = taskid #subgraph['pushdate'] = getTimeNow() nodes = {} links = {} ##MAJOR TODO reserved keywords and required keywords list ##MAJOR TODO format and pattern against keywords with regex ?? required_endict_props = ['labels','properties','id','fetchdate','sourceurl'] reserved_en_props = ['crawl_en_id','resolvedWithUUID','taskname','token', '_token','workname','date','time','resolvedDate', 'resolvedAgainst','verifiedBy','resolvedBy','verifiedDate','update', 'lastUpdatedBy','lastUpdatedOn', '_crawl_en_id_','_token_','_taskname_', '_id_','_nodenumber_','taskid','_taskid_','verifiedby','_verifiedby_','verifydate', 'pushdate','_pushedby_','uuid','_uuid_','labels','_labels_','tasktype','_tasktype_','relid','_relid_'] ##_nodeid_ is the node number along with _token_ and _taskname_ will help us in identifying the node! so do not worry! ## ALIASES CODE # required_en_props = ['name','aliases'] ##inside entity['properties'] required_en_props = ['name'] ##inside entity['properties'] validate = Validate() ##TODO: move all validations to this class afterwards for en in entities: if not 'id' in en: return error_helper('id required attribute missing for an entity', 400) #print entities[en] nodeid = en['id'] for prop in required_endict_props: if not prop in en: msg = str(prop)+' required attribute missing for entity %s' %(nodeid) return error_helper(msg, 400) if not nodeid.isdigit(): msg = 'entity id should be a number for entity id %s' %(nodeid) return error_helper(msg, 400) if nodeid in nodes: msg = 'id repeated under entities for entity id %s' %(nodeid) return error_helper(msg, 400) if not len(en['labels'])>0: msg = 'Labels list empty for an entity for entity id %s' %(nodeid) return error_helper(msg, 400) for prop in required_en_props: if (not prop in en['properties']) : ##patch for allowing hyperedgenode, checked doesnt affect anything else msg = '%s required property missing for an entity for entity id %s' %(prop, nodeid) return error_helper(msg, 400) ## ALIASES CODE # if not len(en['properties']['aliases'])>0: # return error_helper('aliases list empty for an entity', 400) # ##TODO: how to verify if the name is in aliases? ## XXX: aliases to be handled as a csv?? ##keep it as it is will add - will have to change code when generating keywords etc. ## Merge two options for all strings- assume csv seperate - add with "" and then see if lists do not have duplicates append and use ## aliases not a list many changes, many places! ##or you can just assume a list and assume no prop named aliases for prop in reserved_en_props: if prop in en['properties']: msg = str(prop)+' reserved property not allowed explicitly for an entity for entity id %s' %(nodeid) return error_helper(msg, 400) allPropnamesValid, prop = validate.checkAllPropnamesValid(en['properties']) if not allPropnamesValid: msg = str(prop)+' cannot begin or end with underscore for entity id %s' %(nodeid) return error_helper(msg, 400) ## MAJOR todo: determine automatically that the type is a list!! ## Also push it then like a list - but will have to maintain a list of props that can be list ## OR MV and check here back! nodelabels = en['labels'] fetchdate = en['fetchdate'] sourceurl = en['sourceurl'] if not fetchdate.isdigit(): msg = 'fecthdate should be a long time since epoch, negative if dates before 1970 for entity id %s' %(nodeid) return error_helper(msg, 400) if not validate.validateUrl(sourceurl): msg = 'sourceurl should be valid url for entity for entity id %s' %(nodeid) return error_helper(msg, 400) boolval, prop = validate.checkInternalProps(en['properties']) if not boolval: msg = 'prop %s not in correct format for entity id %s' %(prop,nodeid) return error_helper(msg, 400) nodeprops = {} for prop in en['properties']: # if prop != 'aliases': ##ALIASES CODE ##for all MV -- json.loads? or somehting else? nodeprops[prop] = en['properties'][prop] ### ALIASES CODE # nodeprops['aliases'] = [] # for val in en['properties']['aliases']: # nodeprops['aliases'].append(val) # nodeprops = en['properties'] nodeprops['_pushdate_'] = getTimeNow() nodeprops['_crawl_en_id_'] = 'en_'+taskid+'_'+str(nodeid) # nodeprops['_token_'] = tokenid ##TODO: if you change this!, will have to change code for entity_read macro. nodeprops['_taskid_'] = taskid nodeprops['_nodenumber_'] = nodeid nodeprops['_pushedby_'] = userid nodeprops['_fetchdate_'] = int(fetchdate) nodeprops['_sourceurl_'] = sourceurl nodes[nodeid] = {'labels':nodelabels,'properties':nodeprops} required_reldict_props = ['label','properties','start_entity','end_entity','bidirectional','id','fetchdate','sourceurl'] reserved_rel_props = ['crawl_rel_id','resolvedWithRELID','taskname','token','_token','workname','date','time','resolvedDate','resolvedAgainst','verifiedBy','resolvedBy','verifiedDate','update','lastUpdatedBy','lastUpdatedOn','_crawl_rel_id_','_token_','_taskname_','_id_','_relnumber_','taskid','_taskid_','verifiedby','_verifiedby_','verifydate', 'pushdate','uuid','_uuid_','labels','_labels_'] ##just like the above _nodenumber_ required_rel_props = [] ##inside entity['properties'] for rel in relations: if not 'id' in rel: return error_helper('id required attribute missing for a relation', 400) linkid = rel['id'] for prop in required_reldict_props: if not prop in rel: msg = str(prop)+' required attribute missing for relation id %s' %(linkid) return error_helper(str(prop)+' required attribute missing for a relation', 400) if linkid in links: msg = 'id repeated under relations for relation id %s' %(linkid) return error_helper(msg, 400) if not linkid.isdigit(): msg = 'linkid is not a number for relation id %s' %(linkid) return error_helper(msg,400) linklabel = rel['label'] if len(linklabel)<3: msg = 'Label too short for a relation for relation id %s' %(linkid) return error_helper(msg, 400) bidirectional = rel['bidirectional'] if bidirectional!='True' and bidirectional!='False': ##decision taken avoid confusion yes no is default! ##TODO: add rules apis! msg = 'bidirectional not True/False for a for a relation for relation id %s' %(linkid) return error_helper(msg, 400) for prop in required_rel_props: if not prop in rel['properties']: msg = str(prop)+' required property missing for a relation for relation id %s' %(linkid) return error_helper(msg, 400) for prop in reserved_rel_props: if prop in rel['properties']: msg = str(prop)+' reserved property not allowed explicitly for a relation for relation id %s' %(linkid) return error_helper(msg, 400) allPropnamesValid, prop = validate.checkAllPropnamesValid(rel['properties']) if not allPropnamesValid: msg = str(prop)+' cannot begin or end with underscore for relation id %s' %(linkid) return error_helper(msg, 400) linkprops = rel['properties'] fetchdate = rel['fetchdate'] sourceurl = rel['sourceurl'] if not fetchdate.isdigit(): msg = 'fetchdate should be a long time since epoch, negative if dates before 1970 for relation id %s' %(linkid) return error_helper(msg, 400) if not validate.validateUrl(sourceurl): msg = 'sourceurl should be valid url for entity for relation id %s' %(linkid) return error_helper(msg, 400) boolval, prop = validate.checkInternalProps(linkprops) if not boolval: msg = 'prop %s not in correct format for relation id %s' %(prop, linkid) return error_helper(msg, 400) startnode = 'en_'+taskid+'_'+str(rel['start_entity']) endnode = 'en_'+taskid+'_'+str(rel['end_entity']) linkprops['_crawl_rel_id_'] = 'rel_'+taskid+'_'+str(linkid) #linkprops['_token_'] = tokenid linkprops['_taskid_'] = taskid linkprops['_relnumber_'] = linkid linkprops['bidirectional'] = bidirectional linkprops['_pushedby_'] = userid linkprops['_pushdate_'] = getTimeNow() linkprops['_fetchdate_'] = fetchdate linkprops['_sourceurl_'] = sourceurl links[linkid] = {'label':linklabel,'properties':linkprops,'start_entity':startnode, 'end_entity':endnode} posted, msg = postSubGraph(getGraph(), nodes, links, tokenid, taskid) if not posted: return error_helper(msg, 400) subgraph['entities'] = nodes subgraph['relations'] = links data = jsonify(subgraph) return data, 201 ## 201 is for creation!