Spaces:
Sleeping
Sleeping
Ezhil
commited on
Commit
·
f67a585
0
Parent(s):
Git Initialization
Browse files- Dockerfile +21 -0
- __pycache__/logger.cpython-310.pyc +0 -0
- __pycache__/main.cpython-310.pyc +0 -0
- data/world_population.csv +235 -0
- logger.py +19 -0
- logs/app.log +22 -0
- main.py +11 -0
- models/__pycache__/pydantic_model.cpython-310.pyc +0 -0
- models/pydantic_model.py +20 -0
- requirements.txt +0 -0
- routers/__pycache__/population.cpython-310.pyc +0 -0
- routers/continent.py +9 -0
- services/continent_services.py +42 -0
Dockerfile
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Use an official Python runtime as a parent image
|
| 2 |
+
FROM python:3.11
|
| 3 |
+
|
| 4 |
+
# Set the working directory in the container
|
| 5 |
+
WORKDIR /app
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
# Copy the application files
|
| 9 |
+
COPY . .
|
| 10 |
+
|
| 11 |
+
# Install dependencies
|
| 12 |
+
RUN pip install -r requirements.txt
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
# Expose the ports for FastAPI (8000) and Streamlit (8501)
|
| 16 |
+
EXPOSE 8000
|
| 17 |
+
|
| 18 |
+
# Run FastAPI and Streamlit in parallel
|
| 19 |
+
CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port 8000"]
|
| 20 |
+
|
| 21 |
+
|
__pycache__/logger.cpython-310.pyc
ADDED
|
Binary file (479 Bytes). View file
|
|
|
__pycache__/main.cpython-310.pyc
ADDED
|
Binary file (636 Bytes). View file
|
|
|
data/world_population.csv
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Country,Capital,Continent,Population,Area
|
| 2 |
+
China,Beijing,Asia,1425887337,9706961
|
| 3 |
+
India,New Delhi,Asia,1417173173,3287590
|
| 4 |
+
United States,"Washington, D.C.",North America,338289857,9372610
|
| 5 |
+
Indonesia,Jakarta,Asia,275501339,1904569
|
| 6 |
+
Pakistan,Islamabad,Asia,235824862,881912
|
| 7 |
+
Nigeria,Abuja,Africa,218541212,923768
|
| 8 |
+
Brazil,Brasilia,South America,215313498,8515767
|
| 9 |
+
Bangladesh,Dhaka,Asia,171186372,147570
|
| 10 |
+
Russia,Moscow,Europe,144713314,17098242
|
| 11 |
+
Mexico,Mexico City,North America,127504125,1964375
|
| 12 |
+
Japan,Tokyo,Asia,123951692,377930
|
| 13 |
+
Ethiopia,Addis Ababa,Africa,123379924,1104300
|
| 14 |
+
Philippines,Manila,Asia,115559009,342353
|
| 15 |
+
Egypt,Cairo,Africa,110990103,1002450
|
| 16 |
+
DR Congo,Kinshasa,Africa,99010212,2344858
|
| 17 |
+
Vietnam,Hanoi,Asia,98186856,331212
|
| 18 |
+
Iran,Tehran,Asia,88550570,1648195
|
| 19 |
+
Turkey,Ankara,Asia,85341241,783562
|
| 20 |
+
Germany,Berlin,Europe,83369843,357114
|
| 21 |
+
Thailand,Bangkok,Asia,71697030,513120
|
| 22 |
+
United Kingdom,London,Europe,67508936,242900
|
| 23 |
+
Tanzania,Dodoma,Africa,65497748,945087
|
| 24 |
+
France,Paris,Europe,64626628,551695
|
| 25 |
+
South Africa,Pretoria,Africa,59893885,1221037
|
| 26 |
+
Italy,Rome,Europe,59037474,301336
|
| 27 |
+
Myanmar,Nay Pyi Taw,Asia,54179306,676578
|
| 28 |
+
Kenya,Nairobi,Africa,54027487,580367
|
| 29 |
+
Colombia,Bogota,South America,51874024,1141748
|
| 30 |
+
South Korea,Seoul,Asia,51815810,100210
|
| 31 |
+
Spain,Madrid,Europe,47558630,505992
|
| 32 |
+
Uganda,Kampala,Africa,47249585,241550
|
| 33 |
+
Sudan,Khartoum,Africa,46874204,1886068
|
| 34 |
+
Argentina,Buenos Aires,South America,45510318,2780400
|
| 35 |
+
Algeria,Algiers,Africa,44903225,2381741
|
| 36 |
+
Iraq,Baghdad,Asia,44496122,438317
|
| 37 |
+
Afghanistan,Kabul,Asia,41128771,652230
|
| 38 |
+
Poland,Warsaw,Europe,39857145,312679
|
| 39 |
+
Ukraine,Kiev,Europe,39701739,603500
|
| 40 |
+
Canada,Ottawa,North America,38454327,9984670
|
| 41 |
+
Morocco,Rabat,Africa,37457971,446550
|
| 42 |
+
Saudi Arabia,Riyadh,Asia,36408820,2149690
|
| 43 |
+
Angola,Luanda,Africa,35588987,1246700
|
| 44 |
+
Uzbekistan,Tashkent,Asia,34627652,447400
|
| 45 |
+
Peru,Lima,South America,34049588,1285216
|
| 46 |
+
Malaysia,Kuala Lumpur,Asia,33938221,330803
|
| 47 |
+
Yemen,Sanaa,Asia,33696614,527968
|
| 48 |
+
Ghana,Accra,Africa,33475870,238533
|
| 49 |
+
Mozambique,Maputo,Africa,32969517,801590
|
| 50 |
+
Nepal,Kathmandu,Asia,30547580,147181
|
| 51 |
+
Madagascar,Antananarivo,Africa,29611714,587041
|
| 52 |
+
Venezuela,Caracas,South America,28301696,916445
|
| 53 |
+
Ivory Coast,Yamoussoukro,Africa,28160542,322463
|
| 54 |
+
Cameroon,Yaounde,Africa,27914536,475442
|
| 55 |
+
Niger,Niamey,Africa,26207977,1267000
|
| 56 |
+
Australia,Canberra,Oceania,26177413,7692024
|
| 57 |
+
North Korea,Pyongyang,Asia,26069416,120538
|
| 58 |
+
Taiwan,Taipei,Asia,23893394,36193
|
| 59 |
+
Burkina Faso,Ouagadougou,Africa,22673762,272967
|
| 60 |
+
Mali,Bamako,Africa,22593590,1240192
|
| 61 |
+
Syria,Damascus,Asia,22125249,185180
|
| 62 |
+
Sri Lanka,Colombo,Asia,21832143,65610
|
| 63 |
+
Malawi,Lilongwe,Africa,20405317,118484
|
| 64 |
+
Zambia,Lusaka,Africa,20017675,752612
|
| 65 |
+
Romania,Bucharest,Europe,19659267,238391
|
| 66 |
+
Chile,Santiago,South America,19603733,756102
|
| 67 |
+
Kazakhstan,Nursultan,Asia,19397998,2724900
|
| 68 |
+
Ecuador,Quito,South America,18001000,276841
|
| 69 |
+
Guatemala,Guatemala City,North America,17843908,108889
|
| 70 |
+
Chad,N'Djamena,Africa,17723315,1284000
|
| 71 |
+
Somalia,Mogadishu,Africa,17597511,637657
|
| 72 |
+
Netherlands,Amsterdam,Europe,17564014,41850
|
| 73 |
+
Senegal,Dakar,Africa,17316449,196722
|
| 74 |
+
Cambodia,Phnom Penh,Asia,16767842,181035
|
| 75 |
+
Zimbabwe,Harare,Africa,16320537,390757
|
| 76 |
+
Guinea,Conakry,Africa,13859341,245857
|
| 77 |
+
Rwanda,Kigali,Africa,13776698,26338
|
| 78 |
+
Benin,Porto-Novo,Africa,13352864,112622
|
| 79 |
+
Burundi,Bujumbura,Africa,12889576,27834
|
| 80 |
+
Tunisia,Tunis,Africa,12356117,163610
|
| 81 |
+
Bolivia,Sucre,South America,12224110,1098581
|
| 82 |
+
Belgium,Brussels,Europe,11655930,30528
|
| 83 |
+
Haiti,Port-au-Prince,North America,11584996,27750
|
| 84 |
+
Jordan,Amman,Asia,11285869,89342
|
| 85 |
+
Dominican Republic,Santo Domingo,North America,11228821,48671
|
| 86 |
+
Cuba,Havana,North America,11212191,109884
|
| 87 |
+
South Sudan,Juba,Africa,10913164,619745
|
| 88 |
+
Sweden,Stockholm,Europe,10549347,450295
|
| 89 |
+
Czech Republic,Prague,Europe,10493986,78865
|
| 90 |
+
Honduras,Tegucigalpa,North America,10432860,112492
|
| 91 |
+
Greece,Athens,Europe,10384971,131990
|
| 92 |
+
Azerbaijan,Baku,Asia,10358074,86600
|
| 93 |
+
Portugal,Lisbon,Europe,10270865,92090
|
| 94 |
+
Papua New Guinea,Port Moresby,Oceania,10142619,462840
|
| 95 |
+
Hungary,Budapest,Europe,9967308,93028
|
| 96 |
+
Tajikistan,Dushanbe,Asia,9952787,143100
|
| 97 |
+
Belarus,Minsk,Europe,9534954,207600
|
| 98 |
+
United Arab Emirates,Abu Dhabi,Asia,9441129,83600
|
| 99 |
+
Israel,Jerusalem,Asia,9038309,20770
|
| 100 |
+
Austria,Vienna,Europe,8939617,83871
|
| 101 |
+
Togo,Lomé,Africa,8848699,56785
|
| 102 |
+
Switzerland,Bern,Europe,8740472,41284
|
| 103 |
+
Sierra Leone,Freetown,Africa,8605718,71740
|
| 104 |
+
Laos,Vientiane,Asia,7529475,236800
|
| 105 |
+
Hong Kong,Hong Kong,Asia,7488865,1104
|
| 106 |
+
Serbia,Belgrade,Europe,7221365,88361
|
| 107 |
+
Nicaragua,Managua,North America,6948392,130373
|
| 108 |
+
Libya,Tripoli,Africa,6812341,1759540
|
| 109 |
+
Bulgaria,Sofia,Europe,6781953,110879
|
| 110 |
+
Paraguay,Asunción,South America,6780744,406752
|
| 111 |
+
Kyrgyzstan,Bishkek,Asia,6630623,199951
|
| 112 |
+
Turkmenistan,Ashgabat,Asia,6430770,488100
|
| 113 |
+
El Salvador,San Salvador,North America,6336392,21041
|
| 114 |
+
Singapore,Singapore,Asia,5975689,710
|
| 115 |
+
Republic of the Congo,Brazzaville,Africa,5970424,342000
|
| 116 |
+
Denmark,Copenhagen,Europe,5882261,43094
|
| 117 |
+
Slovakia,Bratislava,Europe,5643453,49037
|
| 118 |
+
Central African Republic,Bangui,Africa,5579144,622984
|
| 119 |
+
Finland,Helsinki,Europe,5540745,338424
|
| 120 |
+
Lebanon,Beirut,Asia,5489739,10452
|
| 121 |
+
Norway,Oslo,Europe,5434319,323802
|
| 122 |
+
Liberia,Monrovia,Africa,5302681,111369
|
| 123 |
+
Palestine,Ramallah,Asia,5250072,6220
|
| 124 |
+
New Zealand,Wellington,Oceania,5185288,270467
|
| 125 |
+
Costa Rica,San José,North America,5180829,51100
|
| 126 |
+
Ireland,Dublin,Europe,5023109,70273
|
| 127 |
+
Mauritania,Nouakchott,Africa,4736139,1030700
|
| 128 |
+
Oman,Muscat,Asia,4576298,309500
|
| 129 |
+
Panama,Panama City,North America,4408581,75417
|
| 130 |
+
Kuwait,Kuwait City,Asia,4268873,17818
|
| 131 |
+
Croatia,Zagreb,Europe,4030358,56594
|
| 132 |
+
Georgia,Tbilisi,Asia,3744385,69700
|
| 133 |
+
Eritrea,Asmara,Africa,3684032,117600
|
| 134 |
+
Uruguay,Montevideo,South America,3422794,181034
|
| 135 |
+
Mongolia,Ulaanbaatar,Asia,3398366,1564110
|
| 136 |
+
Moldova,Chisinau,Europe,3272996,33846
|
| 137 |
+
Puerto Rico,San Juan,North America,3252407,8870
|
| 138 |
+
Bosnia and Herzegovina,Sarajevo,Europe,3233526,51209
|
| 139 |
+
Albania,Tirana,Europe,2842321,28748
|
| 140 |
+
Jamaica,Kingston,North America,2827377,10991
|
| 141 |
+
Armenia,Yerevan,Asia,2780469,29743
|
| 142 |
+
Lithuania,Vilnius,Europe,2750055,65300
|
| 143 |
+
Gambia,Banjul,Africa,2705992,10689
|
| 144 |
+
Qatar,Doha,Asia,2695122,11586
|
| 145 |
+
Botswana,Gaborone,Africa,2630296,582000
|
| 146 |
+
Namibia,Windhoek,Africa,2567012,825615
|
| 147 |
+
Gabon,Libreville,Africa,2388992,267668
|
| 148 |
+
Lesotho,Maseru,Africa,2305825,30355
|
| 149 |
+
Slovenia,Ljubljana,Europe,2119844,20273
|
| 150 |
+
Guinea-Bissau,Bissau,Africa,2105566,36125
|
| 151 |
+
North Macedonia,Skopje,Europe,2093599,25713
|
| 152 |
+
Latvia,Riga,Europe,1850651,64559
|
| 153 |
+
Equatorial Guinea,Malabo,Africa,1674908,28051
|
| 154 |
+
Trinidad and Tobago,Port-of-Spain,North America,1531044,5130
|
| 155 |
+
Bahrain,Manama,Asia,1472233,765
|
| 156 |
+
Timor-Leste,Dili,Asia,1341296,14874
|
| 157 |
+
Estonia,Tallinn,Europe,1326062,45227
|
| 158 |
+
Mauritius,Port Louis,Africa,1299469,2040
|
| 159 |
+
Cyprus,Nicosia,Europe,1251488,9251
|
| 160 |
+
Eswatini,Mbabane,Africa,1201670,17364
|
| 161 |
+
Djibouti,Djibouti,Africa,1120849,23200
|
| 162 |
+
Reunion,Saint-Denis,Africa,974052,2511
|
| 163 |
+
Fiji,Suva,Oceania,929766,18272
|
| 164 |
+
Comoros,Moroni,Africa,836774,1862
|
| 165 |
+
Guyana,Georgetown,South America,808726,214969
|
| 166 |
+
Bhutan,Thimphu,Asia,782455,38394
|
| 167 |
+
Solomon Islands,Honiara,Oceania,724273,28896
|
| 168 |
+
Macau,Concelho de Macau,Asia,695168,30
|
| 169 |
+
Luxembourg,Luxembourg,Europe,647599,2586
|
| 170 |
+
Montenegro,Podgorica,Europe,627082,13812
|
| 171 |
+
Suriname,Paramaribo,South America,618040,163820
|
| 172 |
+
Cape Verde,Praia,Africa,593149,4033
|
| 173 |
+
Western Sahara,El Aaiún,Africa,575986,266000
|
| 174 |
+
Malta,Valletta,Europe,533286,316
|
| 175 |
+
Maldives,Malé,Asia,523787,300
|
| 176 |
+
Brunei,Bandar Seri Begawan,Asia,449002,5765
|
| 177 |
+
Bahamas,Nassau,North America,409984,13943
|
| 178 |
+
Belize,Belmopan,North America,405272,22966
|
| 179 |
+
Guadeloupe,Basse-Terre,North America,395752,1628
|
| 180 |
+
Iceland,Reykjavík,Europe,372899,103000
|
| 181 |
+
Martinique,Fort-de-France,North America,367507,1128
|
| 182 |
+
Vanuatu,Port-Vila,Oceania,326740,12189
|
| 183 |
+
Mayotte,Mamoudzou,Africa,326101,374
|
| 184 |
+
French Polynesia,Papeete,Oceania,306279,4167
|
| 185 |
+
French Guiana,Cayenne,South America,304557,83534
|
| 186 |
+
New Caledonia,Nouméa,Oceania,289950,18575
|
| 187 |
+
Barbados,Bridgetown,North America,281635,430
|
| 188 |
+
Sao Tome and Principe,São Tomé,Africa,227380,964
|
| 189 |
+
Samoa,Apia,Oceania,222382,2842
|
| 190 |
+
Curacao,Willemstad,North America,191163,444
|
| 191 |
+
Saint Lucia,Castries,North America,179857,616
|
| 192 |
+
Guam,Hagåtña,Oceania,171774,549
|
| 193 |
+
Kiribati,Tarawa,Oceania,131232,811
|
| 194 |
+
Grenada,Saint George's,North America,125438,344
|
| 195 |
+
Micronesia,Palikir,Oceania,114164,702
|
| 196 |
+
Jersey,Saint Helier,Europe,110778,116
|
| 197 |
+
Seychelles,Victoria,Africa,107118,452
|
| 198 |
+
Tonga,Nuku‘alofa,Oceania,106858,747
|
| 199 |
+
Aruba,Oranjestad,North America,106445,180
|
| 200 |
+
Saint Vincent and the Grenadines,Kingstown,North America,103948,389
|
| 201 |
+
United States Virgin Islands,Charlotte Amalie,North America,99465,347
|
| 202 |
+
Antigua and Barbuda,Saint John’s,North America,93763,442
|
| 203 |
+
Isle of Man,Douglas,Europe,84519,572
|
| 204 |
+
Andorra,Andorra la Vella,Europe,79824,468
|
| 205 |
+
Dominica,Roseau,North America,72737,751
|
| 206 |
+
Cayman Islands,George Town,North America,68706,264
|
| 207 |
+
Bermuda,Hamilton,North America,64184,54
|
| 208 |
+
Guernsey,Saint Peter Port,Europe,63301,78
|
| 209 |
+
Greenland,Nuuk,North America,56466,2166086
|
| 210 |
+
Faroe Islands,Tórshavn,Europe,53090,1393
|
| 211 |
+
Northern Mariana Islands,Saipan,Oceania,49551,464
|
| 212 |
+
Saint Kitts and Nevis,Basseterre,North America,47657,261
|
| 213 |
+
Turks and Caicos Islands,Cockburn Town,North America,45703,948
|
| 214 |
+
American Samoa,Pago Pago,Oceania,44273,199
|
| 215 |
+
Sint Maarten,Philipsburg,North America,44175,34
|
| 216 |
+
Marshall Islands,Majuro,Oceania,41569,181
|
| 217 |
+
Liechtenstein,Vaduz,Europe,39327,160
|
| 218 |
+
Monaco,Monaco,Europe,36469,2
|
| 219 |
+
San Marino,San Marino,Europe,33660,61
|
| 220 |
+
Gibraltar,Gibraltar,Europe,32649,6
|
| 221 |
+
Saint Martin,Marigot,North America,31791,53
|
| 222 |
+
British Virgin Islands,Road Town,North America,31305,151
|
| 223 |
+
Palau,Ngerulmud,Oceania,18055,459
|
| 224 |
+
Cook Islands,Avarua,Oceania,17011,236
|
| 225 |
+
Anguilla,The Valley,North America,15857,91
|
| 226 |
+
Nauru,Yaren,Oceania,12668,21
|
| 227 |
+
Wallis and Futuna,Mata-Utu,Oceania,11572,142
|
| 228 |
+
Tuvalu,Funafuti,Oceania,11312,26
|
| 229 |
+
Saint Barthelemy,Gustavia,North America,10967,21
|
| 230 |
+
Saint Pierre and Miquelon,Saint-Pierre,North America,5862,242
|
| 231 |
+
Montserrat,Brades,North America,4390,102
|
| 232 |
+
Falkland Islands,Stanley,South America,3780,12173
|
| 233 |
+
Niue,Alofi,Oceania,1934,260
|
| 234 |
+
Tokelau,Nukunonu,Oceania,1871,12
|
| 235 |
+
Vatican City,Vatican City,Europe,510,1
|
logger.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import logging
|
| 2 |
+
import os
|
| 3 |
+
|
| 4 |
+
# Create logs directory if it doesn't exist
|
| 5 |
+
if not os.path.exists("logs"):
|
| 6 |
+
os.makedirs("logs")
|
| 7 |
+
|
| 8 |
+
# Configure logging
|
| 9 |
+
logging.basicConfig(
|
| 10 |
+
level=logging.INFO,
|
| 11 |
+
format="%(asctime)s - %(levelname)s - %(message)s",
|
| 12 |
+
handlers=[
|
| 13 |
+
logging.FileHandler("logs/app.log"), # Log to file
|
| 14 |
+
logging.StreamHandler() # Log to console
|
| 15 |
+
],
|
| 16 |
+
)
|
| 17 |
+
|
| 18 |
+
# Get logger instance
|
| 19 |
+
logger = logging.getLogger("world_population")
|
logs/app.log
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
2025-02-08 10:29:41,633 - INFO - CSV file loaded successfully.
|
| 2 |
+
2025-02-08 10:29:41,645 - INFO - Started server process [17300]
|
| 3 |
+
2025-02-08 10:29:41,650 - INFO - Waiting for application startup.
|
| 4 |
+
2025-02-08 10:29:41,652 - INFO - Application startup complete.
|
| 5 |
+
2025-02-08 10:30:46,646 - INFO - Shutting down
|
| 6 |
+
2025-02-08 10:30:46,755 - INFO - Waiting for application shutdown.
|
| 7 |
+
2025-02-08 10:30:46,757 - INFO - Application shutdown complete.
|
| 8 |
+
2025-02-08 10:30:46,759 - INFO - Finished server process [17300]
|
| 9 |
+
2025-02-08 10:31:37,797 - INFO - CSV file loaded successfully.
|
| 10 |
+
2025-02-08 10:31:37,819 - INFO - Starting FastAPI application...
|
| 11 |
+
2025-02-08 10:31:37,826 - INFO - Started server process [5848]
|
| 12 |
+
2025-02-08 10:31:37,838 - INFO - Waiting for application startup.
|
| 13 |
+
2025-02-08 10:31:37,842 - INFO - Application startup complete.
|
| 14 |
+
2025-02-08 10:42:11,654 - INFO - Shutting down
|
| 15 |
+
2025-02-08 10:42:11,762 - INFO - Waiting for application shutdown.
|
| 16 |
+
2025-02-08 10:42:11,767 - INFO - Application shutdown complete.
|
| 17 |
+
2025-02-08 10:42:11,772 - INFO - Finished server process [5848]
|
| 18 |
+
2025-02-08 10:42:14,024 - INFO - CSV file loaded successfully.
|
| 19 |
+
2025-02-08 10:42:14,035 - INFO - Starting FastAPI application...
|
| 20 |
+
2025-02-08 10:42:14,039 - INFO - Started server process [13436]
|
| 21 |
+
2025-02-08 10:42:14,043 - INFO - Waiting for application startup.
|
| 22 |
+
2025-02-08 10:42:14,045 - INFO - Application startup complete.
|
main.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import FastAPI
|
| 2 |
+
from routers.continent import router as continent_router
|
| 3 |
+
|
| 4 |
+
app = FastAPI(title="World Population API")
|
| 5 |
+
|
| 6 |
+
# Register routers
|
| 7 |
+
app.include_router(continent_router, prefix="/continent", tags=["Continent Stats"])
|
| 8 |
+
|
| 9 |
+
@app.get("/")
|
| 10 |
+
def root():
|
| 11 |
+
return {"message": "Welcome to the World Population API!"}
|
models/__pycache__/pydantic_model.cpython-310.pyc
ADDED
|
Binary file (1.41 kB). View file
|
|
|
models/pydantic_model.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from pydantic import BaseModel, Field, field_validator
|
| 2 |
+
from typing import List, Union
|
| 3 |
+
|
| 4 |
+
# Pydantic Model for Response Validation
|
| 5 |
+
class ContinentStats(BaseModel):
|
| 6 |
+
continent: str = Field(..., title="Continent Name", example="Asia")
|
| 7 |
+
Total_Countries: int = Field(..., title="Total Number of Countries", example=48)
|
| 8 |
+
Total_Population: int = Field(..., title="Total Population", example=4600000000)
|
| 9 |
+
Average_Population: float = Field(..., title="Average Population Per Country", example=96000000)
|
| 10 |
+
Total_Area: int = Field(..., title="Total Land Area (sq km)", example=44679000)
|
| 11 |
+
max_population: int = Field(..., title="Highest Country Population", example=1400000000)
|
| 12 |
+
min_population: int = Field(..., title="Lowest Country Population", example=100000)
|
| 13 |
+
Population_Density: float = Field(..., title="Population Density (people/sq km)", example=103)
|
| 14 |
+
|
| 15 |
+
@field_validator("Total_Countries", "Total_Population", "Total_Area", "max_population", "min_population")
|
| 16 |
+
@classmethod
|
| 17 |
+
def must_be_positive(cls, value):
|
| 18 |
+
if value < 0:
|
| 19 |
+
raise ValueError("Value must be non-negative")
|
| 20 |
+
return value
|
requirements.txt
ADDED
|
Binary file (2.46 kB). View file
|
|
|
routers/__pycache__/population.cpython-310.pyc
ADDED
|
Binary file (1.5 kB). View file
|
|
|
routers/continent.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter
|
| 2 |
+
from services.continent_services import get_continent_stats_service
|
| 3 |
+
from models.pydantic_model import ContinentStats
|
| 4 |
+
|
| 5 |
+
router = APIRouter()
|
| 6 |
+
|
| 7 |
+
@router.get("/{continent}/", response_model=ContinentStats)
|
| 8 |
+
def get_continent_stats(continent: str):
|
| 9 |
+
return get_continent_stats_service(continent)
|
services/continent_services.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pandas as pd
|
| 2 |
+
from fastapi import HTTPException
|
| 3 |
+
from models.pydantic_model import ContinentStats
|
| 4 |
+
from logger import logger
|
| 5 |
+
|
| 6 |
+
# Load dataset
|
| 7 |
+
try:
|
| 8 |
+
df = pd.read_csv("data/world_population.csv")
|
| 9 |
+
logger.info("CSV file loaded successfully.")
|
| 10 |
+
except Exception as e:
|
| 11 |
+
logger.error(f"Failed to load CSV: {e}")
|
| 12 |
+
raise HTTPException(status_code=500, detail="Internal server error")
|
| 13 |
+
|
| 14 |
+
# Aggregate statistics by continent
|
| 15 |
+
continent_stats = df.groupby("Continent").agg(
|
| 16 |
+
Total_Countries=('Country', 'count'),
|
| 17 |
+
Total_Population=('Population', 'sum'),
|
| 18 |
+
Average_Population=('Population', 'mean'),
|
| 19 |
+
Total_Area=('Area', 'sum'),
|
| 20 |
+
max_population=('Population', 'max'),
|
| 21 |
+
min_population=('Population', 'min'),
|
| 22 |
+
).reset_index()
|
| 23 |
+
|
| 24 |
+
# Compute Population Density
|
| 25 |
+
continent_stats["Population_Density"] = (
|
| 26 |
+
continent_stats["Total_Population"] / continent_stats["Total_Area"]
|
| 27 |
+
)
|
| 28 |
+
|
| 29 |
+
def get_continent_stats_service(continent: str) -> ContinentStats:
|
| 30 |
+
"""
|
| 31 |
+
Fetch statistics for a given continent.
|
| 32 |
+
"""
|
| 33 |
+
logger.info(f"Fetching statistics for continent: {continent}")
|
| 34 |
+
|
| 35 |
+
result = continent_stats[continent_stats["Continent"] == continent]
|
| 36 |
+
|
| 37 |
+
if result.empty:
|
| 38 |
+
logger.warning(f"Continent not found: {continent}")
|
| 39 |
+
raise HTTPException(status_code=404, detail="Continent not found")
|
| 40 |
+
|
| 41 |
+
result_dict = result.iloc[0].to_dict()
|
| 42 |
+
return ContinentStats(**result_dict)
|