@@ -59,101 +59,100 @@ def add_itinerary(itinerary_list, name, location, description, start_date, end_d
5959
6060 save_itineraries (itinerary_list )
6161 return True
62- else :
63- return False
62+ return False
6463
6564
66- def edit_itinerary (itinerary_list , itinerary_option , edit_option , flight_choice , attraction_choice ):
65+ def edit_itinerary (itinerary_list , itinerary_option , edit_option , flight_choice , attraction_choice , new_value ):
6766 # Edit the itinerary list
6867 for itinerary in itinerary_list :
6968 if itinerary ["name" ] == itinerary_option :
7069 # Edit DateTime-adjacent data
7170 if edit_option == "start_date" :
72- while True :
73- start_date = input ("Start date in DD-MM-YYYY: " )
74- if not validate_dates (start_date , itinerary ["end_date" ], itinerary ["flights" ]):
75- print ("Invalid date. Please ensure it is in DD-MM-YYYY format (e.g., 12-12-2026)" )
76- else :
77- itinerary ["start_date" ] = start_date
78- break
71+ if not validate_dates (new_value , itinerary ["end_date" ], itinerary ["flights" ]):
72+ print ("Invalid date. Format required: DD-MM-YYYY (e.g., 12-12-2026)" )
73+ return False
74+ else :
75+ itinerary ["start_date" ] = new_value
76+ break
7977 elif edit_option == "end_date" :
80- while True :
81- end_date = input ("End date in DD-MM-YYYY: " )
82- if not validate_dates (itinerary ["start_date" ], end_date , itinerary ["flights" ]):
83- print ("Invalid date. Please ensure it is in DD-MM-YYYY format (e.g., 12-12-2026)" )
84- else :
85- itinerary ["end_date" ] = end_date
86- break
78+ if not validate_dates (itinerary ["start_date" ], new_value , itinerary ["flights" ]):
79+ print ("Invalid date. Format required: DD-MM-YYYY (e.g., 12-12-2026)" )
80+ return False
81+ else :
82+ itinerary ["end_date" ] = new_value
83+ break
8784 elif edit_option == "departure date" :
8885 for flight_id in itinerary ["flights" ]:
8986 if flight_id ["flight name" ] == flight_choice :
90- while True :
91- departure = input ( "Date & time of flight departure (Format: DD-MM-YYYY HH:MM): " )
92- if not validate_dates (itinerary ["start_date" ], itinerary ["end_date" ], itinerary [ "flights" ] ):
93- print ("Invalid date. Please ensure it is in DD-MM-YYYY HH:MM format (e.g., 12-12-2026 08:00)" )
94- else :
95- flight_id [ "departure date" ] = departure
96- flight_id ["flight name " ] = f" { flight_id [ "departure airport" ] } to { flight_id [ "arrival airport" ] } "
97- break
98- break
87+ test_updated_flight = [ flight_id ]
88+ test_updated_flight [ " departure date" ] = new_value
89+ if not validate_dates (itinerary ["start_date" ], itinerary ["end_date" ], test_updated_flight ):
90+ print ("Invalid date. Format required: DD-MM-YYYY HH:MM (e.g., 12-12-2026 08:00)" )
91+ return False
92+ else :
93+ flight_id ["departure date " ] = new_value
94+ break
95+ break
9996 elif edit_option == "arrival date" :
10097 for flight_id in itinerary ["flights" ]:
10198 if flight_id ["flight name" ] == flight_choice :
102- while True :
103- arrival = input ("Date & time of flight arrival (Format: DD-MM-YYYY HH:MM): " )
104- if not validate_dates (itinerary ["start_date" ], itinerary ["end_date" ], itinerary ["flights" ]):
105- print ("Invalid date & time. Please ensure it is in DD-MM-YYYY HH:MM format (e.g., 12-12-2026 08:00" )
106- else :
107- flight_id ["arrival date" ] = arrival
108- break
109- break
99+ test_updated_flight = [flight_id ]
100+ test_updated_flight ["arrival date" ] = new_value
101+ if not validate_dates (itinerary ["start_date" ], itinerary ["end_date" ], test_updated_flight ):
102+ print ("Invalid date & time. Format required: DD-MM-YYYY HH:MM (e.g., 12-12-2026 08:00" )
103+ return False
104+ else :
105+ flight_id ["arrival date" ] = new_value
106+ break
107+ break
110108 else :
111109 # Edit trip's string data (outside of flights & attractions)
112110 if edit_option == 'name' or edit_option == 'location' or edit_option == 'description' :
113111 itinerary [edit_option ] = input (f"Enter a new { edit_option } for { itinerary ['name' ]} : " )
112+ break
114113
115114 # Flights: string type options
116115 elif edit_option == 'departure airport' :
117- airport_leaving = input ("Name of airport you are departing from: " )
118116 for flight_id in itinerary ["flights" ]:
119117 if flight_id ["flight name" ] == flight_choice :
120- flight_id ["departure airport" ] = airport_leaving
121- flight_id ["flight name" ] = f"{ airport_leaving } to { flight_id ["arrival airport" ]} "
118+ flight_id ["departure airport" ] = new_value
119+ flight_id ["flight name" ] = f"{ new_value } to { flight_id ["arrival airport" ]} "
122120 break
121+ break
123122
124123 elif edit_option == 'arrival airport' :
125- arrival_airport = input ("Name of airport you are arriving at: " )
126124 for flight_id in itinerary ["flights" ]:
127125 if flight_id ["flight name" ] == flight_choice :
128- flight_id .update ({"arrival airport" : arrival_airport })
129- flight_id ["flight name" ] = f"{ flight_id ["departure airport" ]} to { arrival_airport } "
126+ flight_id .update ({"arrival airport" : new_value })
127+ flight_id ["flight name" ] = f"{ flight_id ["departure airport" ]} to { new_value } "
130128 break
129+ break
131130
132131 # Attractions: string type options
133132 elif edit_option == 'attraction_name' :
134- attraction_id_name = input ("Name of the attraction: " )
135133 for attraction in itinerary ["attractions" ]:
136134 if attraction ["attraction name" ] == attraction_choice :
137- attraction .update ({"attraction name" : attraction_id_name })
135+ attraction .update ({"attraction name" : new_value })
138136 break
137+ break
139138 elif edit_option == 'address' :
140- attraction_address = input ("New attraction address: " )
141139 for attraction in itinerary ["attractions" ]:
142140 if attraction ["attraction name" ] == attraction_choice :
143- attraction .update ({"address" : attraction_address })
141+ attraction .update ({"address" : new_value })
144142 break
143+ break
145144 elif edit_option == 'summary' :
146- attraction_summary = input ("Short summary of the attraction: " )
147145 for attraction in itinerary ["attractions" ]:
148146 if attraction ["attraction name" ] == attraction_choice :
149- attraction .update ({"summary" : attraction_summary })
147+ attraction .update ({"summary" : new_value })
150148 break
149+ break
151150 elif edit_option == 'tag(s)' :
152- attraction_tags = input ("Provide some tags that categorise what kind of activity this involves.\n Example of format required: hike, exciting, views: " )
153151 for attraction in itinerary ["attractions" ]:
154152 if attraction ["attraction name" ] == attraction_choice :
155- attraction .update ({"tag(s)" : attraction_tags })
153+ attraction .update ({"tag(s)" : new_value })
156154 break
155+ break
157156 save_itineraries (itinerary_list )
158157 # Uncomment to print for itinerary_list validation:
159158 # print(itinerary_list)
@@ -284,27 +283,27 @@ def validate_dates(start_date, end_date, flights):
284283 """
285284
286285 try :
287- datetime .strptime (start_date , "dd-mm-YYYY " )
286+ datetime .strptime (start_date , "%d-%m-%Y " )
288287 except ValueError :
289288 print ("Error: Invalid start date. Use 'DD-MM-YYYY' format." )
290289 return False
291290
292291 try :
293- datetime .strptime (end_date , "dd-mm-YYYY " )
292+ datetime .strptime (end_date , "%d-%m-%Y " )
294293 except ValueError :
295294 print ("Error: Invalid end date. Use 'DD-MM-YYYY' format." )
296295 return False
297296
298297 # Resource used for following code: https://stackoverflow.com/questions/17322208/multiple-try-codes-in-one-block
299298 for flight_info in flights :
300299 try :
301- datetime .strptime (flight_info ["departure date" ], "dd-mm-YYYY HH:MM " )
300+ datetime .strptime (flight_info ["departure date" ], "%d-%m-%Y %H:%M " )
302301 except ValueError :
303302 print ("Error: Invalid date/time for flight departure. Use 'DD-MM-YYYY HH:MM' format." )
304303 return False
305304
306305 try :
307- datetime .strptime (flight_info ["arrival date" ], "dd-mm-YYYY HH:MM " )
306+ datetime .strptime (flight_info ["arrival date" ], "%d-%m-%Y %H:%M " )
308307 except ValueError :
309308 print ("Error: Invalid date/time for flight arrival. Use 'DD-MM-YYYY HH:MM' format." )
310309 return False
0 commit comments