|
1 | 1 | import inspect |
2 | | -import logging |
3 | 2 | from collections import defaultdict |
4 | 3 | from typing import Any, Dict, Optional, Sequence, Tuple, Type, Union |
5 | 4 |
|
6 | 5 | from django.apps import apps |
7 | | -from django.db import connection |
8 | 6 | from django.db import models as django_models |
9 | 7 | from django.db.models.options import Options |
10 | 8 | from django.utils.translation import gettext_lazy as _ |
11 | 9 |
|
12 | 10 | from ..remote import RemoteObject, get_local_resource_prefix, get_resource_prefix |
13 | 11 |
|
14 | | -logger = logging.getLogger(__name__) |
15 | | - |
16 | 12 |
|
17 | 13 | class DABContentTypeManager(django_models.Manager["DABContentType"]): |
18 | 14 | """Manager storing DABContentType objects in a local cache like original ContentType. |
@@ -76,12 +72,9 @@ def get_for_model( |
76 | 72 | try: |
77 | 73 | ct = self.get(service=service, app_label=opts.app_label, model=opts.model_name) |
78 | 74 | except self.model.DoesNotExist: |
79 | | - logger.warning(f'Could not find content type for {(service, opts.app_label, opts.model_name)}, so creating new') |
80 | | - ct, _ = self.get_or_create( |
81 | | - service=service, |
82 | | - app_label=opts.app_label, |
83 | | - model=opts.model_name, |
84 | | - defaults=dict(api_slug=f'{service}.{opts.model_name}', pk_field_type=model._meta.pk.db_type(connection)), |
| 75 | + raise RuntimeError( |
| 76 | + f'Could not find content type for {(service, opts.app_label, opts.model_name)}, ' |
| 77 | + 'and creating new objects via get_for_model is not allowed for DAB RBAC' |
85 | 78 | ) |
86 | 79 | self._add_to_cache(self.db, ct) |
87 | 80 | return ct |
@@ -135,19 +128,11 @@ def get_for_models( |
135 | 128 | for model in opts_models: |
136 | 129 | results[model] = ct |
137 | 130 | self._add_to_cache(self.db, ct) |
138 | | - # Named it service_create to not shadown variable from prior loop |
139 | | - for (service_create, app_label, model_name), opts_models in needed_opts.items(): |
140 | | - if opts_models: |
141 | | - pk_field_type = opts_models[0]._meta.pk.db_type(connection) |
142 | | - else: |
143 | | - pk_field_type = 'integer' |
144 | | - logger.warning(f'Could not find content type for {(service_create, app_label, model_name)}, so creating new, out of:\n{needed_models.keys()}') |
145 | | - ct = self.create( |
146 | | - service=service_create, app_label=app_label, model=model_name, api_slug=f'{service_create}.{model_name}', pk_field_type=pk_field_type |
| 131 | + if needed_opts: |
| 132 | + raise RuntimeError( |
| 133 | + f'Could not find content type for any of {needed_opts.keys()}, ' |
| 134 | + f'and creating new objects via get_for_models is not enabled for DAB RBAC, looked in:\n{needed_models.keys()}' |
147 | 135 | ) |
148 | | - self._add_to_cache(self.db, ct) |
149 | | - for model in opts_models: |
150 | | - results[model] = ct |
151 | 136 | return results |
152 | 137 |
|
153 | 138 | def get_by_natural_key(self, *args: str) -> "DABContentType": |
|
0 commit comments