Bug fixes related to file uploads. Fixing id_random int vs str confusion. For account and for hosted_file.
This commit is contained in:
@@ -171,24 +171,37 @@ def lookup_id_random_pop(
|
|||||||
]
|
]
|
||||||
|
|
||||||
for prefix in id_prefixes:
|
for prefix in id_prefixes:
|
||||||
key = f'{prefix}_id_random'
|
key_random = f'{prefix}_id_random'
|
||||||
if key in obj_data:
|
key_id = f'{prefix}_id'
|
||||||
# Table name mapping
|
|
||||||
table = prefix
|
# Table name mapping
|
||||||
if prefix == 'address_location': table = 'address'
|
table = prefix
|
||||||
elif prefix in ['contact_1', 'contact_2']: table = 'contact'
|
if prefix == 'address_location': table = 'address'
|
||||||
elif prefix == 'event_id_random_only': table = 'event'
|
elif prefix in ['contact_1', 'contact_2']: table = 'contact'
|
||||||
elif prefix == 'poc_event_person': table = 'event_person'
|
elif prefix == 'event_id_random_only': table = 'event'
|
||||||
elif prefix == 'poc_person': table = 'person'
|
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)
|
# Scenario B: Vision naming (e.g., account_id: "abc")
|
||||||
obj_data[f'{prefix if not prefix.endswith("_id_random_only") else prefix[:-15]+"_id_only"}'] = resolved_id
|
# Only resolve if it's a string of the correct length (random ID format)
|
||||||
# Special case for event_id_random_only
|
elif key_id in obj_data and isinstance(obj_data[key_id], str) and 11 <= len(obj_data[key_id]) <= 22:
|
||||||
target_id_key = f'{prefix[:-7]}' if prefix.endswith('_random') else f'{prefix}_id'
|
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'
|
if prefix == 'event_id_random_only': target_id_key = 'event_id_only'
|
||||||
|
|
||||||
obj_data[target_id_key] = resolved_id
|
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 links
|
||||||
polymorphic = [
|
polymorphic = [
|
||||||
@@ -200,12 +213,19 @@ def lookup_id_random_pop(
|
|||||||
]
|
]
|
||||||
|
|
||||||
for type_key, rand_key, id_key in polymorphic:
|
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:
|
if type_key in obj_data and rand_key in obj_data:
|
||||||
obj_data[id_key] = redis_lookup_id_random(
|
obj_data[id_key] = redis_lookup_id_random(
|
||||||
record_id_random=obj_data.get(rand_key),
|
record_id_random=obj_data.get(rand_key),
|
||||||
table_name=obj_data.get(type_key)
|
table_name=obj_data.get(type_key)
|
||||||
)
|
)
|
||||||
obj_data.pop(rand_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
|
return obj_data
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ class Hosted_File_Base(BaseModel):
|
|||||||
log.debug(locals())
|
log.debug(locals())
|
||||||
|
|
||||||
# --- Standardized Vision IDs (Strings) ---
|
# --- Standardized Vision IDs (Strings) ---
|
||||||
id: Optional[str] = Field(None, **base_fields['hosted_file_id_random'])
|
id: Optional[Union[int, str]] = Field(None, **base_fields['hosted_file_id_random'])
|
||||||
hosted_file_id: Optional[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[str] = Field(None, **base_fields['account_id_random'])
|
account_id: Optional[Union[int, str]] = Field(None, **base_fields['account_id_random'])
|
||||||
|
|
||||||
hash_sha256: Optional[str]
|
hash_sha256: Optional[str]
|
||||||
title: Optional[str]
|
title: Optional[str]
|
||||||
@@ -69,17 +69,17 @@ class Hosted_File_Base(BaseModel):
|
|||||||
"""
|
"""
|
||||||
# 1. Map Random Strings to Clean Names
|
# 1. Map Random Strings to Clean Names
|
||||||
if rid := values.get('id_random') or values.get('hosted_file_id_random'):
|
if rid := values.get('id_random') or values.get('hosted_file_id_random'):
|
||||||
values['id'] = rid
|
# Only set if not already a valid integer
|
||||||
values['hosted_file_id'] = rid
|
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'):
|
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
|
return values
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
|
|||||||
@@ -512,8 +512,8 @@ async def upload_files(
|
|||||||
# Going to try and create a new host_file entry...
|
# 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.')
|
log.warning('For some reason a host_file object entry with the has was not found.')
|
||||||
# file_info['id_random'] = None
|
# file_info['id_random'] = None
|
||||||
file_info['account_id'] = account_id
|
file_info['account_id'] = account_id # This is the integer ID
|
||||||
file_info['account_id_random'] = account_id_random
|
file_info['account_id_random'] = account_id_random # This is the string ID
|
||||||
hosted_file_obj = Hosted_File_Base(**file_info)
|
hosted_file_obj = Hosted_File_Base(**file_info)
|
||||||
if hosted_file_obj_result := create_hosted_file_obj(hosted_file_obj_new=hosted_file_obj):
|
if hosted_file_obj_result := create_hosted_file_obj(hosted_file_obj_new=hosted_file_obj):
|
||||||
hosted_file_id = hosted_file_obj_result
|
hosted_file_id = hosted_file_obj_result
|
||||||
|
|||||||
Reference in New Issue
Block a user