Skip to content

Commit ee87a5e

Browse files
committed
use enums for types
Update template.py
1 parent 5434fc3 commit ee87a5e

File tree

3 files changed

+90
-38
lines changed

3 files changed

+90
-38
lines changed

src/ansys/dynamicreporting/core/serverless/base.py

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from collections.abc import Iterable
33
from dataclasses import dataclass, field
44
from dataclasses import fields as dataclass_fields
5+
from enum import Enum
56
import importlib
67
import inspect
78
from itertools import chain
@@ -563,3 +564,10 @@ def __set__(self, obj, value):
563564
@abstractmethod
564565
def process(self, value, obj):
565566
pass # pragma: no cover
567+
568+
569+
class StrEnum(str, Enum):
570+
"""Enum with a str mixin."""
571+
572+
def __str__(self):
573+
return self.value

src/ansys/dynamicreporting/core/serverless/item.py

+22-10
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from ..utils import report_utils
1919
from ..utils.geofile_processing import file_is_3d_geometry, get_avz_directory, rebuild_3d_geometry
2020
from ..utils.report_utils import is_enhanced
21-
from .base import BaseModel, Validator
21+
from .base import BaseModel, StrEnum, Validator
2222

2323

2424
class Session(BaseModel):
@@ -257,6 +257,18 @@ def delete(self, **kwargs):
257257
return super().delete(**kwargs)
258258

259259

260+
class ItemType(StrEnum):
261+
STRING = "string"
262+
HTML = "html"
263+
TABLE = "table"
264+
TREE = "tree"
265+
IMAGE = "image"
266+
ANIMATION = "anim"
267+
SCENE = "scene"
268+
FILE = "file"
269+
NONE = "none"
270+
271+
260272
class Item(BaseModel):
261273
name: str = field(compare=False, kw_only=True, default="")
262274
date: datetime = field(compare=False, kw_only=True, default_factory=timezone.now)
@@ -265,7 +277,7 @@ class Item(BaseModel):
265277
session: Session = field(compare=False, kw_only=True, default=None)
266278
dataset: Dataset = field(compare=False, kw_only=True, default=None)
267279
content: ItemContent = ItemContent()
268-
type: str = "none"
280+
type: ItemType = ItemType.NONE # todo: make this read-only
269281
_orm_model: str = "data.models.Item"
270282
_type_registry = {} # Class-level registry of subclasses keyed by type
271283
_in_memory: bool = field(compare=False, kw_only=True, default=False)
@@ -362,17 +374,17 @@ def render(self, *, context=None, request=None) -> str | None:
362374

363375
class String(SimplePayloadMixin, Item):
364376
content: StringContent = StringContent()
365-
type: str = "string"
377+
type: ItemType = ItemType.STRING
366378

367379

368380
class HTML(String):
369381
content: HTMLContent = HTMLContent()
370-
type: str = "html"
382+
type: ItemType = ItemType.HTML
371383

372384

373385
class Table(Item):
374386
content: TableContent = TableContent()
375-
type: str = "table"
387+
type: ItemType = ItemType.TABLE
376388
_properties: tuple = table_attr
377389

378390
@classmethod
@@ -401,15 +413,15 @@ def save(self, **kwargs):
401413

402414
class Tree(SimplePayloadMixin, Item):
403415
content: TreeContent = TreeContent()
404-
type: str = "tree"
416+
type: ItemType = ItemType.TREE
405417

406418

407419
class Image(FilePayloadMixin, Item):
408420
_width: int = field(compare=False, init=False, default=0)
409421
_height: int = field(compare=False, init=False, default=0)
410422
_enhanced: bool = field(compare=False, init=False, default=False)
411423
content: ImageContent = ImageContent()
412-
type: str = "image"
424+
type: ItemType = ItemType.IMAGE
413425

414426
@property
415427
def width(self):
@@ -446,12 +458,12 @@ def save(self, **kwargs):
446458

447459
class Animation(FilePayloadMixin, Item):
448460
content: AnimContent = AnimContent()
449-
type: str = "anim"
461+
type: ItemType = ItemType.ANIMATION
450462

451463

452464
class Scene(FilePayloadMixin, Item):
453465
content: SceneContent = SceneContent()
454-
type: str = "scene"
466+
type: ItemType = ItemType.SCENE
455467

