11from src .file_handler import load_itineraries , save_itineraries
22from datetime import datetime
33from pick import pick
4- from anytree import Node , RenderTree
5- from pickpack import pickpack , PickPacker , AnyNode
64from rich .console import Console
75from rich .table import Table
86from rich import print
@@ -22,14 +20,15 @@ def add_itinerary(itinerary_list, name, location, description, start_date, end_d
2220 Side Effects:
2321 - Saves the updated itinerary list to a file using `save_itineraries`.
2422 """
25- # TEST: check that all items have been transferred correctly
26- print (name )
27- print (location )
28- print (description )
29- print (start_date )
30- print (end_date )
31- print (flights )
32- print (attractions )
23+ # Print TEST: Uncomment to check that all items have been transferred correctly
24+ # print(name)
25+ # print(location)
26+ # print(description)
27+ # print(start_date)
28+ # print(end_date)
29+ # print(flights)
30+ # print(attractions)
31+ # print("TEST ENDS HERE")
3332
3433 if validate_dates (start_date , end_date , flights ):
3534 # Add the new itinerary after validation checks
@@ -42,10 +41,12 @@ def add_itinerary(itinerary_list, name, location, description, start_date, end_d
4241 "flights" : flights ,
4342 "attractions" : attractions
4443 }
45- print (new_itinerary )
44+ # Uncomment to print for itinerary validation:
45+ # print(new_itinerary)
4646
4747 itinerary_list .append (new_itinerary )
48- print (itinerary_list )
48+ # Uncomment to print for itinerary_list validation:
49+ # print(itinerary_list)
4950
5051 save_itineraries (itinerary_list )
5152 return True
@@ -145,7 +146,8 @@ def edit_itinerary(itinerary_list, itinerary_option, edit_option, flight_choice,
145146 attraction .update ({"tag(s)" : attraction_tags })
146147 break
147148 save_itineraries (itinerary_list )
148- print (itinerary_list )
149+ # Uncomment to print for itinerary_list validation:
150+ # print(itinerary_list)
149151 return True
150152
151153
@@ -159,7 +161,8 @@ def add_new_flight(itinerary_list, itinerary_name, new_flights):
159161 print (f"Duplicate flight detected: { flight ["flight name" ]} !" )
160162 print ("This flight will not be added." )
161163 save_itineraries (itinerary_list )
162- print (itinerary_list )
164+ # Uncomment to print for itinerary_list validation:
165+ # print(itinerary_list)
163166 return True
164167
165168
@@ -173,7 +176,8 @@ def add_new_attraction(itinerary_list, itinerary_name, new_attractions):
173176 print (f"Duplicate attraction detected: { attraction ["attraction name" ]} !" )
174177 print ("This attraction will not be added." )
175178 save_itineraries (itinerary_list )
176- print (itinerary_list )
179+ # Uncomment to print for itinerary_list validation:
180+ # print(itinerary_list)
177181 return True
178182
179183
@@ -208,15 +212,36 @@ def view_itineraries(itinerary_list):
208212 return True
209213
210214
211- def delete_itinerary (chosen_itinerary ):
212- itinerary_list = load_itineraries ()
213-
214- print ("What would you like to delete?" )
215- # Use pickpack module (https://github.com/anafvana/pickpack#map-function-for-nested-lists)
216- pass
215+ def delete_itinerary (itinerary_list , itinerary_to_delete ):
216+ for itinerary in itinerary_list :
217+ if itinerary ["name" ] == itinerary_to_delete :
218+ itinerary_list .remove (itinerary )
219+ save_itineraries (itinerary_list )
220+ # Uncomment to print for itinerary_list validation:
221+ # print(itinerary_list)
222+ return True
223+ return False
217224
218225
219- # Print functions
226+ def delete_itinerary_item (itinerary_list , flights_or_attractions_type , itinerary_name , item_to_delete ):
227+ for itinerary in itinerary_list :
228+ if itinerary ["name" ] == itinerary_name :
229+ if flights_or_attractions_type == "flights" :
230+ for item in itinerary ["flights" ]:
231+ if item ["flight name" ] == item_to_delete :
232+ itinerary ["flights" ].remove (item )
233+ save_itineraries (itinerary_list )
234+ return True
235+ elif flights_or_attractions_type == "attractions" :
236+ for item in itinerary ["attractions" ]:
237+ if item ["attraction name" ] == item_to_delete :
238+ itinerary ["attractions" ].remove (item )
239+ save_itineraries (itinerary_list )
240+ return True
241+ return False
242+
243+
244+ # Print rich table function
220245def print_table (trips ):
221246 trip_console = Console ()
222247 trip_table = Table (title = "Itineraries" , show_lines = True )
@@ -233,14 +258,14 @@ def print_table(trips):
233258 flight_list = ''
234259 attraction_list = ''
235260 if len (trip ["flights" ]) == 1 :
236- flight_list = f'[bold red]{ flight [ " flight name" ]} [/bold red] \n Depart: { flight [ " departure date" ]} \n Arrive: { flight ["arrival date" ]} \n '
261+ flight_list = f'[bold red]{ trip [ "flights" ][ 0 ][ " flight name" ]} [/bold red] \n Depart: { trip [ "flights" ][ 0 ][ " departure date" ]} \n Arrive: { trip [ "flights" ][ 0 ] ["arrival date" ]} \n '
237262 else :
238263 for flight in trip ["flights" ]:
239264 flight_item = f'[bold red]{ flight ["flight name" ]} [/bold red] \n Depart: { flight ["departure date" ]} \n Arrive: { flight ["arrival date" ]} \n '
240265 flight_list = flight_list + f'{ flight_item } '
241266
242267 if len (trip ["attractions" ]) == 1 :
243- attraction_list = f'[bold red]{ attraction [ " attraction name" ]} [/bold red] \n Address: { attraction [ " address" ]} \n Summary: { attraction [ " summary" ]} \n Tag(s): { attraction ["tag(s)" ]} \n '
268+ attraction_list = f'[bold red]{ trip [ "attractions" ][ 0 ][ " attraction name" ]} [/bold red] \n Address: { trip [ "attractions" ][ 0 ][ " address" ]} \n Summary: { trip [ "attractions" ][ 0 ][ " summary" ]} \n Tag(s): { trip [ "attractions" ][ 0 ] ["tag(s)" ]} \n '
244269 else :
245270 for attraction in trip ["attractions" ]:
246271 # Printing python text with colour using ANSI codes: https://vascosim.medium.com/how-to-print-colored-text-in-python-52f6244e2e30
@@ -252,7 +277,7 @@ def print_table(trips):
252277 return
253278
254279
255- # Validation functions
280+ # Validate dates function
256281def validate_dates (start_date , end_date , flights ):
257282 """
258283 Validate dates given for start date, end date and flight datetime
@@ -291,17 +316,3 @@ def validate_dates(start_date, end_date, flights):
291316 print ("Error: Invalid date/time for flight arrival. Use 'DD-MM-YYYY HH:MM' format." )
292317 return False
293318 return True
294-
295-
296- def find_itinerary (itinerary_list , trip_name ):
297- """
298-
299- Args:
300- itinerary_list: List of all itineraries saved to itinerary.bin file.
301- trip_name: Name of the trip user wants to view.
302-
303- Returns:
304- itinerary: The itinerary the user wants to view.
305- """
306- trip = [itinerary for itinerary in itinerary_list if itinerary ["name" ] == trip_name ]
307- return trip
0 commit comments