Skip to content

Commit 9abd815

Browse files
authored
Merge pull request #30 from WHOIGit/pandas-3.0
Removed /get from URLs
2 parents 0e2370b + bba32c2 commit 9abd815

21 files changed

Lines changed: 74 additions & 63 deletions

File tree

.github/workflows/publish-image-api.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ on:
33
push:
44
branches:
55
- "main"
6-
- "order-by-date"
6+
- "pandas-3.0"
77

88
env:
99
IMAGE_NAME: nes-lter-api-2

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM python:3.13-slim-bookworm
1+
FROM python:3.12-slim-bookworm
22

33
# geospatial libraries
44
RUN apt-get update && apt-get install -y binutils libproj-dev libgdal-dev libpoppler-dev git

api/core/templates/cruise_list.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ <h1><span class="emoji">{{ emoji }}</span>{{ label }}</h1>
3737
style="width:24px;height:24px;vertical-align:-3px;margin-right:.35rem;border-radius:4px;">
3838
Cruise Track
3939
</a>
40-
<a href="/api/ctd/cruises/get/{{ cruise.name|lower }}" target="_blank" class="link">
40+
<a href="/api/ctd/cruises/{{ cruise.name|lower }}" target="_blank" class="link">
4141
📊 Cruise Data
4242
</a>
43-
<a href="/api/ctd/casts/get/{{ cruise.name|lower }}" target="_blank" class="link">
43+
<a href="/api/ctd/casts/{{ cruise.name|lower }}" target="_blank" class="link">
4444
🪣 Casts
4545
</a>
4646
<a href="/api/ctd/bottles/{{ cruise.name|lower }}" target="_blank" class="link">
@@ -52,7 +52,7 @@ <h1><span class="emoji">{{ emoji }}</span>{{ label }}</h1>
5252
<a href="/api/ctd/metadata/{{ cruise.name|lower }}" target="_blank" class="link">
5353
🗒️ CTD Metadata
5454
</a>
55-
<a href="/api/events/get/{{ cruise.name|lower }}" target="_blank" class="link">
55+
<a href="/api/events/{{ cruise.name|lower }}" target="_blank" class="link">
5656
📅 Events
5757
</a>
5858
<a href="/api/events/instruments/{{ cruise.name|lower }}" target="_blank" class="link">
@@ -61,7 +61,7 @@ <h1><span class="emoji">{{ emoji }}</span>{{ label }}</h1>
6161
<a href="/api/events/history/{{ cruise.name|lower }}" target="_blank" class="link">
6262
🕰️ Event History
6363
</a>
64-
<a href="/api/underway/get/{{ cruise.name|lower }}" target="_blank" class="link">
64+
<a href="/api/underway/{{ cruise.name|lower }}" target="_blank" class="link">
6565
🚢 Underway Data
6666
</a>
6767
<a href="/api/underway/get_column_headers/{{ cruise.name|lower }}" target="_blank" class="link">

api/ctd/api.py

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,10 @@
99

1010
router = Router()
1111

12-
@router.get("/vessels/get/all", response=List[VesselOutput], tags=["Users"])
12+
@router.get("/vessels/all", response=List[VesselOutput], tags=["Users"])
1313
def get_vessels(request):
1414
return CtdService.get_vessels()
1515

16-
17-
@router.get("/vessels/get/{vessel_name}", response=VesselOutput, tags=["Users"])
18-
def get_vessel(request, vessel_name: str):
19-
return CtdService.get_vessel(vessel_name)
20-
21-
2216
@router.post('/vessels/create', tags=["Admin"], auth=TokenAuthenticator())
2317
def create_vessel(request, input: AddVesselInput):
2418
try:
@@ -43,15 +37,19 @@ def delete_vessel(request, vessel_name: str):
4337
except ValueError as e:
4438
return {"status": "error", "message": str(e)}
4539

46-
@router.get("/cruises/get/all", response=List[CruiseOutput], tags=["Users"])
47-
def get_cruises(request):
48-
return CtdService.get_cruises()
40+
@router.get("/vessels/{vessel_name}", response=VesselOutput, tags=["Users"])
41+
def get_vessel(request, vessel_name: str):
42+
return CtdService.get_vessel(vessel_name)
4943

5044

