import sys import holidays import json years = [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030] countries = [ ("Albania", "AL", []), ("Algeria", "DZ", []), ("American Samoa", "AS", []), ("Andorra", "AD", ["02", "03", "04", "05", "06", "07", "08"]), ("Angola", "AO", []), ("Argentina", "AR", []), ("Armenia", "AM", []), ("Aruba", "AW", []), ("Australia", "AU", ["ACT", "NSW", "NT", "QLD", "SA", "TAS", "VIC", "WA"]), ("Austria", "AT", ["1", "2", "3", "4", "5", "6", "7", "8", "9"]), ("Azerbaijan", "AZ", []), ("Bahamas", "BS", []), ("Bahrain", "BH", []), ("Bangladesh", "BD", []), ("Barbados", "BB", []), ("Belarus", "BY", []), ("Belgium", "BE", []), ("Belize", "BZ", []), ("Bolivia", "BO", ["B", "C", "H", "L", "N", "O", "P", "S", "T"]), ("Bosnia and Herzegovina", "BA", ["BIH", "BRC", "SRP"]), ("Botswana", "BW", []), ("Brazil", "BR", ["AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO", "MA", "MG", "MS", "MT", "PA", "PB", "PE", "PI", "PR", "RJ", "RN", "RO", "RR", "RS", "SC", "SE", "SP", "TO"]), ("Brunei", "BN", []), ("Bulgaria", "BG", []), ("Burkina Faso", "BF", []), ("Burundi", "BI", []), ("Cambodia", "KH", []), ("Cameroon", "CM", []), ("Canada", "CA", ["AB", "BC", "MB", "NB", "NL", "NS", "NT", "NU", "ON", "PE", "QC", "SK", "YT"]), ("Chad", "TD", []), ("Chile", "CL", ["AI", "AN", "AP", "AR", "AT", "BI", "CO", "LI", "LL", "LR", "MA", "ML", "NB", "RM", "TA", "VS"]), ("China", "CN", []), ("Colombia", "CO", []), ("Costa Rica", "CR", []), ("Croatia", "HR", []), ("Cuba", "CU", []), ("Curacao", "CW", []), ("Cyprus", "CY", []), ("Czechia", "CZ", []), ("Denmark", "DK", []), ("Djibouti", "DJ", []), ("Dominican Republic", "DO", []), ("Ecuador", "EC", []), ("Egypt", "EG", []), ("El Salvador", "SV", ["AH", "CA", "CH", "CU", "LI", "MO", "PA", "SA", "SM", "SO", "SS", "SV", "UN", "US"]), ("Estonia", "EE", []), ("Eswatini", "SZ", []), ("Ethiopia", "ET", []), ("Finland", "FI", []), ("France", "FR", ["BL", "GES", "GP", "GY", "MF", "MQ", "NC", "PF", "RE", "WF", "YT"]), ("Gabon", "GA", []), ("Georgia", "GE", []), ("Germany", "DE", ["BB", "BE", "BW", "BY", "BYP", "HB", "HE", "HH", "MV", "NI", "NW", "RP", "SH", "SL", "SN", "ST", "TH"]), ("Greece", "GR", []), ("Guam", "GU", []), ("Guatemala", "GT", []), ("Honduras", "HN", []), ("Hong Kong", "HK", []), ("Hungary", "HU", []), ("Iceland", "IS", []), ("India", "IN", ["AN", "AP", "AR", "AS", "BR", "CG", "CH", "DD", "DH", "DL", "GA", "GJ", "HP", "HR", "JH", "JK", "KA", "KL", "LA", "LD", "MH", "ML", "MN", "MP", "MZ", "NL", "OR", "PB", "PY", "RJ", "SK", "TN", "TR", "TS", "UK", "UP", "WB"]), ("Indonesia", "ID", []), ("Iran", "IR", []), ("Ireland", "IE", []), ("Isle of Man", "IM", []), ("Israel", "IL", []), ("Italy", "IT", ["AG", "AL", "AN", "AO", "AP", "AQ", "AR", "AT", "AV", "BA", "BG", "BI", "BL", "BN", "BO", "BR", "BS", "BT", "BZ", "CA", "CB", "CE", "CH", "CL", "CN", "CO", "CR", "CS", "CT", "CZ", "EN", "FC", "FE", "FG", "FI", "FM", "FR", "GE", "GO", "GR", "IM", "IS", "KR", "LC", "LE", "LI", "LO", "LT", "LU", "MB", "MC", "ME", "MI", "MN", "MO", "MS", "MT", "NA", "NO", "NU", "OR", "PA", "PC", "PD", "PE", "PG", "PI", "PN", "PO", "PR", "PT", "PU", "PV", "PZ", "RA", "RC", "RE", "RG", "RI", "RM", "RN", "RO", "SA", "SI", "SO", "SP", "SR", "SS", "SU", "SV", "TA", "TE", "TN", "TO", "TP", "TR", "TS", "TV", "UD", "VA", "VB", "VC", "VE", "VI", "VR", "VT", "VV", "Andria", "Barletta", "Cesena", "Forli", "Pesaro", "Trani", "Urbino"]), ("Jamaica", "JM", []), ("Japan", "JP", []), ("Kazakhstan", "KZ", []), ("Kenya", "KE", []), ("Kyrgyzstan", "KG", []), ("Laos", "LA", []), ("Latvia", "LV", []), ("Lesotho", "LS", []), ("Liechtenstein", "LI", []), ("Lithuania", "LT", []), ("Luxembourg", "LU", []), ("Madagascar", "MG", []), ("Malawi", "MW", []), ("Malaysia", "MY", ["JHR", "KDH", "KTN", "KUL", "LBN", "MLK", "NSN", "PHG", "PJY", "PLS", "PNG", "PRK", "SBH", "SGR", "SWK", "TRG"]), ("Maldives", "MV", []), ("Malta", "MT", []), ("Marshall Islands", "MH", []), ("Mexico", "MX", []), ("Moldova", "MD", []), ("Monaco", "MC", []), ("Montenegro", "ME", []), ("Morocco", "MA", []), ("Mozambique", "MZ", []), ("Namibia", "NA", []), ("Netherlands", "NL", []), ("New Zealand", "NZ", ["AUK", "BOP", "CAN", "CIT", "GIS", "HKB", "MBH", "MWT", "NSN", "NTL", "OTA", "STL", "TAS", "TKI", "WGN", "WKO", "WTC"]), ("Nicaragua", "NI", ["AN", "AS", "BO", "CA", "CI", "CO", "ES", "GR", "JI", "LE", "MD", "MN", "MS", "MT", "NS", "RI", "SJ"]), ("Nigeria", "NG", []), ("Northern Mariana Islands", "MP", []), ("North Macedonia", "MK", []), ("Norway", "NO", []), ("Pakistan", "PK", []), ("Panama", "PA", []), ("Papua New Guinea", "PG", []), ("Paraguay", "PY", []), ("Peru", "PE", []), ("Philippines", "PH", []), ("Poland", "PL", []), ("Portugal", "PT", ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "20", "30"]), ("Puerto Rico", "PR", []), ("Romania", "RO", []), ("Russia", "RU", []), ("San Marino", "SM", []), ("Saudi Arabia", "SA", []), ("Serbia", "RS", []), ("Singapore", "SG", []), ("Slovakia", "SK", []), ("Slovenia", "SI", []), ("South Africa", "ZA", []), ("South Korea", "KR", []), ("Spain", "ES", ["AN", "AR", "AS", "CB", "CE", "CL", "CM", "CN", "CT", "EX", "GA", "IB", "MC", "MD", "ML", "NC", "PV", "RI", "VC"]), ("Sweden", "SE", []), ("Switzerland", "CH", ["AG", "AR", "AI", "BL", "BS", "BE", "FR", "GE", "GL", "GR", "JU", "LU", "NE", "NW", "OW", "SG", "SH", "SZ", "SO", "TG", "TI", "UR", "VD", "VS", "ZG", "ZH"]), ("Taiwan", "TW", []), ("Tanzania", "TZ", []), ("Thailand", "TH", []), ("Timor Leste", "TL", []), ("Tonga", "TO", []), ("Tunisia", "TN", []), ("Turkey", "TR", []), ("Ukraine", "UA", []), ("United Arab Emirates", "AE", []), ("United Kingdom", "GB", ["ENG", "NIR", "SCT", "WLS"]), ("United States Minor Outlying Islands", "UM", []), ("United States of America", "US", ["AK", "AL", "AR", "AS", "AZ", "CA", "CO", "CT", "DC", "DE", "FL", "GA", "GU", "HI", "IA", "ID", "IL", "IN", "KS", "KY", "LA", "MA", "MD", "ME", "MI", "MN", "MO", "MP", "MS", "MT", "NC", "ND", "NE", "NH", "NJ", "NM", "NV", "NY", "OH", "OK", "OR", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UM", "UT", "VA", "VI", "VT", "WA", "WI", "WV", "WY"]), ("Uruguay", "UY", []), ("Uzbekistan", "UZ", []), ("Vanuatu", "VU", []), ("Vatican City", "VA", []), ("Venezuela", "VE", []), ("Vietnam", "VN", []), ("Virgin Islands (U.S.)", "VI", []), ("Zambia", "ZM", []), ("Zimbabwe", "ZW", []) ] # print opening object bracket print("{", file=sys.stdout) # loop through countries for country in countries: # print country code as first identifier print(country[1] + ":", file=sys.stdout) # if country has subdivisions if len(country[2]) > 0: # open an object print("{", file=sys.stdout) # and loop through the subdivisions for subdiv in country[2]: # if the subdivision starts with a digit, preprend an underscore if subdiv[0].isdigit(): print("_" + subdiv + ":", file=sys.stdout) else: print(subdiv + ":", file=sys.stdout) # get out the specific subdivisions holidays holidays_ = holidays.country_holidays(country[1], subdiv=subdiv, language="en_US", years=years) # and stringify the keys holidays_ = {str(key): value for key, value in holidays_.items()} # dump the holiday object as json print(json.dumps(holidays_, ensure_ascii=False), file=sys.stdout) print(",", file=sys.stdout) # then do the same for the national holidays # get out the specific national holidays holidays_ = holidays.country_holidays(country[1], language="en_US", years=years) # and stringify the keys holidays_ = {str(key): value for key, value in holidays_.items()} # print the key print("National:", file=sys.stdout) # dump the holiday object as json print(json.dumps(holidays_, ensure_ascii=False), file=sys.stdout) # close the object from line 161 print("},", file=sys.stdout) else: # get out the specific national holidays holidays_ = holidays.country_holidays(country[1], language="en_US", years=years) # and stringify the keys holidays_ = {str(key): value for key, value in holidays_.items()} # create a new object with the key print("{National:", file=sys.stdout) # dump the holiday object as json print(json.dumps(holidays_, ensure_ascii=False), file=sys.stdout) # close the object from line 199 print("},", file=sys.stdout) # close the object from line 152 print("}", file=sys.stdout)