456468
def save(self, **kwargs):
457469
super().save(**kwargs)
@@ -461,7 +473,7 @@ def save(self, **kwargs):
461473

462474
class File(FilePayloadMixin, Item):
463475
content: FileContent = FileContent()
464-
type: str = "file"
476+
type: ItemType = ItemType.FILE
465477

466478
def save(self, **kwargs):
467479
super().save(**kwargs)

src/ansys/dynamicreporting/core/serverless/template.py

+60-28
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,39 @@
66
from django.utils import timezone
77

88
from ..exceptions import ADRException
9-
from .base import BaseModel
9+
from .base import BaseModel, StrEnum
10+
11+
12+
class ReportType(StrEnum):
13+
DEFAULT = ""
14+
# Layouts
15+
BASIC_LAYOUT = "Layout:basic"
16+
PANEL_LAYOUT = "Layout:panel"
17+
BOX_LAYOUT = "Layout:box"
18+
TABS_LAYOUT = "Layout:tabs"
19+
CAROUSEL_LAYOUT = "Layout:carousel"
20+
SLIDER_LAYOUT = "Layout:slider"
21+
FOOTER_LAYOUT = "Layout:footer"
22+
HEADER_LAYOUT = "Layout:header"
23+
ITERATOR_LAYOUT = "Layout:iterator"
24+
TAG_PROPS_LAYOUT = "Layout:tagprops"
25+
TOC_LAYOUT = "Layout:toc"
26+
REPORT_LINK_LAYOUT = "Layout:reportlink"
27+
PPTX_LAYOUT = "Layout:pptx"
28+
PPTX_SLIDE_LAYOUT = "Layout:pptxslide"
29+
DATA_FILTER_LAYOUT = "Layout:datafilter"
30+
USER_DEFINED_LAYOUT = "Layout:userdefined"
31+
# Generators
32+
TABLE_MERGE_GENERATOR = "Generator:tablemerge"
33+
TABLE_REDUCE_GENERATOR = "Generator:tablereduce"
34+
TABLE_ROW_COLUMN_FILTER_GENERATOR = "Generator:tablerowcolumnfilter"
35+
TABLE_VALUE_FILTER_GENERATOR = "Generator:tablevaluefilter"
36+
TABLE_SORT_FILTER_GENERATOR = "Generator:tablesortfilter"
37+
TREE_MERGE_GENERATOR = "Generator:treemerge"
38+
SQL_QUERIES_GENERATOR = "Generator:sqlqueries"
39+
ITEMS_COMPARISON_GENERATOR = "Generator:itemscomparison"
40+
STATISTICAL_GENERATOR = "Generator:statistical"
41+
ITERATOR_GENERATOR = "Generator:iterator"
1042

1143

1244
class Template(BaseModel):
@@ -16,7 +48,7 @@ class Template(BaseModel):
1648
item_filter: str = field(compare=False, kw_only=True, default="")
1749
parent: "Template" = field(compare=False, kw_only=True, default=None)
1850
children: list["Template"] = field(compare=False, kw_only=True, default_factory=list)
19-
report_type: str = ""
51+
report_type: ReportType = ReportType.DEFAULT # todo: make this read-only
2052
_children_order: str = field(
2153
compare=False, init=False, default=""
2254
) # computed from self.children
@@ -356,72 +388,72 @@ def set_skip(self, value=0):
356388

357389

358390
class BasicLayout(Layout):
359-
report_type: str = "Layout:basic"
391+
report_type: ReportType = ReportType.BASIC_LAYOUT
360392

361393

362394
class PanelLayout(Layout):
363-
report_type: str = "Layout:panel"
395+
report_type: ReportType = ReportType.PANEL_LAYOUT
364396

365397

366398
class BoxLayout(Layout):
367-
report_type: str = "Layout:box"
399+
report_type: ReportType = ReportType.BOX_LAYOUT
368400

369401

370402
class TabLayout(Layout):
371-
report_type: str = "Layout:tabs"
403+
report_type: ReportType = ReportType.TABS_LAYOUT
372404

373405

374406
class CarouselLayout(Layout):
375-
report_type: str = "Layout:carousel"
407+
report_type: ReportType = ReportType.CAROUSEL_LAYOUT
376408

377409

378410
class SliderLayout(Layout):
379-
report_type: str = "Layout:slider"
411+
report_type: ReportType = ReportType.SLIDER_LAYOUT
380412

