Chittrarasu commited on
Commit
ef6fa9a
·
0 Parent(s):

backend deploymemt

Browse files
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
+