88orm
Advanced tools
| Metadata-Version: 2.1 | ||
| Name: 88orm | ||
| Version: 0.1.9 | ||
| Version: 0.1.9.1 | ||
| Summary: ORM Service Connector | ||
@@ -5,0 +5,0 @@ Home-page: http://pypi.python.org/pypi/88orm/ |
+39
-4
@@ -12,3 +12,5 @@ # -*- coding: utf-8 -*- | ||
| import base64 | ||
| import json | ||
| from datetime import date, datetime | ||
| from typing import List | ||
@@ -19,2 +21,3 @@ from urllib.parse import urljoin | ||
| from django.conf import settings | ||
| from django.core.files.base import ContentFile | ||
| from django.db import models | ||
@@ -135,2 +138,5 @@ from django.db.models import Q, ObjectDoesNotExist | ||
| def __call__(self, *args, **kwargs): | ||
| return VirtualModel(self._model_name, self.__payload_request) | ||
| @cached_property | ||
@@ -249,6 +255,11 @@ def __exclude_params(self): | ||
| related = self._get_related_field(key) | ||
| foreign_field = related.get('foreign_related_fields') | ||
| if foreign_field == 'timestampedmortalbasemodel_ptr': | ||
| foreign_field = 'pk' | ||
| elif hasattr(value, f'{foreign_field}_id'): | ||
| foreign_field = f'{foreign_field}_id' | ||
| if related.get('type') in ['ForeignKey', 'OneToOneField']: | ||
| foreign_field = related.get('foreign_related_fields') | ||
| kwargs.pop(key) | ||
| kwargs.update({ | ||
| key: getattr(value, foreign_field) | ||
| f'{key}_id': getattr(value, foreign_field) | ||
| }) | ||
@@ -346,2 +357,22 @@ elif isinstance(value, ORM88): | ||
| def _serialize_data(self, data: dict): | ||
| ret = data.copy() | ||
| for key, value in data.items(): | ||
| if isinstance(value, (date, datetime)): | ||
| ret.update({ | ||
| key: str(value) | ||
| }) | ||
| elif isinstance(value, VirtualModel): | ||
| ret.pop(key) | ||
| ret.update({ | ||
| f'{key}_id': value.pk | ||
| }) | ||
| elif isinstance(value, ContentFile): | ||
| b64_value = base64.b64encode(value.file.getvalue()) | ||
| value = f"data:image/jpeg;base64,{b64_value.decode()}" | ||
| ret.update({ | ||
| key: value | ||
| }) | ||
| return ret | ||
| # --- fetch data from orm services | ||
@@ -484,3 +515,3 @@ def __request_get(self, url, payload, params=None): | ||
| 'args': [], | ||
| 'kwargs': kwargs | ||
| 'kwargs': self._serialize_data(kwargs) | ||
| }) | ||
@@ -519,3 +550,4 @@ return self.fetch() | ||
| payload_requests = list( | ||
| map(lambda orm: orm._ORM88__payload_request, payloads)) | ||
| map(lambda orm: orm._ORM88__payload_request, payloads) | ||
| ) | ||
| url = urljoin(ORM_SERVICE_URL, "/api/v1/orm_services/execute_many") | ||
@@ -539,2 +571,5 @@ response = requests.get(url, data=json.dumps(payload_requests), headers={ | ||
| url = urljoin(ORM_SERVICE_URL, "/api/v1/orm_services/save") | ||
| payload.get('payload')['save'] = self._serialize_data( | ||
| payload.get('payload').get('save') | ||
| ) | ||
| return self.__request_post( | ||
@@ -541,0 +576,0 @@ url=url, |
+45
-19
@@ -7,2 +7,3 @@ import json | ||
| from django.conf import settings | ||
| from django.utils.functional import cached_property | ||
@@ -52,9 +53,12 @@ from .related_descriptors import create_reverse_many_to_one | ||
| def __repr__(self): | ||
| key = self._attrs.get( | ||
| '__str__', | ||
| (self._attrs.get('id') or | ||
| self._attrs.get( | ||
| next(iter(self._attrs)) | ||
| )) | ||
| ) | ||
| if self._attrs: | ||
| key = self._attrs.get( | ||
| '__str__', | ||
| (self._attrs.get('id') or | ||
| self._attrs.get( | ||
| next(iter(self._attrs)) | ||
| )) | ||
| ) | ||
| else: | ||
| key = None | ||
| return f"<{self._class_name}: {key}>" | ||
@@ -79,14 +83,18 @@ | ||
| @cached_property | ||
| def _save_fields(self): | ||
| fields = self._fields.copy() | ||
| for key, value in fields.copy().items(): | ||
| if value.get('type') == 'ManyToManyField': | ||
| fields.pop(key) | ||
| return fields | ||
| def _set_attr_single_instance(self, key, value): | ||
| from .connector import ORM88 | ||
| if hasattr(self, key): | ||
| return None | ||
| attr_value = None | ||
| if self._attrs.get(f"{key}_id"): | ||
| if not hasattr(self, key) and f"{key}_id" in self._attrs: | ||
| 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) | ||
| setattr(self, key, attr_value) | ||
@@ -223,4 +231,6 @@ def set_many_to_one_or_many(self, key, value, related_field): | ||
| if isinstance(attrs, dict): | ||
| for key, value in attrs: | ||
| for key, value in attrs.items(): | ||
| setattr(self, key, value) | ||
| return self | ||
| raise ValueError(attrs) | ||
@@ -236,10 +246,26 @@ def save(self): | ||
| model_fields = {} | ||
| for field in self._fields: | ||
| model_fields.update({ | ||
| field: self._attrs.get(field) | ||
| }) | ||
| for field in self._save_fields: | ||
| value = self._attrs.get(field) | ||
| if isinstance(value, ORM88): | ||
| field = f'{field}_id' | ||
| value = getattr(self, field) | ||
| if value is not None: | ||
| model_fields.update({ | ||
| field: value | ||
| }) | ||
| payload.get("payload").update({ | ||
| "save": model_fields | ||
| }) | ||
| return instance._save(payload) | ||
| ret = instance._save(payload) | ||
| self._set_value(ret) | ||
| self._payload.get('payload').pop('save') | ||
| self._payload.get('payload').update({ | ||
| 'get': { | ||
| 'args': [], | ||
| 'kwargs': { | ||
| 'id': self.id | ||
| } | ||
| } | ||
| }) | ||
| return self | ||
@@ -246,0 +272,0 @@ |
+1
-1
| Metadata-Version: 2.1 | ||
| Name: 88orm | ||
| Version: 0.1.9 | ||
| Version: 0.1.9.1 | ||
| 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.9", | ||
| version="0.1.9.1", | ||
| author="Rimba Prayoga", | ||
@@ -11,0 +11,0 @@ author_email="rimba47prayoga@gmail.com", |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
32252
7.43%824
7.71%