Prechádzať zdrojové kódy

- resolve imports problem

fanch 1 rok pred
rodič
commit
52bfeacf56

+ 1 - 1
setup.py

@@ -29,7 +29,7 @@ def get_files(path):
 
 setup(
     name="djangotools",
-    version="0.1.2",
+    version="0.1.3",
     description="A short description of the project.",
     author="François GAUTRAIS",
     install_requires=install_requires,

+ 52 - 50
src/djangotools/views/auto_path.py → src/djangotools/common/auto_path.py

@@ -6,10 +6,61 @@ from django.urls import path
 
 from djangotools.common import response
 from djangotools.common.path import PointPath, ConstPath, AttributePath, UrlPath, ModelPath
-from djangotools.views.route import RegisteredRoute, Post, Delete, Route, Get, Put
+from djangotools.common.route import RegisteredRoute, Post, Delete, Route, Get, Put
 from djangotools.common import models
 
 
+
+class AutoPathManager:
+    _ref = None
+
+    def __init__(self, app=None):
+        self._models = {}
+        for name, model in models.iter_models_items():
+            if isinstance(model, type) and issubclass(model, AutoPath):
+                self._models[model.__name__] = model
+        self.routes = defaultdict(dict)
+
+
+    def _init(self):
+        for name, model in self._models.items():
+            model.init(self)
+        return self
+
+    def add(self, registerd_route, override=True):
+        for method in registerd_route.route.method:
+            path = registerd_route.route.path.get_path()
+            if method in self.routes[path]:
+                if not override:
+                    raise ValueError(f"La route {path} est déja défini avec {method}")
+            self.routes[path][method] = registerd_route
+
+    @classmethod
+    def get_instance(cls):
+        if cls._ref is None:
+            cls._ref = AutoPathManager()
+            cls._ref._init()
+        return cls._ref
+
+    def get_pathes(self):
+        pathes = []
+        for route, methods in self.routes.items():
+            def wrapper(req : HttpRequest, *args, methods=methods, **kwargs):
+                method = req.method
+                if method not in methods:
+                    return response.serv_json_not_found(f"Method {method} on {req.path}")
+                ret = methods[method](req, *args, **kwargs)
+                if isinstance(ret, HttpResponse):
+                    return ret
+                return response.serv_json_ok(ret)
+
+            pathes.append(path(route, wrapper))
+        return pathes
+
+
+
+
+
 class AutoPath:
 
     _path_ = None
@@ -75,52 +126,3 @@ class AutoPath:
         cls._inited = True
 
 
-
-
-
-
-class AutoPathManager:
-    _ref = None
-
-    def __init__(self, app=None):
-        self._models = {}
-        for name, model in models.iter_models_items():
-            if isinstance(model, type) and issubclass(model, AutoPath):
-                self._models[model.__name__] = model
-        self.routes = defaultdict(dict)
-
-
-    def _init(self):
-        for name, model in self._models.items():
-            model.init(self)
-        return self
-
-    def add(self, registerd_route, override=True):
-        for method in registerd_route.route.method:
-            path = registerd_route.route.path.get_path()
-            if method in self.routes[path]:
-                if not override:
-                    raise ValueError(f"La route {path} est déja défini avec {method}")
-            self.routes[path][method] = registerd_route
-
-    @classmethod
-    def get_instance(cls):
-        if cls._ref is None:
-            cls._ref = AutoPathManager()
-            cls._ref._init()
-        return cls._ref
-
-    def get_pathes(self):
-        pathes = []
-        for route, methods in self.routes.items():
-            def wrapper(req : HttpRequest, *args, methods=methods, **kwargs):
-                method = req.method
-                if method not in methods:
-                    return response.serv_json_not_found(f"Method {method} on {req.path}")
-                ret = methods[method](req, *args, **kwargs)
-                if isinstance(ret, HttpResponse):
-                    return ret
-                return response.serv_json_ok(ret)
-
-            pathes.append(path(route, wrapper))
-        return pathes

+ 3 - 0
src/djangotools/common/path.py

@@ -1,3 +1,4 @@
+import json
 from pathlib import Path
 
 from djangotools.common import models
@@ -125,3 +126,5 @@ class PointPath(UrlPath):
     @property
     def part(self):
         return None
+
+

+ 4 - 4
src/djangotools/views/route.py → src/djangotools/common/route.py

@@ -4,10 +4,10 @@ from django.contrib.auth.models import User
 from django.db.models import Manager, Model, QuerySet
 from django.db.models.base import ModelBase
 
-from djangotools.common import response
+from djangotools.common import response, BaseSerializationModel
 from djangotools.common.errors import CustomException
 from djangotools.common.path import PointPath, ModelPath, AttributePath, ConstPath
-from djangotools.models.serializedmodel import SerializableModel
+
 from djangotools.views.utils import debug_login
 
 
@@ -116,10 +116,10 @@ class RegisteredRoute:
 
         if isinstance(ret, QuerySet):
             return [x.serialize() for x in ret]
-        if isinstance(ret, SerializableModel):
+        if isinstance(ret, BaseSerializationModel):
             return ret.serialize()
         if isinstance(ret, list):
-            ret = [x.serialize() if isinstance(x, SerializableModel) else x for x in ret]
+            ret = [x.serialize() if isinstance(x, BaseSerializationModel) else x for x in ret]
         return ret
 
 

+ 3 - 1
src/djangotools/common/types.py

@@ -2,7 +2,9 @@ import datetime
 
 import unidecode as unidecode
 
-
+def date_to_string(date):
+    if not date: return None
+    return f"{date.day:02d}/{date.month:02d}/{date.year:04d}"
 def parse_date(date):
     if isinstance(date, datetime.date):
         return date

+ 2 - 2
src/djangotools/migrations/0001_initial.py

@@ -4,7 +4,7 @@ from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
 import djangotools.models.serializedmodel
-import djangotools.views.auto_path
+import djangotools.common.auto_path
 
 
 class Migration(migrations.Migration):
@@ -28,6 +28,6 @@ class Migration(migrations.Migration):
             options={
                 'unique_together': {('user', 'profile', 'key')},
             },
-            bases=(models.Model, djangotools.models.serializedmodel.SerializableModel, djangotools.views.auto_path.AutoPath),
+            bases=(models.Model, djangotools.models.serializedmodel.SerializableModel, djangotools.common.auto_path.AutoPath),
         ),
     ]

