88orm
Advanced tools
| Metadata-Version: 2.1 | ||
| Name: 88orm | ||
| Version: 0.1.6 | ||
| Version: 0.1.8 | ||
| Summary: ORM Service Connector | ||
@@ -5,0 +5,0 @@ Home-page: http://pypi.python.org/pypi/88orm/ |
+68
-37
@@ -44,2 +44,3 @@ import json | ||
| self._app_label = model_info.get('app_label') | ||
| self._class_name = model_info.get('class_name') | ||
| self._fields = model_info.get('fields') # type: Dict | ||
@@ -58,6 +59,3 @@ self._related_names = model_info.get('related_names') # type: Dict | ||
| ) | ||
| model_name = self.__model | ||
| if model_name.islower(): | ||
| model_name = model_name.capitalize() | ||
| return f"<{model_name}: {key}>" | ||
| return f"<{self._class_name}: {key}>" | ||
@@ -91,5 +89,47 @@ def __setattr__(self, key, value): | ||
| def _set_related_attributes(self): | ||
| def set_many_to_one_or_many(self, key, value, related_field): | ||
| from .connector import ORM88 | ||
| related_model = value.get('related_model') | ||
| model = f"{related_model.get('app_label')}.{related_model.get('name')}" | ||
| if hasattr(self, key): | ||
| _value = getattr(self, key) | ||
| if isinstance(_value, self.__class__): | ||
| return None | ||
| elif isinstance(_value, list): | ||
| attr_value = create_reverse_many_to_one(model, {})() | ||
| attr_value._bind(data=_value) | ||
| elif isinstance(_value, dict): | ||
| attr_value = self.__class__(model, self._payload, value=_value) | ||
| else: | ||
| attr_value = ORM88(model) | ||
| else: | ||
| attr_value = ORM88(model) | ||
| type_field = self._fields.get( | ||
| key, | ||
| self._related_names.get(key, {}) | ||
| ).get('type') | ||
| payload = {} | ||
| if type_field in ['OneToOneField', 'OneToOneRel']: | ||
| payload.update({ | ||
| 'get': { | ||
| 'args': [], | ||
| 'kwargs': { | ||
| related_field: self.id | ||
| } | ||
| } | ||
| }) | ||
| else: | ||
| payload.update({ | ||
| 'filter': { | ||
| 'args': [], | ||
| 'kwargs': { | ||
| related_field: self.id | ||
| } | ||
| } | ||
| }) | ||
| attr_value._payload.update(payload) | ||
| setattr(self, key, attr_value) | ||
| def _set_related_attributes(self): | ||
| for key, value in self._fields.items(): | ||
@@ -101,28 +141,8 @@ type_field = value.get('type') | ||
| related_model = value.get('related_model') | ||
| model = f"{related_model.get('app_label')}.{related_model.get('name')}" | ||
| if hasattr(self, key): | ||
| _value = getattr(self, key) | ||
| if isinstance(_value, list): | ||
| attr_value = create_reverse_many_to_one(model, {})() | ||
| attr_value._bind(data=_value) | ||
| else: | ||
| attr_value = ORM88(model) | ||
| else: | ||
| attr_value = ORM88(model) | ||
| attr_value._payload.update({ | ||
| 'filter': { | ||
| 'args': [], | ||
| 'kwargs': { | ||
| related_model.get('related_query_name'): self.id | ||
| } | ||
| } | ||
| }) | ||
| setattr(self, key, attr_value) | ||
| self.set_many_to_one_or_many(key, value, | ||
| related_model.get('related_query_name')) | ||
| for key, value in self._related_names.items(): | ||
| if not hasattr(self, key): | ||
| related_model = value.get('related_model') | ||
| model = f"{related_model.get('app_label')}.{related_model.get('name')}" | ||
| attr_value = ORM88(model) | ||
| setattr(self, key, attr_value) | ||
| related_model = value.get('related_model') | ||
| self.set_many_to_one_or_many(key, value, related_model.get('related_field')) | ||
@@ -151,14 +171,19 @@ def _set_value(self, attrs: Dict): | ||
| def _reverse_related(self, related_name): | ||
| from .connector import ORM88 | ||
| try: | ||
| orm = getattr(self, related_name) # type: ORM88 | ||
| rel = self._related_names.get(related_name) | ||
| related_model = rel.get('related_model') | ||
| filter_kwargs = { | ||
| related_model.get('related_field'): self.id | ||
| } | ||
| if rel.get('type') == 'OneToOneRel': | ||
| return orm.get(**filter_kwargs) | ||
| return orm.filter(**filter_kwargs) | ||
| except AttributeError: | ||
| raise AttributeError(f'{self.__model} has no related {related_name}') | ||
| else: | ||
| if isinstance(orm, ORM88): | ||
| rel = self._related_names.get(related_name) | ||
| related_model = rel.get('related_model') | ||
| filter_kwargs = { | ||
| related_model.get('related_field'): self.id | ||
| } | ||
| if rel.get('type') == 'OneToOneRel': | ||
| orm = orm.get(**filter_kwargs) | ||
| setattr(self, related_name, orm) | ||
| return orm | ||
| return orm | ||
@@ -170,2 +195,8 @@ def rel(self, name): | ||
| def has_rel(self, name): | ||
| try: | ||
| return bool(self.rel(name)) | ||
| except Exception: | ||
| return False | ||
| def refresh_from_db(self): | ||
@@ -172,0 +203,0 @@ from .connector import ORM88 |
+1
-1
| Metadata-Version: 2.1 | ||
| Name: 88orm | ||
| Version: 0.1.6 | ||
| Version: 0.1.8 | ||
| Summary: ORM Service Connector | ||
@@ -5,0 +5,0 @@ Home-page: http://pypi.python.org/pypi/88orm/ |
+1
-1
@@ -8,3 +8,3 @@ import setuptools | ||
| name="88orm", | ||
| version="0.1.6", | ||
| version="0.1.8", | ||
| author="Rimba Prayoga", | ||
@@ -11,0 +11,0 @@ author_email="rimba47prayoga@gmail.com", |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
27750
3.78%713
4.24%