Bug fixes related to file uploads. Fixing id_random int vs str confusion. For account and for hosted_file.

This commit is contained in:
Scott Idem
2026-01-22 16:01:23 -05:00
parent 988775b9dd
commit 48d9e38c39
3 changed files with 48 additions and 28 deletions

View File

@@ -171,24 +171,37 @@ def lookup_id_random_pop(
]
for prefix in id_prefixes:
key = f'{prefix}_id_random'
if key in obj_data:
# Table name mapping
table = prefix
if prefix == 'address_location': table = 'address'
elif prefix in ['contact_1', 'contact_2']: table = 'contact'
elif prefix == 'event_id_random_only': table = 'event'
elif prefix == 'poc_event_person': table = 'event_person'
elif prefix == 'poc_person': table = 'person'
key_random = f'{prefix}_id_random'
key_id = f'{prefix}_id'
# Table name mapping
table = prefix
if prefix == 'address_location': table = 'address'
elif prefix in ['contact_1', 'contact_2']: table = 'contact'
elif prefix == 'event_id_random_only': table = 'event'
elif prefix == 'poc_event_person': table = 'event_person'
elif prefix == 'poc_person': table = 'person'
resolved_id = None
# Scenario A: Legacy suffix (e.g., account_id_random: "abc")
if key_random in obj_data:
resolved_id = redis_lookup_id_random(record_id_random=obj_data[key_random], table_name=table)
obj_data.pop(key_random)
resolved_id = redis_lookup_id_random(record_id_random=obj_data[key], table_name=table)
obj_data[f'{prefix if not prefix.endswith("_id_random_only") else prefix[:-15]+"_id_only"}'] = resolved_id
# Special case for event_id_random_only
target_id_key = f'{prefix[:-7]}' if prefix.endswith('_random') else f'{prefix}_id'
# Scenario B: Vision naming (e.g., account_id: "abc")
# Only resolve if it's a string of the correct length (random ID format)
elif key_id in obj_data and isinstance(obj_data[key_id], str) and 11 <= len(obj_data[key_id]) <= 22:
resolved_id = redis_lookup_id_random(record_id_random=obj_data[key_id], table_name=table)
if resolved_id is not None:
# Set the target ID field
target_id_key = key_id
if prefix == 'event_id_random_only': target_id_key = 'event_id_only'
obj_data[target_id_key] = resolved_id
obj_data.pop(key)
# Also set the short prefix version (e.g., obj_data['account'] = 1) for compatibility
obj_data[f'{prefix if not prefix.endswith("_id_random_only") else prefix[:-15]+"_id_only"}'] = resolved_id
# Polymorphic links
polymorphic = [
@@ -200,12 +213,19 @@ def lookup_id_random_pop(
]
for type_key, rand_key, id_key in polymorphic:
# Handle random key if present
if type_key in obj_data and rand_key in obj_data:
obj_data[id_key] = redis_lookup_id_random(
record_id_random=obj_data.get(rand_key),
table_name=obj_data.get(type_key)
)
obj_data.pop(rand_key)
# Handle Vision naming (id_key contains the string)
elif type_key in obj_data and id_key in obj_data and isinstance(obj_data[id_key], str) and 11 <= len(obj_data[id_key]) <= 22:
obj_data[id_key] = redis_lookup_id_random(
record_id_random=obj_data.get(id_key),
table_name=obj_data.get(type_key)
)
return obj_data

View File

@@ -15,9 +15,9 @@ class Hosted_File_Base(BaseModel):
log.debug(locals())
# --- Standardized Vision IDs (Strings) ---
id: Optional[str] = Field(None, **base_fields['hosted_file_id_random'])
hosted_file_id: Optional[str] = Field(None, **base_fields['hosted_file_id_random'])
account_id: Optional[str] = Field(None, **base_fields['account_id_random'])
id: Optional[Union[int, str]] = Field(None, **base_fields['hosted_file_id_random'])
hosted_file_id: Optional[Union[int, str]] = Field(None, **base_fields['hosted_file_id_random'])
account_id: Optional[Union[int, str]] = Field(None, **base_fields['account_id_random'])
hash_sha256: Optional[str]
title: Optional[str]
@@ -69,17 +69,17 @@ class Hosted_File_Base(BaseModel):
"""
# 1. Map Random Strings to Clean Names
if rid := values.get('id_random') or values.get('hosted_file_id_random'):
values['id'] = rid
values['hosted_file_id'] = rid
# Only set if not already a valid integer
if not isinstance(values.get('id'), int):
values['id'] = rid
if not isinstance(values.get('hosted_file_id'), int):
values['hosted_file_id'] = rid
if a_rid := values.get('account_id_random'):
values['account_id'] = a_rid
# Only set if not already a valid integer
if not isinstance(values.get('account_id'), int):
values['account_id'] = a_rid
# 2. Prevent "Collision Population"
for k in ['id', 'account_id']:
if k in values and not isinstance(values[k], str):
del values[k]
return values
class Config:

View File

@@ -512,8 +512,8 @@ async def upload_files(
# Going to try and create a new host_file entry...
log.warning('For some reason a host_file object entry with the has was not found.')
# file_info['id_random'] = None
file_info['account_id'] = account_id
file_info['account_id_random'] = account_id_random
file_info['account_id'] = account_id # This is the integer ID
file_info['account_id_random'] = account_id_random # This is the string ID
hosted_file_obj = Hosted_File_Base(**file_info)
if hosted_file_obj_result := create_hosted_file_obj(hosted_file_obj_new=hosted_file_obj):
hosted_file_id = hosted_file_obj_result