31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
from django.db import transaction
|
|
from core.models import Source, Entity
|
|
|
|
class IngestionService:
|
|
@staticmethod
|
|
def ingest_data(source_name, entity_type, raw_data):
|
|
"""
|
|
Aggregates and normalizes raw data into the system.
|
|
"""
|
|
with transaction.atomic():
|
|
source, _ = Source.objects.get_or_create(name=source_name)
|
|
|
|
# Simple normalization logic: assume raw_data is a dict
|
|
# In a real scenario, this would be more complex depending on source schema
|
|
identifier = raw_data.get('identifier')
|
|
if not identifier:
|
|
raise ValueError("Missing identifier in raw_data")
|
|
|
|
entity, created = Entity.objects.get_or_create(
|
|
identifier=identifier,
|
|
entity_type=entity_type,
|
|
defaults={'source': source, 'metadata': raw_data.get('metadata', {})}
|
|
)
|
|
|
|
if not created:
|
|
# Update existing entity metadata
|
|
entity.metadata.update(raw_data.get('metadata', {}))
|
|
entity.save()
|
|
|
|
return entity
|