Spaces:
Runtime error
Runtime error
Commit
·
59275a8
1
Parent(s):
18474d2
Remove redundant lines, fix variable names, make requests async
Browse files- frontend/src/App.js +3 -3
- frontend/src/components/Map.js +5 -6
- frontend/src/utils/mapUtils.js +3 -10
- main.py +7 -5
frontend/src/App.js
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
// import logo from './logo.svg';
|
2 |
import './App.css';
|
3 |
-
import
|
4 |
import React, { useState,
|
5 |
// useEffect,
|
6 |
// useCallback
|
7 |
} from 'react';
|
8 |
-
|
9 |
|
10 |
|
11 |
function App() {
|
@@ -44,7 +44,7 @@ function App() {
|
|
44 |
<button type="submit">Search</button>
|
45 |
</form>
|
46 |
</div>
|
47 |
-
<
|
48 |
onMapClick={handleMapClick}
|
49 |
searchQuery={submittedQuery}
|
50 |
contentType={contentType}
|
|
|
1 |
// import logo from './logo.svg';
|
2 |
import './App.css';
|
3 |
+
import WikiMap from './components/Map';
|
4 |
import React, { useState,
|
5 |
// useEffect,
|
6 |
// useCallback
|
7 |
} from 'react';
|
8 |
+
|
9 |
|
10 |
|
11 |
function App() {
|
|
|
44 |
<button type="submit">Search</button>
|
45 |
</form>
|
46 |
</div>
|
47 |
+
<WikiMap
|
48 |
onMapClick={handleMapClick}
|
49 |
searchQuery={submittedQuery}
|
50 |
contentType={contentType}
|
frontend/src/components/Map.js
CHANGED
@@ -48,7 +48,7 @@ const ResizeHandler = ({ trigger }) => {
|
|
48 |
}, [trigger, map]);
|
49 |
return null;
|
50 |
};
|
51 |
-
const
|
52 |
const [baseLayer, setBaseLayer] = useState("base"); // "base" | "satellite"
|
53 |
|
54 |
const [markerPosition, setMarkerPosition] = useState(null);
|
@@ -182,7 +182,7 @@ const Map = ( { onMapClick, searchQuery, contentType, setSearchQuery, setSubmitt
|
|
182 |
|
183 |
if (contentType === 'summary') {
|
184 |
setWikiContent(data);
|
185 |
-
if (data
|
186 |
setMarkerPosition([data.latitude, data.longitude]);
|
187 |
}
|
188 |
} else if (contentType === 'full') {
|
@@ -210,9 +210,8 @@ const Map = ( { onMapClick, searchQuery, contentType, setSearchQuery, setSubmitt
|
|
210 |
const blob = new Blob([htmlContent], { type: 'text/html' });
|
211 |
const blobUrl = URL.createObjectURL(blob);
|
212 |
setIframeSrc(blobUrl);
|
213 |
-
|
214 |
-
|
215 |
-
if (data && data.latitude && data.longitude) {
|
216 |
setMarkerPosition([data.latitude, data.longitude]);
|
217 |
}
|
218 |
}
|
@@ -1376,4 +1375,4 @@ const Map = ( { onMapClick, searchQuery, contentType, setSearchQuery, setSubmitt
|
|
1376 |
};
|
1377 |
|
1378 |
|
1379 |
-
export default
|
|
|
48 |
}, [trigger, map]);
|
49 |
return null;
|
50 |
};
|
51 |
+
const WikiMap = ( { onMapClick, searchQuery, contentType, setSearchQuery, setSubmittedQuery } ) => {
|
52 |
const [baseLayer, setBaseLayer] = useState("base"); // "base" | "satellite"
|
53 |
|
54 |
const [markerPosition, setMarkerPosition] = useState(null);
|
|
|
182 |
|
183 |
if (contentType === 'summary') {
|
184 |
setWikiContent(data);
|
185 |
+
if (data?.latitude && data?.longitude) {
|
186 |
setMarkerPosition([data.latitude, data.longitude]);
|
187 |
}
|
188 |
} else if (contentType === 'full') {
|
|
|
210 |
const blob = new Blob([htmlContent], { type: 'text/html' });
|
211 |
const blobUrl = URL.createObjectURL(blob);
|
212 |
setIframeSrc(blobUrl);
|
213 |
+
|
214 |
+
if (data?.latitude && data?.longitude) {
|
|
|
215 |
setMarkerPosition([data.latitude, data.longitude]);
|
216 |
}
|
217 |
}
|
|
|
1375 |
};
|
1376 |
|
1377 |
|
1378 |
+
export default WikiMap;
|
frontend/src/utils/mapUtils.js
CHANGED
@@ -88,9 +88,6 @@ function formatArea(area, unit = 'sqm', format = "normal") {
|
|
88 |
case "ha":
|
89 |
value = area / 1e4;
|
90 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' ha';
|
91 |
-
case "sqm":
|
92 |
-
value = area;
|
93 |
-
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' m²';
|
94 |
case "acres":
|
95 |
value = area / 4046.8564224;
|
96 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' acres';
|
@@ -100,6 +97,7 @@ function formatArea(area, unit = 'sqm', format = "normal") {
|
|
100 |
case "sqft":
|
101 |
value = area * 10.76391041671;
|
102 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' ft²';
|
|
|
103 |
default:
|
104 |
value = area;
|
105 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' m²';
|
@@ -113,25 +111,20 @@ function formatPerimeter(perimeter, unit = 'sqm', format = "normal") {
|
|
113 |
let value;
|
114 |
switch (unit) {
|
115 |
case "km2":
|
116 |
-
value = perimeter / 1000;
|
117 |
-
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' km';
|
118 |
case "ha":
|
119 |
value = perimeter / 1000;
|
120 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' km';
|
121 |
-
case "m2":
|
122 |
-
value = perimeter;
|
123 |
-
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' m';
|
124 |
case "mi2":
|
125 |
value = perimeter / 1609.344;
|
126 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' mi';
|
127 |
case "sqft":
|
128 |
value = perimeter * 3.280839895013123; // meters to feet
|
129 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' ft';
|
|
|
130 |
default:
|
131 |
value = perimeter;
|
132 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' m';
|
133 |
}
|
134 |
}
|
135 |
|
136 |
-
export {generateGeodesicPoints, calculatePolygonArea, getPolygonCentroid, formatArea, formatPerimeter};
|
137 |
-
// calculatePolygonArea
|
|
|
88 |
case "ha":
|
89 |
value = area / 1e4;
|
90 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' ha';
|
|
|
|
|
|
|
91 |
case "acres":
|
92 |
value = area / 4046.8564224;
|
93 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' acres';
|
|
|
97 |
case "sqft":
|
98 |
value = area * 10.76391041671;
|
99 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' ft²';
|
100 |
+
case "sqm":
|
101 |
default:
|
102 |
value = area;
|
103 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' m²';
|
|
|
111 |
let value;
|
112 |
switch (unit) {
|
113 |
case "km2":
|
|
|
|
|
114 |
case "ha":
|
115 |
value = perimeter / 1000;
|
116 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' km';
|
|
|
|
|
|
|
117 |
case "mi2":
|
118 |
value = perimeter / 1609.344;
|
119 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' mi';
|
120 |
case "sqft":
|
121 |
value = perimeter * 3.280839895013123; // meters to feet
|
122 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' ft';
|
123 |
+
case "m2":
|
124 |
default:
|
125 |
value = perimeter;
|
126 |
return (format === "scientific" ? value.toExponential(2) : value.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 })) + ' m';
|
127 |
}
|
128 |
}
|
129 |
|
130 |
+
export {generateGeodesicPoints, calculatePolygonArea, getPolygonCentroid, formatArea, formatPerimeter};
|
|
main.py
CHANGED
@@ -58,7 +58,8 @@ async def get_wiki_summary(summary_page_name: str, background_tasks: BackgroundT
|
|
58 |
# print("Cache hit for summary:", page_name) #Working
|
59 |
return JSONResponse(content=summary_cache[summary_page_name], status_code=200)
|
60 |
try:
|
61 |
-
|
|
|
62 |
|
63 |
if response.status_code != 200:
|
64 |
return JSONResponse(
|
@@ -102,7 +103,8 @@ async def search_wiki_full_page(full_page: str, background_tasks: BackgroundTask
|
|
102 |
# print("Cache hit for full_page:", full_page) #Working
|
103 |
return JSONResponse(content=full_page_cache[full_page], status_code=200)
|
104 |
|
105 |
-
|
|
|
106 |
try:
|
107 |
if response.status_code != 200:
|
108 |
return JSONResponse(
|
@@ -217,9 +219,10 @@ async def get_nearby_wiki_pages(payload: NearbyWikiPage):
|
|
217 |
f"&gsradius={radius}"
|
218 |
f"&gslimit={limit}"
|
219 |
"&format=json")
|
220 |
-
|
221 |
try:
|
222 |
-
|
|
|
223 |
if response.status_code != 200:
|
224 |
return JSONResponse(
|
225 |
content={"error": "Failed to fetch nearby pages"},
|
@@ -258,7 +261,6 @@ async def get_nearby_wiki_pages(payload: NearbyWikiPage):
|
|
258 |
tasks = [fetch_url(client, url) for url in urls]
|
259 |
results = await asyncio.gather(*tasks)
|
260 |
|
261 |
-
# print(results)
|
262 |
for result in results:
|
263 |
|
264 |
for unit in result.get("data", {}).get("query", {}).get("geosearch", []):
|
|
|
58 |
# print("Cache hit for summary:", page_name) #Working
|
59 |
return JSONResponse(content=summary_cache[summary_page_name], status_code=200)
|
60 |
try:
|
61 |
+
async with httpx.AsyncClient() as client:
|
62 |
+
response = await client.get(f"https://en.wikipedia.org/api/rest_v1/page/summary/{summary_page_name}", timeout=10)
|
63 |
|
64 |
if response.status_code != 200:
|
65 |
return JSONResponse(
|
|
|
103 |
# print("Cache hit for full_page:", full_page) #Working
|
104 |
return JSONResponse(content=full_page_cache[full_page], status_code=200)
|
105 |
|
106 |
+
async with httpx.AsyncClient() as client:
|
107 |
+
response = await client.get(f"https://en.wikipedia.org/wiki/{full_page}", timeout=10)
|
108 |
try:
|
109 |
if response.status_code != 200:
|
110 |
return JSONResponse(
|
|
|
219 |
f"&gsradius={radius}"
|
220 |
f"&gslimit={limit}"
|
221 |
"&format=json")
|
222 |
+
|
223 |
try:
|
224 |
+
async with httpx.AsyncClient() as client:
|
225 |
+
response = await client.get(url, timeout=10)
|
226 |
if response.status_code != 200:
|
227 |
return JSONResponse(
|
228 |
content={"error": "Failed to fetch nearby pages"},
|
|
|
261 |
tasks = [fetch_url(client, url) for url in urls]
|
262 |
results = await asyncio.gather(*tasks)
|
263 |
|
|
|
264 |
for result in results:
|
265 |
|
266 |
for unit in result.get("data", {}).get("query", {}).get("geosearch", []):
|