Bases: BaseDjangoModelService['EntryVersion']
Source code in django_spire/contrib/constructor/constructor.py
| def __init__(self, obj: Any = None):
self._obj_type_name: str = str(
next(iter(self.__class__.__annotations__.values()))
).split('.')[-1]
if obj is None:
return
self._obj_mro_type_names = [cls.__name__ for cls in obj.__class__.__mro__]
if self._obj_type_name not in self._obj_mro_type_names:
message = f'{self.__class__.__name__} was instantiated with obj type "{obj.__class__.__name__}" and failed as it was expecting "{self._obj_type_name}".'
raise ConstructorError(message)
self._obj_type: type[TypeAny] = obj.__class__
if self._obj_type is None or self._obj_type is ...:
message = f'{self.__class__.__name__} top class attribute must have an annotated type.'
raise ConstructorError(message)
self.obj: TypeAny = obj
if ABC not in self.__class__.__bases__:
if not self._obj_is_valid:
message = f'{self._obj_type_name} failed to validate on {self.__class__.__name__}'
raise ConstructorError(message)
self.__post_init__()
|
publish
Source code in django_spire/knowledge/entry/version/services/processor_service.py
| def publish(self):
self.obj.status = EntryVersionStatusChoices.PUBLISHED
self.obj.published_datetime = localtime()
self.obj.save()
|
add_update_delete_blocks
Source code in django_spire/knowledge/entry/version/services/processor_service.py
| def add_update_delete_blocks(self, block_data_list: list[dict]):
from django_spire.knowledge.entry.version.block.models import EntryVersionBlock
entry_blocks_to_add = []
entry_blocks_to_update = []
handled_block_ids = []
old_entry_blocks = self.obj.blocks.active()
old_entry_block_ids = [entry_block.id for entry_block in old_entry_blocks]
for block_data in block_data_list:
if block_data['id'] in old_entry_block_ids:
entry_block: EntryVersionBlock = old_entry_blocks.get(id=block_data['id'])
entry_block.type = block_data['type']
entry_block.order = block_data['order']
entry_block.update_editor_js_block_data_from_dict(block_data['data'])
entry_blocks_to_update.append(entry_block)
handled_block_ids.append(block_data['id'])
else:
entry_block = EntryVersionBlock.services.factory.create_validated_block(
entry_version=self.obj,
**block_data,
)
entry_blocks_to_add.append(entry_block)
handled_block_ids.append(block_data['id'])
entry_blocks_to_delete = [
entry_block.id
for entry_block in old_entry_blocks
if entry_block.id not in handled_block_ids
]
with transaction.atomic():
EntryVersionBlock.objects.filter(id__in=entry_blocks_to_delete).delete()
EntryVersionBlock.objects.bulk_update(entry_blocks_to_update, ['order', 'type', '_block_data', '_text_data'])
EntryVersionBlock.objects.bulk_create(entry_blocks_to_add)
|