51-
@router.get("/cruises/get/{cruise_name}", response=CruiseOutput, tags=["Users"])
52-
def get_cruise(request, cruise_name: str):
53-
return CtdService.get_cruise(cruise_name)
45+
@router.get("/cruises/all", response=List[CruiseOutput], tags=["Users"])
46+
def get_cruises(request):
47+
return CtdService.get_cruises()
5448

49+
@router.get("/cruises/readme", response=str, tags=["Users"])
50+
def get_cruise_readme_all(request):
51+
return CtdService.get_cruise_readme_all()
52+
5553
@router.post('/cruises/create', tags=["Admin"], auth=TokenAuthenticator())
5654
def create_cruise(request, input: AddCruiseInput):
5755
try:
@@ -60,7 +58,6 @@ def create_cruise(request, input: AddCruiseInput):
6058
except ValueError as e:
6159
return {"status": "error", "message": str(e)}
6260

63-
6461
@router.post('/cruises/update/{cruise_name}', tags=["Admin"], auth=TokenAuthenticator())
6562
def update_cruise(request, cruise_name: str, input: UpdateCruiseInput):
6663
try:
@@ -78,22 +75,14 @@ def delete_cruise(request, cruise_name: str):
7875
except ValueError as e:
7976
return {"status": "error", "message": str(e)}
8077

78+
@router.get("/cruises/{cruise_name}", response=CruiseOutput, tags=["Users"])
79+
def get_cruise(request, cruise_name: str):
80+
return CtdService.get_cruise(cruise_name)
81+
8182
@router.get("/cruises/readme/{cruise_name}", response=str, tags=["Users"])
8283
def get_cruise_readme(request, cruise_name: str):
8384
return CtdService.get_cruise_readme(cruise_name)
8485

85-
@router.get("/cruises/readme", response=str, tags=["Users"])
86-
def get_cruise_readme_all(request):
87-
return CtdService.get_cruise_readme_all()
88-
89-
@router.get("/casts/get/{cruise_name}", response=List[CastOutput], tags=["Users"])
90-
def get_casts(request, cruise_name: str):
91-
return CtdService.get_casts(cruise_name)
92-
93-
94-
@router.get("/cast/get/{cruise_name}/{cast_number}", tags=["Users"])
95-
def get_cast(request, cruise_name: str, cast_number: str):
96-
return CtdService.get_cast(cruise_name, cast_number)
9786

