|
14 | 14 | from pyneo4j_ogm.core.node import NodeModel |
15 | 15 | from pyneo4j_ogm.core.relationship import RelationshipModel |
16 | 16 | from pyneo4j_ogm.exceptions import ( |
| 17 | + AlreadyRegistered, |
17 | 18 | InvalidBookmark, |
18 | 19 | InvalidEntityType, |
19 | 20 | InvalidLabelOrType, |
|
22 | 23 | TransactionInProgress, |
23 | 24 | UnsupportedNeo4jVersion, |
24 | 25 | ) |
| 26 | +from pyneo4j_ogm.fields.settings import NodeModelSettings, RelationshipModelSettings |
25 | 27 | from pyneo4j_ogm.logger import logger |
26 | 28 | from pyneo4j_ogm.pydantic_utils import get_field_type, get_model_fields |
27 | 29 | from pyneo4j_ogm.queries.query_builder import QueryBuilder |
@@ -151,6 +153,23 @@ async def register_models(self, models: List[Type[Union[NodeModel, RelationshipM |
151 | 153 | logger.info("Registering models %s with client %s", models, self) |
152 | 154 |
|
153 | 155 | for model in models: |
| 156 | + for registered_model in self.models: |
| 157 | + registered_model_settings = registered_model.model_settings() |
| 158 | + model_settings = model.model_settings() |
| 159 | + |
| 160 | + if ( |
| 161 | + isinstance(registered_model_settings, RelationshipModelSettings) |
| 162 | + and isinstance(model_settings, RelationshipModelSettings) |
| 163 | + and registered_model_settings.type == model_settings.type |
| 164 | + ): |
| 165 | + raise AlreadyRegistered(cast(str, model_settings.type)) |
| 166 | + elif ( |
| 167 | + isinstance(registered_model_settings, NodeModelSettings) |
| 168 | + and isinstance(model_settings, NodeModelSettings) |
| 169 | + and set(registered_model_settings.labels) == set(model_settings.labels) |
| 170 | + ): |
| 171 | + raise AlreadyRegistered(cast(str, model_settings.labels)) |
| 172 | + |
154 | 173 | if issubclass(model, (NodeModel, RelationshipModel)): |
155 | 174 | logger.debug("Found valid mode %s, registering with client", model.__name__) |
156 | 175 |
|
|
0 commit comments