|
4 | 4 |
|
5 | 5 | from tppt.exception import ( |
6 | 6 | MasterLayoutNotFoundError, |
| 7 | + MultipleMasterLayoutsError, |
7 | 8 | SlideMasterAttributeMustBeSlideLayoutError, |
8 | 9 | SlideMasterAttributeNotFoundError, |
9 | 10 | ) |
@@ -107,15 +108,25 @@ class DefaultSlideMaster(SlideMaster): |
107 | 108 |
|
108 | 109 | def get_master_layout(slide_master: type[SlideMaster]) -> type[SlideLayout]: |
109 | 110 | """Get the slide tagged with MasterLayout.""" |
| 111 | + master_layouts = [] |
| 112 | + master_layout_names = [] |
| 113 | + |
110 | 114 | for attr_name, annotation in slide_master.__annotations__.items(): |
111 | 115 | origin = get_origin(annotation) |
112 | 116 | if origin is Annotated: |
113 | 117 | args = get_args(annotation) |
114 | 118 | # Check the class name instead of directly checking the type of args[1] |
115 | 119 | if len(args) > 1 and args[1].__class__.__name__ == "MasterLayout": |
116 | | - return getattr(slide_master, attr_name) |
| 120 | + master_layouts.append(getattr(slide_master, attr_name)) |
| 121 | + master_layout_names.append(attr_name) |
| 122 | + |
| 123 | + if not master_layouts: |
| 124 | + raise MasterLayoutNotFoundError(slide_master.__name__) |
| 125 | + |
| 126 | + if len(master_layouts) > 1: |
| 127 | + raise MultipleMasterLayoutsError(slide_master.__name__, master_layout_names) |
117 | 128 |
|
118 | | - raise MasterLayoutNotFoundError(slide_master.__name__) |
| 129 | + return master_layouts[0] |
119 | 130 |
|
120 | 131 |
|
121 | 132 | def get_layouts(slide_master: type[SlideMaster]) -> list[type[SlideLayout]]: |
|
0 commit comments