381413

382414
class FooterLayout(Layout):
383-
report_type: str = "Layout:footer"
415+
report_type: ReportType = ReportType.FOOTER_LAYOUT
384416

385417

386418
class HeaderLayout(Layout):
387-
report_type: str = "Layout:header"
419+
report_type: ReportType = ReportType.HEADER_LAYOUT
388420

389421

390422
class IteratorLayout(Layout):
391-
report_type: str = "Layout:iterator"
423+
report_type: ReportType = ReportType.ITERATOR_LAYOUT
392424

393425

394426
class TagPropertyLayout(Layout):
395-
report_type: str = "Layout:tagprops"
427+
report_type: ReportType = ReportType.TAG_PROPS_LAYOUT
396428

397429

398430
class TOCLayout(Layout):
399-
report_type: str = "Layout:toc"
431+
report_type: ReportType = ReportType.TOC_LAYOUT
400432

401433

402434
class ReportLinkLayout(Layout):
403-
report_type: str = "Layout:reportlink"
435+
report_type: ReportType = ReportType.REPORT_LINK_LAYOUT
404436

405437

406438
class PPTXLayout(Layout):
407-
report_type: str = "Layout:pptx"
439+
report_type: ReportType = ReportType.PPTX_LAYOUT
408440
_properties = ("input_pptx", "output_pptx", "use_all_slides")
409441

410442

411443
class PPTXSlideLayout(Layout):
412-
report_type: str = "Layout:pptxslide"
444+
report_type: ReportType = ReportType.PPTX_SLIDE_LAYOUT
413445
_properties = (
414446
"source_slide",
415447
"exclude_from_toc",
416448
)
417449

418450

419451
class DataFilterLayout(Layout):
420-
report_type: str = "Layout:datafilter"
452+
report_type: ReportType = ReportType.DATA_FILTER_LAYOUT
421453

422454

423455
class UserDefinedLayout(Layout):
424-
report_type: str = "Layout:userdefined"
456+
report_type: ReportType = ReportType.USER_DEFINED_LAYOUT
425457

426458

427459
class Generator(Template):
@@ -449,40 +481,40 @@ def set_append_tags(self, value=True):
449481

450482

451483
class TableMergeGenerator(Generator):
452-
report_type: str = "Generator:tablemerge"
484+
report_type: ReportType = ReportType.TABLE_MERGE_GENERATOR
453485

454486

455487
class TableReduceGenerator(Generator):
456-
report_type: str = "Generator:tablereduce"
488+
report_type: ReportType = ReportType.TABLE_REDUCE_GENERATOR
457489

458490

459491
class TableMergeRCFilterGenerator(Generator):
460-
report_type: str = "Generator:tablerowcolumnfilter"
492+
report_type: ReportType = ReportType.TABLE_ROW_COLUMN_FILTER_GENERATOR
461493

462494

463495
class TableMergeValueFilterGenerator(Generator):
464-
report_type: str = "Generator:tablevaluefilter"
496+
report_type: ReportType = ReportType.TABLE_VALUE_FILTER_GENERATOR
465497

466498

467499
class TableSortFilterGenerator(Generator):
468-
report_type: str = "Generator:tablesortfilter"
500+
report_type: ReportType = ReportType.TABLE_SORT_FILTER_GENERATOR
469501

470502

471503
class TreeMergeGenerator(Generator):
472-
report_type: str = "Generator:treemerge"
504+
report_type: ReportType = ReportType.TREE_MERGE_GENERATOR
473505

474506

475507
class SQLQueryGenerator(Generator):
476-
report_type: str = "Generator:sqlqueries"
508+
report_type: ReportType = ReportType.SQL_QUERIES_GENERATOR
477509

478510

479511
class ItemsComparisonGenerator(Generator):
480-
report_type: str = "Generator:itemscomparison"
512+
report_type: ReportType = ReportType.ITEMS_COMPARISON_GENERATOR
481513

482514

483515
class StatisticalGenerator(Generator):
484-
report_type: str = "Generator:statistical"
516+
report_type: ReportType = ReportType.STATISTICAL_GENERATOR
485517

486518

487519
class IteratorGenerator(Generator):
488-
report_type: str = "Generator:iterator"
520+
report_type: ReportType = ReportType.ITERATOR_GENERATOR

0 commit comments

Comments
 (0)