9887
@router.post('/casts/create', tags=["Admin"], auth=TokenAuthenticator())
9988
def create_cast(request, input: CastInput):
@@ -111,15 +100,22 @@ def update_cast(request, cruise_name: str, cast_number: str, input: UpdateCastIn
111100
except ValueError as e:
112101
return {"status": "error", "message": str(e)}
113102

114-
115103
@router.delete('/casts/delete/{cruise_name}/{cast_number}', tags=["Admin"], auth=TokenAuthenticator())
116104
def delete_cast(request, cruise_name: str, cast_number: str):
117105
try:
118106
result = CtdService.delete_cast(cruise_name, cast_number)
119107
return result
120108
except ValueError as e:
121109
return {"status": "error", "message": str(e)}
110+
111+
@router.get("/casts/{cruise_name}", response=List[CastOutput], tags=["Users"])
112+
def get_casts(request, cruise_name: str):
113+
return CtdService.get_casts(cruise_name)
122114

115+
@router.get("/cast/{cruise_name}/{cast_number}", tags=["Users"])
116+
def get_cast(request, cruise_name: str, cast_number: str):
117+
return CtdService.get_cast(cruise_name, cast_number)
118+
123119

124120
@router.post('/niskins/create', tags=["Admin"], auth=TokenAuthenticator())
125121
def create_niskin(request, input: NiskinInput):
@@ -129,18 +125,14 @@ def create_niskin(request, input: NiskinInput):
129125
except ValueError as e:
130126
return {"status": "error", "message": str(e)}
131127

132-
133-
134-
@router.get("/niskins/get/all/{cruise_name}/{cast_number}", response=List[NiskinOutput], tags=["Users"])
128+
@router.get("/niskins/all/{cruise_name}/{cast_number}", response=List[NiskinOutput], tags=["Users"])
135129
def get_niskins(request, cruise_name: str, cast_number: str):
136130
return CtdService.get_niskins(cruise_name, cast_number)
137131

138-
139-
@router.get("/niskins/get/{cruise_name}/{cast_number}/{niskin_number}", response=NiskinOutput, tags=["Users"])
132+
@router.get("/niskins/{cruise_name}/{cast_number}/{niskin_number}", response=NiskinOutput, tags=["Users"])
140133
def get_niskin(request, cruise_name: str, cast_number: str, niskin_number: int):
141134
return CtdService.get_niskin(cruise_name, cast_number, niskin_number)
142135

143-
144136
@router.post('/niskins/update/{cruise_name}/{cast_number}/{niskin_number}', tags=["Admin"], auth=TokenAuthenticator())
145137
def update_niskin(request, cruise_name: str, cast_number: str, niskin_number: str, input: UpdateNiskinInput):
146138
try:
@@ -157,6 +149,7 @@ def delete_niskin(request, cruise_name: str, cast_number: str, niskin_number: in
157149
except ValueError as e:
158150
return {"status": "error", "message": str(e)}
159151

152+
160153
@router.get("/bottles/{cruise_name}", tags=["Users"])
161154
def get_bottles(request, cruise_name: str):
162155
return CtdService.get_bottles(cruise_name)

api/events/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
router = Router()
99

10-
@router.get("/get/{cruise_name}", tags=["Users"])
10+
@router.get("/{cruise_name}", tags=["Users"])
1111
def get_events(request, cruise_name: str):
1212
return EventService.get_events(cruise_name)
1313

api/nut/api.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ def getall(request):
1111
def get_readme(request):
1212
return NutService.get_readme()
1313

14+
@router.get("/ar52_samplelog", tags=["Users"])
15+
def get_ar52_samplelog(request):
16+
return NutService.ar52_samplelog()
17+
1418
@router.get("/{cruise_name}", tags=["Users"])
1519
def get(request, cruise_name: str):
1620
return NutService.get(cruise_name)

api/nut/management/commands/importnut.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ def apply_flags(self, df):
233233
for param in DL_dict.keys():
234234
if not close_rows.empty:
235235
mean_value = (close_rows[param].mean() + row[param]) / 2
236-
ratio = 100 * (row[param] - mean_value) / mean_value
236+
ratio = 100 * (row[param] - mean_value) / mean_value
237237
if len(close_rows) >= 2:
238238
# Compare sample value against mean of the other rows
239239
if abs(close_rows[param].mean() - row[param]) > diff_dict[param]:
@@ -246,6 +246,9 @@ def apply_flags(self, df):
246246
elif abs(ratio) > 20:
247247
df.at[idx, flag_dict[param]] = 3
248248
else:
249+
#if param == "silicate":
250+
#print(len(close_rows), mean_value, flush=True)
251+
#print(ratio,row, flush=True)
249252
if abs(ratio) > 40:
250253
df.at[idx, flag_dict[param]] = 4
251254
elif abs(ratio) > 15:

api/nut/services.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import csv
44
import glob
5+
import pandas as pd
56
from django.http import FileResponse, HttpResponse, Http404
67
from core.utils import get_store
78
from core.models import Cruise
@@ -73,4 +74,16 @@ def get_readme(cls) -> str:
7374
path = glob.glob(os.path.join(f'/vast/raw/all/nut/', 'README*'))[0]
7475
with open(path, 'r') as fin:
7576
content = fin.read()
76-
return HttpResponse(content, content_type="text/plain")
77+
return HttpResponse(content, content_type="text/plain")
78+
79+
@classmethod
80+
def ar52_samplelog(cls) -> FileResponse:
81+
path = "/vast/raw/all/LTER_sample_log.xlsx"
82+
df = pd.read_excel(path, dtype=str)
83+
cruises = {"AR52A", "AR52B"}
84+
filtered = df[df["Cruise"].isin(cruises)]
85+
86+
# Convert to CSV
87+
csv_content = filtered.to_csv(index=False)
88+
89+
return HttpResponse(csv_content,content_type="text/csv")

api/underway/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
router = Router()
88

9-
@router.get("/get/{cruise_name}", tags=["Users"])
9+
@router.get("/{cruise_name}", tags=["Users"])
1010
def get_underway_data(request, cruise_name: str):
1111
return UnderwayService.get_data(cruise_name)
1212

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ django-ninja==1.5.1
22
djangorestframework
33
psycopg2
44
django-simple-history
5-
pandas
5+
pandas==3.0
66
python-dotenv
77
requests
88
openpyxl

0 commit comments

Comments
 (0)