Spaces:
Running
Running
rmm
commited on
Commit
·
5cb2d26
1
Parent(s):
80c0010
feat: InputObservations are compared and only updated if new
Browse files- src/input/input_handling.py +17 -8
src/input/input_handling.py
CHANGED
@@ -248,7 +248,7 @@ def process_files():
|
|
248 |
st.session_state.image_filenames = filenames
|
249 |
|
250 |
|
251 |
-
def metadata_inputs_one_file(file:UploadedFile,
|
252 |
# dbg_ix is a hack to have different data in each input group, checking persistence
|
253 |
|
254 |
if st.session_state.container_metadata_inputs is not None:
|
@@ -262,6 +262,7 @@ def metadata_inputs_one_file(file:UploadedFile, ukey:str, dbg_ix:int=0) -> Input
|
|
262 |
author_email = st.session_state["input_author_email"]
|
263 |
filename = file.name
|
264 |
image_datetime = get_image_datetime(file)
|
|
|
265 |
# add the UI elements
|
266 |
#viewcontainer.title(f"Metadata for {filename}")
|
267 |
viewcontainer = _viewcontainer.expander(f"Metadata for {file.name}", expanded=True)
|
@@ -276,7 +277,7 @@ def metadata_inputs_one_file(file:UploadedFile, ukey:str, dbg_ix:int=0) -> Input
|
|
276 |
latitude = viewcontainer.text_input(
|
277 |
"Latitude for " + filename,
|
278 |
spoof_metadata.get('latitude', 0) + dbg_ix,
|
279 |
-
key=f"input_latitude_{
|
280 |
if latitude and not is_valid_number(latitude):
|
281 |
viewcontainer.error("Please enter a valid latitude (numerical only).")
|
282 |
m_logger.error(f"Invalid latitude entered: {latitude}.")
|
@@ -284,7 +285,7 @@ def metadata_inputs_one_file(file:UploadedFile, ukey:str, dbg_ix:int=0) -> Input
|
|
284 |
longitude = viewcontainer.text_input(
|
285 |
"Longitude for " + filename,
|
286 |
spoof_metadata.get('longitude', ""),
|
287 |
-
key=f"input_longitude_{
|
288 |
if longitude and not is_valid_number(longitude):
|
289 |
viewcontainer.error("Please enter a valid longitude (numerical only).")
|
290 |
m_logger.error(f"Invalid latitude entered: {latitude}.")
|
@@ -299,13 +300,13 @@ def metadata_inputs_one_file(file:UploadedFile, ukey:str, dbg_ix:int=0) -> Input
|
|
299 |
date_value = datetime.datetime.now().date()
|
300 |
|
301 |
## if not, give user the option to enter manually
|
302 |
-
date_option = viewcontainer.date_input("Date for "+filename, value=date_value, key=f"input_date_{
|
303 |
-
time_option = viewcontainer.time_input("Time for "+filename, time_value, key=f"input_time_{
|
304 |
|
305 |
-
observation = InputObservation(image=
|
306 |
author_email=author_email, date=image_datetime, time=None,
|
307 |
date_option=date_option, time_option=time_option,
|
308 |
-
uploaded_filename=file,
|
309 |
)
|
310 |
|
311 |
# TODO: pass in the hash to InputObservation, so it is done once only. (need to refactor the class a bit)
|
@@ -330,7 +331,15 @@ def _setup_dynamic_inputs() -> None:
|
|
330 |
for ix, file in enumerate(uploaded_files):
|
331 |
hash = hashes[ix]
|
332 |
observation = metadata_inputs_one_file(file, hash, ix)
|
333 |
-
observations
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
334 |
|
335 |
st.session_state.observations = observations
|
336 |
|
|
|
248 |
st.session_state.image_filenames = filenames
|
249 |
|
250 |
|
251 |
+
def metadata_inputs_one_file(file:UploadedFile, image_hash:str, dbg_ix:int=0) -> InputObservation:
|
252 |
# dbg_ix is a hack to have different data in each input group, checking persistence
|
253 |
|
254 |
if st.session_state.container_metadata_inputs is not None:
|
|
|
262 |
author_email = st.session_state["input_author_email"]
|
263 |
filename = file.name
|
264 |
image_datetime = get_image_datetime(file)
|
265 |
+
image = st.session_state.images.get(image_hash, None)
|
266 |
# add the UI elements
|
267 |
#viewcontainer.title(f"Metadata for {filename}")
|
268 |
viewcontainer = _viewcontainer.expander(f"Metadata for {file.name}", expanded=True)
|
|
|
277 |
latitude = viewcontainer.text_input(
|
278 |
"Latitude for " + filename,
|
279 |
spoof_metadata.get('latitude', 0) + dbg_ix,
|
280 |
+
key=f"input_latitude_{image_hash}")
|
281 |
if latitude and not is_valid_number(latitude):
|
282 |
viewcontainer.error("Please enter a valid latitude (numerical only).")
|
283 |
m_logger.error(f"Invalid latitude entered: {latitude}.")
|
|
|
285 |
longitude = viewcontainer.text_input(
|
286 |
"Longitude for " + filename,
|
287 |
spoof_metadata.get('longitude', ""),
|
288 |
+
key=f"input_longitude_{image_hash}")
|
289 |
if longitude and not is_valid_number(longitude):
|
290 |
viewcontainer.error("Please enter a valid longitude (numerical only).")
|
291 |
m_logger.error(f"Invalid latitude entered: {latitude}.")
|
|
|
300 |
date_value = datetime.datetime.now().date()
|
301 |
|
302 |
## if not, give user the option to enter manually
|
303 |
+
date_option = viewcontainer.date_input("Date for "+filename, value=date_value, key=f"input_date_{image_hash}")
|
304 |
+
time_option = viewcontainer.time_input("Time for "+filename, time_value, key=f"input_time_{image_hash}")
|
305 |
|
306 |
+
observation = InputObservation(image=image, latitude=latitude, longitude=longitude,
|
307 |
author_email=author_email, date=image_datetime, time=None,
|
308 |
date_option=date_option, time_option=time_option,
|
309 |
+
uploaded_filename=file, image_md5=image_hash
|
310 |
)
|
311 |
|
312 |
# TODO: pass in the hash to InputObservation, so it is done once only. (need to refactor the class a bit)
|
|
|
331 |
for ix, file in enumerate(uploaded_files):
|
332 |
hash = hashes[ix]
|
333 |
observation = metadata_inputs_one_file(file, hash, ix)
|
334 |
+
old_obs = st.session_state.observations.get(hash, None)
|
335 |
+
if old_obs is not None:
|
336 |
+
if old_obs == observation:
|
337 |
+
observations[hash] = old_obs
|
338 |
+
else:
|
339 |
+
observations[hash] = observation
|
340 |
+
observation.show_diff(old_obs)
|
341 |
+
else:
|
342 |
+
observations[hash] = observation
|
343 |
|
344 |
st.session_state.observations = observations
|
345 |
|