Spaces:
Sleeping
Sleeping
Commit
·
ef6fa9a
0
Parent(s):
backend deploymemt
Browse files- Dockerfile +27 -0
- README.md +10 -0
- __init__.py +0 -0
- __pycache__/__init__.cpython-313.pyc +0 -0
- __pycache__/continents.cpython-313.pyc +0 -0
- __pycache__/logger.cpython-313.pyc +0 -0
- __pycache__/main.cpython-313.pyc +0 -0
- __pycache__/population_pandas.cpython-313.pyc +0 -0
- data/world_population.csv +235 -0
- logger.py +24 -0
- logs/backend.log +113 -0
- main.py +16 -0
- models/__pycache__/population_models.cpython-313.pyc +0 -0
- models/population_models.py +28 -0
- requirement.txt +0 -0
- routes/__pycache__/continents.cpython-313.pyc +0 -0
- routes/continents.py +34 -0
- service/__pycache__/population_pandas.cpython-313.pyc +0 -0
- service/population_pandas.py +55 -0
Dockerfile
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Use Python 3.11 as the base image
|
2 |
+
FROM python:3.11
|
3 |
+
|
4 |
+
# Set the working directory inside the container
|
5 |
+
WORKDIR /app
|
6 |
+
|
7 |
+
# Copy all project files into the container
|
8 |
+
COPY . /app
|
9 |
+
|
10 |
+
# Install dependencies
|
11 |
+
# RUN pip install --upgrade pip
|
12 |
+
RUN pip install -r requirement.txt
|
13 |
+
|
14 |
+
# Expose the required port (Hugging Face Spaces uses 7860)
|
15 |
+
EXPOSE 8000
|
16 |
+
|
17 |
+
# Ensure logs directory exists
|
18 |
+
RUN mkdir -p /app/logs && chmod -R 777 /app/logs
|
19 |
+
|
20 |
+
# Install tmux to run multiple processes
|
21 |
+
# RUN apt-get update && apt-get install -y tmux
|
22 |
+
|
23 |
+
# Start FastAPI & Streamlit together using tmux
|
24 |
+
# CMD ["sh", "-c", "tmux new-session -d -s fastapi 'uvicorn backend.main:app --host 0.0.0.0 --port 7860' && streamlit run Frontend/app.py --server.port 7860 --server.address 0.0.0.0"]
|
25 |
+
|
26 |
+
# CMD ["sh", "-c", "uvicorn backend.main:app --host 0.0.0.0 --port 8000 & sleep 5 && streamlit run Frontend/app.py --server.port 7860 --server.address 0.0.0.0"]
|
27 |
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
README.md
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: Population FastAPI
|
3 |
+
emoji: ⚡
|
4 |
+
colorFrom: yellow
|
5 |
+
colorTo: gray
|
6 |
+
sdk: docker
|
7 |
+
pinned: false
|
8 |
+
---
|
9 |
+
|
10 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
__init__.py
ADDED
File without changes
|
__pycache__/__init__.cpython-313.pyc
ADDED
Binary file (140 Bytes). View file
|
|
__pycache__/continents.cpython-313.pyc
ADDED
Binary file (1.86 kB). View file
|
|
__pycache__/logger.cpython-313.pyc
ADDED
Binary file (771 Bytes). View file
|
|
__pycache__/main.cpython-313.pyc
ADDED
Binary file (793 Bytes). View file
|
|
__pycache__/population_pandas.cpython-313.pyc
ADDED
Binary file (2.54 kB). 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,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import logging
|
2 |
+
import os
|
3 |
+
|
4 |
+
# Define absolute path for logs
|
5 |
+
LOG_DIR = "/app/logs"
|
6 |
+
LOG_FILE = os.path.join(LOG_DIR, "backend.log")
|
7 |
+
|
8 |
+
# Ensure the logs directory exists
|
9 |
+
os.makedirs(LOG_DIR, exist_ok=True)
|
10 |
+
|
11 |
+
# Configure logging settings
|
12 |
+
logging.basicConfig(
|
13 |
+
format="%(asctime)s - %(levelname)s - %(message)s",
|
14 |
+
level=logging.INFO,
|
15 |
+
handlers=[
|
16 |
+
logging.FileHandler(LOG_FILE), # Use absolute path
|
17 |
+
logging.StreamHandler() # Print logs to the console
|
18 |
+
]
|
19 |
+
)
|
20 |
+
|
21 |
+
logger = logging.getLogger(__name__)
|
22 |
+
|
23 |
+
if __name__ == "__main__":
|
24 |
+
logger.info("Logger is set up correctly!")
|
logs/backend.log
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
2025-02-08 15:52:40,867 - INFO - CSV file loaded successfully.
|
2 |
+
2025-02-08 15:52:40,919 - INFO - Data processing completed.
|
3 |
+
2025-02-08 15:52:40,973 - INFO - Starting FastAPI application...
|
4 |
+
2025-02-08 15:52:41,034 - INFO - Will watch for changes in these directories: ['C:\\chitu\\population_api\\backend']
|
5 |
+
2025-02-08 15:52:41,047 - INFO - Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
|
6 |
+
2025-02-08 15:52:41,055 - INFO - Started reloader process [9064] using WatchFiles
|
7 |
+
2025-02-08 15:52:49,238 - INFO - CSV file loaded successfully.
|
8 |
+
2025-02-08 15:52:49,304 - INFO - Data processing completed.
|
9 |
+
2025-02-08 15:52:49,383 - INFO - Starting FastAPI application...
|
10 |
+
2025-02-08 15:52:49,388 - INFO - Started server process [2244]
|
11 |
+
2025-02-08 15:52:49,430 - INFO - Waiting for application startup.
|
12 |
+
2025-02-08 15:52:49,440 - INFO - Application startup complete.
|
13 |
+
2025-02-08 15:53:03,119 - INFO - 1 change detected
|
14 |
+
2025-02-08 15:53:09,390 - INFO - 1 change detected
|
15 |
+
2025-02-08 15:53:09,780 - INFO - 1 change detected
|
16 |
+
2025-02-08 15:53:10,147 - INFO - 1 change detected
|
17 |
+
2025-02-08 15:53:10,518 - INFO - 1 change detected
|
18 |
+
2025-02-08 15:53:10,886 - INFO - 1 change detected
|
19 |
+
2025-02-08 15:53:11,253 - INFO - 1 change detected
|
20 |
+
2025-02-08 15:53:11,608 - INFO - 1 change detected
|
21 |
+
2025-02-08 15:53:11,965 - INFO - 1 change detected
|
22 |
+
2025-02-08 15:53:12,376 - INFO - 1 change detected
|
23 |
+
2025-02-08 15:53:12,742 - INFO - 1 change detected
|
24 |
+
2025-02-08 15:53:13,104 - INFO - 1 change detected
|
25 |
+
2025-02-08 15:53:13,464 - INFO - 1 change detected
|
26 |
+
2025-02-08 15:53:13,822 - INFO - 1 change detected
|
27 |
+
2025-02-08 15:53:14,181 - INFO - 1 change detected
|
28 |
+
2025-02-08 15:53:14,539 - INFO - 1 change detected
|
29 |
+
2025-02-08 15:53:14,898 - INFO - 1 change detected
|
30 |
+
2025-02-08 15:53:15,255 - INFO - 1 change detected
|
31 |
+
2025-02-08 15:53:15,452 - INFO - Shutting down
|
32 |
+
2025-02-08 15:53:15,563 - INFO - Waiting for application shutdown.
|
33 |
+
2025-02-08 15:53:15,568 - INFO - Application shutdown complete.
|
34 |
+
2025-02-08 15:53:15,573 - INFO - Finished server process [2244]
|
35 |
+
2025-02-08 15:53:16,005 - INFO - Stopping reloader process [9064]
|
36 |
+
2025-02-08 15:54:14,638 - INFO - CSV file loaded successfully.
|
37 |
+
2025-02-08 15:54:14,686 - INFO - Data processing completed.
|
38 |
+
2025-02-08 15:54:14,739 - INFO - Starting FastAPI application...
|
39 |
+
2025-02-08 15:54:14,823 - INFO - Will watch for changes in these directories: ['C:\\chitu\\population_api\\backend']
|
40 |
+
2025-02-08 15:54:14,834 - INFO - Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
|
41 |
+
2025-02-08 15:54:14,845 - INFO - Started reloader process [2996] using WatchFiles
|
42 |
+
2025-02-08 15:54:21,431 - INFO - CSV file loaded successfully.
|
43 |
+
2025-02-08 15:54:21,479 - INFO - Data processing completed.
|
44 |
+
2025-02-08 15:54:21,534 - INFO - Starting FastAPI application...
|
45 |
+
2025-02-08 15:54:21,537 - INFO - Started server process [3292]
|
46 |
+
2025-02-08 15:54:21,552 - INFO - Waiting for application startup.
|
47 |
+
2025-02-08 15:54:21,558 - INFO - Application startup complete.
|
48 |
+
2025-02-08 15:54:57,859 - INFO - Home endpoint accessed
|
49 |
+
2025-02-08 15:55:30,302 - INFO - Fetching all continents
|
50 |
+
2025-02-08 15:55:30,303 - INFO - Fetching all continents.
|
51 |
+
2025-02-08 15:55:30,335 - INFO - Fetching statistics for continent: Africa, stat: None
|
52 |
+
2025-02-08 15:55:30,337 - INFO - Fetching data for continent: Africa
|
53 |
+
2025-02-08 15:55:30,344 - INFO - Successfully fetched data for Africa
|
54 |
+
2025-02-08 15:56:58,310 - INFO - Fetching all continents
|
55 |
+
2025-02-08 15:56:58,312 - INFO - Fetching all continents.
|
56 |
+
2025-02-08 15:57:05,106 - INFO - Fetching statistics for continent: Asia, stat: None
|
57 |
+
2025-02-08 15:57:05,109 - INFO - Fetching data for continent: Asia
|
58 |
+
2025-02-08 15:57:05,120 - INFO - Successfully fetched data for Asia
|
59 |
+
2025-02-08 15:57:13,566 - INFO - Fetching statistics for continent: Asia, stat: Total_Countries
|
60 |
+
2025-02-08 15:57:13,568 - INFO - Fetching data for continent: Asia
|
61 |
+
2025-02-08 15:57:13,572 - INFO - Returning stat Total_Countries for Asia
|
62 |
+
2025-02-08 16:04:49,364 - INFO - CSV file loaded successfully.
|
63 |
+
2025-02-08 16:04:49,413 - INFO - Data processing completed.
|
64 |
+
2025-02-08 16:04:49,479 - INFO - Starting FastAPI application...
|
65 |
+
2025-02-08 16:04:49,570 - INFO - Will watch for changes in these directories: ['C:\\chitu\\population_api\\backend']
|
66 |
+
2025-02-08 16:04:49,580 - INFO - Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
|
67 |
+
2025-02-08 16:04:49,588 - INFO - Started reloader process [1920] using WatchFiles
|
68 |
+
2025-02-08 16:04:58,531 - INFO - CSV file loaded successfully.
|
69 |
+
2025-02-08 16:04:58,593 - INFO - Data processing completed.
|
70 |
+
2025-02-08 16:04:58,665 - INFO - Starting FastAPI application...
|
71 |
+
2025-02-08 16:04:58,669 - INFO - Started server process [5408]
|
72 |
+
2025-02-08 16:04:58,687 - INFO - Waiting for application startup.
|
73 |
+
2025-02-08 16:04:58,696 - INFO - Application startup complete.
|
74 |
+
2025-02-08 16:05:22,393 - INFO - Fetching all continents
|
75 |
+
2025-02-08 16:05:22,395 - INFO - Fetching all continents.
|
76 |
+
2025-02-08 16:05:22,424 - INFO - Fetching statistics for continent: Africa, stat: None
|
77 |
+
2025-02-08 16:05:22,427 - INFO - Fetching data for continent: Africa
|
78 |
+
2025-02-08 16:05:22,439 - INFO - Successfully fetched data for Africa
|
79 |
+
2025-02-08 16:05:27,302 - INFO - Fetching all continents
|
80 |
+
2025-02-08 16:05:27,304 - INFO - Fetching all continents.
|
81 |
+
2025-02-08 16:05:27,329 - INFO - Fetching statistics for continent: Europe, stat: None
|
82 |
+
2025-02-08 16:05:27,331 - INFO - Fetching data for continent: Europe
|
83 |
+
2025-02-08 16:05:27,339 - INFO - Successfully fetched data for Europe
|
84 |
+
2025-02-08 16:05:33,341 - INFO - Fetching all continents
|
85 |
+
2025-02-08 16:05:33,342 - INFO - Fetching all continents.
|
86 |
+
2025-02-08 16:05:33,369 - INFO - Fetching statistics for continent: Africa, stat: None
|
87 |
+
2025-02-08 16:05:33,371 - INFO - Fetching data for continent: Africa
|
88 |
+
2025-02-08 16:05:33,377 - INFO - Successfully fetched data for Africa
|
89 |
+
2025-02-08 16:08:30,755 - INFO - Fetching all continents
|
90 |
+
2025-02-08 16:08:30,757 - INFO - Fetching all continents.
|
91 |
+
2025-02-08 16:08:30,791 - INFO - Fetching statistics for continent: Africa, stat: None
|
92 |
+
2025-02-08 16:08:30,795 - INFO - Fetching data for continent: Africa
|
93 |
+
2025-02-08 16:08:30,803 - INFO - Successfully fetched data for Africa
|
94 |
+
2025-02-08 16:08:37,230 - INFO - Fetching all continents
|
95 |
+
2025-02-08 16:08:37,232 - INFO - Fetching all continents.
|
96 |
+
2025-02-08 16:08:37,261 - INFO - Fetching statistics for continent: Africa, stat: None
|
97 |
+
2025-02-08 16:08:37,264 - INFO - Fetching data for continent: Africa
|
98 |
+
2025-02-08 16:08:37,270 - INFO - Successfully fetched data for Africa
|
99 |
+
2025-02-08 16:10:16,115 - INFO - Shutting down
|
100 |
+
2025-02-08 16:10:16,226 - INFO - Waiting for application shutdown.
|
101 |
+
2025-02-08 16:10:16,231 - INFO - Application shutdown complete.
|
102 |
+
2025-02-08 16:10:16,236 - INFO - Finished server process [5408]
|
103 |
+
2025-02-08 16:10:16,671 - INFO - Stopping reloader process [1920]
|
104 |
+
2025-02-10 11:52:37,019 - INFO - CSV file loaded successfully.
|
105 |
+
2025-02-10 11:52:37,108 - INFO - Data processing completed.
|
106 |
+
2025-02-10 11:52:37,176 - INFO - Starting FastAPI application...
|
107 |
+
2025-02-10 11:52:37,381 - INFO - Will watch for changes in these directories: ['C:\\chitu\\population_api\\backend']
|
108 |
+
2025-02-10 11:52:37,399 - ERROR - [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
|
109 |
+
2025-02-10 11:56:24,383 - INFO - CSV file loaded successfully.
|
110 |
+
2025-02-10 11:56:24,468 - INFO - Data processing completed.
|
111 |
+
2025-02-10 11:56:24,560 - INFO - Starting FastAPI application...
|
112 |
+
2025-02-10 11:56:24,731 - INFO - Will watch for changes in these directories: ['C:\\chitu\\population_api\\backend']
|
113 |
+
2025-02-10 11:56:24,754 - ERROR - [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
|
main.py
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastapi import FastAPI
|
2 |
+
from backend.routes.continents import router
|
3 |
+
from backend.logger import logger
|
4 |
+
from backend.routes.continents import router
|
5 |
+
|
6 |
+
app = FastAPI()
|
7 |
+
|
8 |
+
# Include API routes
|
9 |
+
app.include_router(router)
|
10 |
+
|
11 |
+
logger.info("Starting FastAPI application...")
|
12 |
+
|
13 |
+
@app.get("/")
|
14 |
+
def home():
|
15 |
+
logger.info("Home endpoint accessed")
|
16 |
+
return {"message": "Welcome to the World Population API"}
|
models/__pycache__/population_models.cpython-313.pyc
ADDED
Binary file (2.88 kB). View file
|
|
models/population_models.py
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import BaseModel, Field
|
2 |
+
from typing import List, Union
|
3 |
+
|
4 |
+
class ContinentBase(BaseModel):
|
5 |
+
continent: str = Field(..., title="Continent Name", example="Asia")
|
6 |
+
|
7 |
+
class ContinentStats(BaseModel):
|
8 |
+
Total_Countries: int = Field(..., title="Total Number of Countries", example=48)
|
9 |
+
Total_Population: int = Field(..., title="Total Population", example=4600000000)
|
10 |
+
Average_Population: float = Field(..., title="Average Population Per Country", example=96000000)
|
11 |
+
Total_Area: int = Field(..., title="Total Land Area (sq km)", example=44679000)
|
12 |
+
max_population: int = Field(..., title="Highest Country Population", example=1400000000)
|
13 |
+
min_population: int = Field(..., title="Lowest Country Population", example=100000)
|
14 |
+
Country_Max_Population: str = Field(..., title="Country with Highest Population", example="China")
|
15 |
+
Country_Min_Population: str = Field(..., title="Country with Lowest Population", example="Maldives")
|
16 |
+
Population_Density: float = Field(..., title="Population Density (people/sq km)", example=103)
|
17 |
+
|
18 |
+
class ContinentResponse(BaseModel):
|
19 |
+
continent: str = Field(..., title="Continent Name", example="Asia")
|
20 |
+
statistics: ContinentStats
|
21 |
+
|
22 |
+
class ContinentsListResponse(BaseModel):
|
23 |
+
continents: List[str] = Field(..., title="List of Continents", example=["Asia", "Europe", "Africa"])
|
24 |
+
|
25 |
+
class StatResponse(BaseModel):
|
26 |
+
stat: str = Field(..., title="Statistic Name", example="Total Population")
|
27 |
+
value: Union[str, int, float] = Field(..., title="Statistic Value", example=4600000000)
|
28 |
+
|
requirement.txt
ADDED
Binary file (2.42 kB). View file
|
|
routes/__pycache__/continents.cpython-313.pyc
ADDED
Binary file (2.13 kB). View file
|
|
routes/continents.py
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastapi import APIRouter, HTTPException
|
2 |
+
from backend.service.population_pandas import get_continents, get_continent_data
|
3 |
+
from backend.models.population_models import ContinentResponse, ContinentsListResponse, StatResponse
|
4 |
+
from backend.logger import logger # Import the logger
|
5 |
+
|
6 |
+
router = APIRouter()
|
7 |
+
|
8 |
+
@router.get("/continents/", response_model=ContinentsListResponse)
|
9 |
+
def get_all_continents():
|
10 |
+
"""Fetch the list of all continents."""
|
11 |
+
logger.info("Fetching all continents")
|
12 |
+
return {"continents": get_continents()}
|
13 |
+
|
14 |
+
@router.get("/continents/{continent}/", response_model=ContinentResponse | StatResponse)
|
15 |
+
def get_continent_stats(continent: str, stat: str = None):
|
16 |
+
"""Fetch statistics for a specific continent."""
|
17 |
+
logger.info(f"Fetching statistics for continent: {continent}, stat: {stat}")
|
18 |
+
|
19 |
+
continent_data = get_continent_data(continent)
|
20 |
+
|
21 |
+
if not continent_data:
|
22 |
+
logger.error(f"Continent not found: {continent}")
|
23 |
+
raise HTTPException(status_code=404, detail="Continent not found")
|
24 |
+
|
25 |
+
if stat:
|
26 |
+
if stat in continent_data:
|
27 |
+
logger.info(f"Returning stat {stat} for {continent}")
|
28 |
+
return {"stat": stat, "value": continent_data[stat]}
|
29 |
+
else:
|
30 |
+
logger.warning(f"Invalid stat requested: {stat}")
|
31 |
+
raise HTTPException(status_code=400, detail="Invalid statistic requested")
|
32 |
+
|
33 |
+
logger.info(f"Successfully fetched data for {continent}")
|
34 |
+
return {"continent": continent, "statistics": continent_data}
|
service/__pycache__/population_pandas.cpython-313.pyc
ADDED
Binary file (2.89 kB). View file
|
|
service/population_pandas.py
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
# from backend.population_pandas import get_continents, get_continent_data
|
3 |
+
from backend.logger import logger
|
4 |
+
|
5 |
+
import os
|
6 |
+
|
7 |
+
# file_path = os.path.join(os.path.dirname(__file__), "../../data/world_population.csv")
|
8 |
+
file_path = os.path.join(os.path.dirname(__file__), "../data/world_population.csv")
|
9 |
+
# file_path = os.path.abspath(file_path) # Convert to absolute path
|
10 |
+
|
11 |
+
file_path = os.path.abspath(file_path) # Convert to absolute path
|
12 |
+
try:
|
13 |
+
df = pd.read_csv(file_path)
|
14 |
+
logger.info(f"CSV file loaded successfully from: {file_path}")
|
15 |
+
except Exception as e:
|
16 |
+
logger.error(f"Error loading CSV file from {file_path}: {e}")
|
17 |
+
df = None # Prevent NameError if file loading fails
|
18 |
+
|
19 |
+
if df is not None:
|
20 |
+
# Perform the aggregations only if df is successfully loaded
|
21 |
+
continent_stats = df.groupby("Continent").agg(
|
22 |
+
Total_Countries=('Country', 'count'),
|
23 |
+
Total_Population=('Population', 'sum'),
|
24 |
+
Average_Population=('Population', 'mean'),
|
25 |
+
Total_Area=('Area', 'sum'),
|
26 |
+
max_population=('Population', 'max'),
|
27 |
+
min_population=('Population', 'min'),
|
28 |
+
Country_Max_Population=('Population', lambda x: df.loc[x.idxmax(), 'Country']),
|
29 |
+
Country_Min_Population=('Population', lambda x: df.loc[x.idxmin(), 'Country'])
|
30 |
+
).reset_index()
|
31 |
+
|
32 |
+
# Compute Population Density
|
33 |
+
continent_stats["Population_Density"] = (
|
34 |
+
continent_stats["Total_Population"] / continent_stats["Total_Area"]
|
35 |
+
)
|
36 |
+
|
37 |
+
logger.info("Data processing completed.")
|
38 |
+
|
39 |
+
def get_continents():
|
40 |
+
"""Returns a list of all continents."""
|
41 |
+
logger.info("Fetching all continents.")
|
42 |
+
return continent_stats["Continent"].tolist()
|
43 |
+
|
44 |
+
def get_continent_data(continent):
|
45 |
+
"""Returns statistics for a specific continent."""
|
46 |
+
logger.info(f"Fetching data for continent: {continent}")
|
47 |
+
result = continent_stats[continent_stats["Continent"] == continent].squeeze()
|
48 |
+
|
49 |
+
if result.empty:
|
50 |
+
logger.warning(f"No data found for continent: {continent}")
|
51 |
+
return {}
|
52 |
+
|
53 |
+
return result.to_dict()
|
54 |
+
|
55 |
+
|