+ 1 - 1
src/djangotools/models/preference.py

@@ -6,7 +6,7 @@ from djangotools.common.path import DeferredModelPath
 from djangotools.models.serializedmodel import SerializableModel
 from djangotools.models import UserIdManager
 
-from djangotools.views.auto_path import AutoPath
+from djangotools.common.auto_path import AutoPath
 
 
 class UserPreferenceManager:

+ 2 - 3
src/djangotools/urls.py

@@ -1,7 +1,6 @@
 from django.urls import path
 
-from djangotools.views.auto_path import AutoPathManager
-from djangotools.views.router import Router
+from djangotools.views import AutoPathManager, Router
 from django.contrib import admin
 
 class RouterIterator(list):
@@ -11,7 +10,7 @@ class RouterIterator(list):
 
     def __iter__(self):
         if not len(self):
-            self.append([path('admin/', admin.site.urls)] + AutoPathManager.get_instance().get_pathes() + Router.get_pathes())
+            self.extend([path('admin/', admin.site.urls)] + AutoPathManager.get_instance().get_pathes() + Router.get_pathes())
         return super().__iter__()
 
 

+ 4 - 3
src/djangotools/views/__init__.py

@@ -1,9 +1,10 @@
 from djangotools.common.path import DeferredModelPath
 
 from djangotools.views.misc import render_page
-from djangotools.views.route import request_wrapper, Route, RegisteredRoute
+from djangotools.common.route import request_wrapper, Route, RegisteredRoute
 from djangotools.views.router import Router
 from djangotools.common import response
 from djangotools.common import errors
-from djangotools.views.auto_path import AutoPath, PointPath, ModelPath,  Get, Put, ConstPath, AttributePath
-from djangotools.views.context.base import ContextData, ActionParams
+from djangotools.common.auto_path import AutoPath, PointPath, ModelPath,  Get, Put, ConstPath, AttributePath, AutoPathManager
+from djangotools.views.context.base import ContextData, ActionParams
+

+ 1 - 1
src/djangotools/views/context/base.py

@@ -20,7 +20,7 @@ allow_all=False
 
 
 def get_settings(request):
-    if settings.PRODUCTION:
+    if getattr(settings, "PRODUCTION", True):
         return {
             "url": ""
         }

+ 5 - 4
src/djangotools/views/misc.py

@@ -52,8 +52,9 @@ def _render(request, name, page=settings.ROOT_TEMPLATE, *args, **kwargs):
     if context_class:
         context = context_class()
         try:
-            data = context.get_context(request, *args, **kwargs, include_data=False)
-            data["context"] = json.dumps(data["context"])
+            data = context.get_context(request, *args, **kwargs)
+            if kwargs.get("context_to_string", True):
+                data["context"] = json.dumps(data["context"])
             print("context", context.need_auth, data)
         except UnauthorizedException as err:
             return _render(request, settings.LOGIN_CONTEXT, settings.LOGIN_TEMPLATE, data={"error" : str(err)})
@@ -63,8 +64,8 @@ def _render(request, name, page=settings.ROOT_TEMPLATE, *args, **kwargs):
     ret = render(request, page, data)
     return ret
 
-def render_page(name, page=settings.ROOT_TEMPLATE):
-    return lambda request, *args, name=name, page=page, **kwargs: _render(request, name, page=page, *args, **kwargs)
+def render_page(name, page=settings.ROOT_TEMPLATE, **opt):
+    return lambda request, *args, name=name, page=page, opt=opt, **kwargs: _render(request, name, page=page, *args, **opt, **kwargs)
 
 @Router.get(settings.LOGOUT_URL, need_auth=True)
 def disconnect(request, user):

+ 1 - 1
src/djangotools/views/router.py

@@ -6,7 +6,7 @@ from django.http import HttpRequest, HttpResponse
 from django.urls import URLPattern
 
 from djangotools.common import response, BaseSerializationModel
-from djangotools.views.route import RegisteredRoute, Route
+from djangotools.common.route import RegisteredRoute, Route
 from djangotools import  DjangoTools
 from djangotools.common.models import iter_models
 from django.urls import path