diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc index d72dd2f..b2a7c27 100644 Binary files a/__pycache__/app.cpython-311.pyc and b/__pycache__/app.cpython-311.pyc differ diff --git a/__pycache__/markdown_render.cpython-311.pyc b/__pycache__/markdown_render.cpython-311.pyc new file mode 100644 index 0000000..39f5f36 Binary files /dev/null and b/__pycache__/markdown_render.cpython-311.pyc differ diff --git a/app/__pycache__/__init__.cpython-311.pyc b/app/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..1ef700d Binary files /dev/null and b/app/__pycache__/__init__.cpython-311.pyc differ diff --git a/app/__pycache__/main.cpython-311.pyc b/app/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000..cadd7fd Binary files /dev/null and b/app/__pycache__/main.cpython-311.pyc differ diff --git a/app/controllers/__pycache__/__init__.cpython-311.pyc b/app/controllers/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..3b99dce Binary files /dev/null and b/app/controllers/__pycache__/__init__.cpython-311.pyc differ diff --git a/app/controllers/__pycache__/category_controller.cpython-311.pyc b/app/controllers/__pycache__/category_controller.cpython-311.pyc new file mode 100644 index 0000000..84e64c8 Binary files /dev/null and b/app/controllers/__pycache__/category_controller.cpython-311.pyc differ diff --git a/app/controllers/__pycache__/dynamic_controller.cpython-311.pyc b/app/controllers/__pycache__/dynamic_controller.cpython-311.pyc new file mode 100644 index 0000000..6b9408b Binary files /dev/null and b/app/controllers/__pycache__/dynamic_controller.cpython-311.pyc differ diff --git a/app/services/__pycache__/__init__.cpython-311.pyc b/app/services/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..3b6a7aa Binary files /dev/null and b/app/services/__pycache__/__init__.cpython-311.pyc differ diff --git a/app/services/__pycache__/markdown_processor.cpython-311.pyc b/app/services/__pycache__/markdown_processor.cpython-311.pyc new file mode 100644 index 0000000..b9b3445 Binary files /dev/null and b/app/services/__pycache__/markdown_processor.cpython-311.pyc differ diff --git a/app/services/__pycache__/markdown_render.cpython-311.pyc b/app/services/__pycache__/markdown_render.cpython-311.pyc new file mode 100644 index 0000000..36d1e1b Binary files /dev/null and b/app/services/__pycache__/markdown_render.cpython-311.pyc differ diff --git a/app/services/__pycache__/metadata_processor.cpython-311.pyc b/app/services/__pycache__/metadata_processor.cpython-311.pyc new file mode 100644 index 0000000..50801a6 Binary files /dev/null and b/app/services/__pycache__/metadata_processor.cpython-311.pyc differ diff --git a/inspiration/TingSomSkalTilføjes/__pycache__/flight_types.cpython-311.pyc b/inspiration/TingSomSkalTilføjes/__pycache__/flight_types.cpython-311.pyc new file mode 100644 index 0000000..fc2b6dd Binary files /dev/null and b/inspiration/TingSomSkalTilføjes/__pycache__/flight_types.cpython-311.pyc differ diff --git a/inspiration/TingSomSkalTilføjes/flight_filter.py b/inspiration/TingSomSkalTilføjes/flight_filter.py index ae6335d..e252640 100644 --- a/inspiration/TingSomSkalTilføjes/flight_filter.py +++ b/inspiration/TingSomSkalTilføjes/flight_filter.py @@ -1,13 +1,13 @@ +import json from pprint import pprint from amadeus import Client, ResponseError import pandas as pd from datetime import datetime, timedelta -import json - +from flight_types import * class FlightFilter: def __init__(self, api_key, api_secret): - self.amadeus = Client(client_id=api_key, client_secret=api_secret) + self.amadeus = Client(client_id=api_key, client_secret=api_secret, hostname="production") def get_flight_offers(self, request_body): """ @@ -119,8 +119,12 @@ class FlightFilter: # Usage example if __name__ == "__main__": - api_key = "uxDqIh36xPAUvpXnXynwAnH86pGBdIch" - api_secret = "xTSLooNZpJWantb5" + #api_key = "uxDqIh36xPAUvpXnXynwAnH86pGBdIch" + #api_secret = "xTSLooNZpJWantb5" + + # PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD + api_key = "ABRGQv6U7IWAYxwwmjqAOPUDGvuFMSjw" + api_secret = "BcwpSKf3FICJIxaw" flight_filter = FlightFilter(api_key, api_secret) @@ -153,25 +157,57 @@ if __name__ == "__main__": "sources": ["GDS"], "searchCriteria": { "excludeAllotments": True, - "addOneWayOffers": False, - "maxFlightOffers": 10, + "addOneWayOffers": True, + "maxFlightOffers": 50, "allowAlternativeFareOptions": True, } } # Fetch flights flights = flight_filter.get_flight_offers(request_body) - print(f"Raw flights data: {flights}") + with open("json_data.json", "w") as file: + json.dump(flights, file) + # + #DEBUG + #with open("json_data.json", "r") as file: + # flights = json.load(file) + + #print(f"Raw flights data: {flights}") + + real_flights = [] + + for flight in flights: + for x,v in flight.items(): + if type(v) == list and "itineraries" in str(x).lower(): + for flt, flt2 in flight.items(): + if flt == "itineraries": + for itm in flt2: + for seg in itm.get("segments"): + departure = seg.get("departure").get("iataCode") + arrival = seg.get("arrival").get("iataCode") + print(f"{departure} -> {arrival}") + if (departure, arrival) in (("OPO", "CPH"), ("CPH", "OPO")): + print( f"{departure} -> {arrival}" ) + + + + + + + + + + # Filter flights from OPO to CPH around 07:00 ± 1 hour - opo_to_cph_flights = flight_filter.filter_flights_by_time( - flights, origin_filter="OPO", destination_filter="CPH", filter_time_str="06:00", hours=2 - ) + #opo_to_cph_flights = flight_filter.filter_flights_by_time( + # flights, origin_filter="OPO", destination_filter="CPH", filter_time_str="06:00", hours=2 + #) # Filter flights from CPH to OPO around 18:30 ± 1 hour - cph_to_opo_flights = flight_filter.filter_flights_by_time( - flights, origin_filter="CPH", destination_filter="OPO", filter_time_str="20:30", hours=2 - ) + #cph_to_opo_flights = flight_filter.filter_flights_by_time( + # flights, origin_filter="CPH", destination_filter="OPO", filter_time_str="20:30", hours=2 + #) # Save to Excel - flight_filter.save_to_excel(opo_to_cph_flights, cph_to_opo_flights, "Filtered_Flights_OPO_CPH.xlsx") + #flight_filter.save_to_excel(opo_to_cph_flights, cph_to_opo_flights, "Filtered_Flights_OPO_CPH.xlsx") diff --git a/inspiration/TingSomSkalTilføjes/flight_types.py b/inspiration/TingSomSkalTilføjes/flight_types.py new file mode 100644 index 0000000..c105327 --- /dev/null +++ b/inspiration/TingSomSkalTilføjes/flight_types.py @@ -0,0 +1,45 @@ +from dataclasses import dataclass +from typing import List, Optional + + +# OopCompanion:suppressRename + +@dataclass +class AmenityProvider: + name: str + +@dataclass +class Amenity: + description: str + isChargeable: bool + amenityType: str + amenityProvider: AmenityProvider + +@dataclass +class IncludedCheckedBags: + quantity: int + +@dataclass +class FareDetailsBySegment: + segmentId: str + cabin: str + fareBasis: str + brandedFare: str + brandedFareLabel: str + class_: str # 'class' is a reserved keyword in Python; use 'class_' instead + includedCheckedBags: IncludedCheckedBags + amenities: List[Amenity] + +@dataclass +class Price: + currency: str + total: str + base: str + +@dataclass +class Traveler: + travelerId: str + fareOption: str + travelerType: str + price: Price + fareDetailsBySegment: List[FareDetailsBySegment] \ No newline at end of file diff --git a/inspiration/TingSomSkalTilføjes/json_data.json b/inspiration/TingSomSkalTilføjes/json_data.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/inspiration/TingSomSkalTilføjes/json_data.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/inspiration/rnh_tax_calculator b/inspiration/rnh_tax_calculator new file mode 160000 index 0000000..7877b98 --- /dev/null +++ b/inspiration/rnh_tax_calculator @@ -0,0 +1 @@ +Subproject commit 7877b98884ca192c5dd9d2ab5e3d600a2b59f06c diff --git a/requirements.txt b/requirements.txt index 81de3c6..07efb90 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +amadeus==11.0.0 annotated-types==0.7.0 anyio==4.7.0 beautifulsoup4==4.12.3 @@ -12,15 +13,21 @@ markdown-it-py==3.0.0 MarkupSafe==3.0.2 mdurl==0.1.2 mistune==3.0.2 +numpy==2.2.1 +pandas==2.2.3 pillow==11.0.0 pydantic==2.10.3 pydantic_core==2.27.1 +python-dateutil==2.9.0.post0 python-dotenv==1.0.1 +pytz==2024.2 PyYAML==6.0.2 +six==1.17.0 sniffio==1.3.1 soupsieve==2.6 starlette==0.41.3 typing_extensions==4.12.2 +tzdata==2024.2 uvicorn==0.32.1 uvloop==0.21.0 watchfiles==1.0.0