import collections from django import template from django.template import Node from django.conf import settings from django.utils.translation import to_locale, get_language from django.utils.safestring import SafeText from YBWEB.ctxJSON import DICTJSON, templateCTX from YBUTILS import mylogging as log from YBUTILS.viewREST import viewsets register = template.Library() milog = log.getLogger("templatetag.YBtools") # -------------------------------------GETLOCALE--------------------------------- @register.simple_tag(takes_context=False) def locale(): return to_locale(get_language()) # ------------------------------------- UTILIDADES ------------------------------ def _c2Ctx(context, scadena): """ Obtiene objeto de contexto a partir de cadena XXX.DDD.DDDDD """ # Realmente se ha pasado ya objeto de contexto if isinstance(scadena, dict): return scadena value = context
from django import template from django.template import Node from YBWEB.ctxJSON import DICTJSON, templateCTX from YBUTILS import mylogging as log from django.conf import settings from YBUTILS.viewREST import viewsets from django.utils.safestring import SafeText import collections register = template.Library() milog = log.getLogger("templatetag.YBtools") # -------------------------------------GETLOCALE--------------------------------- from django.utils.translation import to_locale, get_language @register.simple_tag(takes_context=False) def locale(): return to_locale(get_language()) # ------------------------------------- UTILIDADES ------------------------------ def _c2Ctx(context, scadena): """ Obtiene objeto de contexto a partir de cadena XXX.DDD.DDDDD """ # Realmente se ha pasado ya objeto de contexto if isinstance(scadena, dict): return scadena value = context if scadena == "":
""" Template tags para el tratamiento de JSX y JS dentro de los templates Se hace inyeccion de modulos comunes """ from django import template from YBUTILS import mylogging as log from YBUTILS import tools register = template.Library() milog = log.getLogger("templatetag.includeDB") # ------------------PRIVADAS------------------------------------------ def _dameLista(aplic, modelname, cod, desc, order=None, filter=None): # Obtenemos modelo mimodel = tools.damemodelo(aplic, modelname) # Obtenemosquery if filter: miquery = mimodel.objects.all().extra(where=filter) else: miquery = mimodel.objects.all() if order: miquery = miquery.order_by(order) return miquery # ------------------TEMPLATE TAGS------------------------------------- @register.simple_tag def listaJSON(aplic, modelname, cod, desc, order=None, filter=None):
""" Funciones base para utilizar objetos JSON y Ordered dict Estos seran los objetos por defecto para el tratamiento de layouts... """ import collections import json import django.utils.functional from django.conf import settings from YBUTILS import mylogging as log from rest_framework.utils import encoders milog=log.getLogger("") def fromJSON(sJSON): return json.loads(sJSON, object_pairs_hook=collections.OrderedDict) #COnvierte a JSON y resuelve callables para que no se vuelvan a ejecutar(sobretodo para traduccion , URLs...) def toJSON(obj,optimizar=True): try: if optimizar: return json.dumps(obj,cls=miEncoder,indent=(4 if settings.DEBUG else 0)) else: return json.dumps(obj) except Exception as e: log.error("Error al pasar a JSON") raise
""" Template tags para el tratamiento de JSX y JS dentro de los templates Se hace inyeccion de modulos comunes """ from django import template from react import jsx from YBUTILS import mylogging as log from YBUTILS import tools register = template.Library() milog=log.getLogger("templatetag.includeDB") #------------------PRIVADAS------------------------------------------ def _dameLista(aplic,modelname,cod,desc,order=None,filter=None): #Obtenemos modelo mimodel=tools.damemodelo(aplic,modelname) #Obtenemosquery if filter: miquery=mimodel.objects.all().extra(where=filter) else: miquery=mimodel.objects.all() if order: miquery=miquery.order_by(order) return miquery #------------------TEMPLATE TAGS------------------------------------- @register.simple_tag def listaJSON(aplic,modelname,cod,desc,order=None,filter=None):
# -*- coding: utf-8 -*- """ Funciones base para utilizar objetos JSON y Ordered dict Estos seran los objetos por defecto para el tratamiento de layouts... """ import collections import json import django.utils.functional from django.conf import settings from rest_framework.utils import encoders from YBUTILS import mylogging as log milog = log.getLogger("") def fromJSON(sJSON): return json.loads(sJSON, object_pairs_hook=collections.OrderedDict) # Convierte a JSON y resuelve callables para que no se vuelvan a ejecutar(sobretodo para traduccion , URLs...) def toJSON(obj, optimizar=True): try: if optimizar: return json.dumps(obj, cls=miEncoder, indent=(4 if settings.DEBUG else 0)) else: return json.dumps(obj)
"""Libreria de funciones para el tratamiento especial en la carga de templates y el uso del contexto """ from django import shortcuts from . import DICTJSON from YBUTILS import mylogging as log from django.template import loader, RequestContext from django.conf import settings milog=log.getLogger("YBWEB.templateCTX") #--------------------CONSTANTES------------------------------------ #YB_DIR_DEFECTO_TEMPLATES='YBWEB' #YB_DIR_COMPONENTS='componentes' directorio_base=settings.YB_DIR_DEFECTO_TEMPLATES +"/"+"basechain" directorio_componentes=settings.YB_DIR_COMPONENTS directorio_base_componentes=settings.YB_DIR_DEFECTO_TEMPLATES +"/"+directorio_componentes posfijoctx="_context" #--------------------GENERALES------------------------------------ def dametipo(nombretemplate): try: return nombretemplate.split('_')[0] except: return 'otro' def controlTerminahtml(nombre): if nombre.endswith(".html"):
""" from rest_framework.views import exception_handler from rest_framework.exceptions import APIException,ValidationError from rest_framework import status from django.utils.translation import ugettext_lazy as _ from django.conf import settings from . import viewsets from rest_framework.compat import set_rollback from rest_framework.response import Response from YBUTILS import mylogging as log from django.utils import six from django.utils.encoding import force_text milog=log.getLogger("VIEWREST.error") def YB_exception_handler(exc, context): """ Funcion de tratamiento de error en peticiones por defecto El contecto incluye los siguientes: 'view': self, 'args': getattr(self, 'args', ()), 'kwargs': getattr(self, 'kwargs', {}), 'request': getattr(self, 'request', None) """ try: milog.info("Excepcion capturada de alto nivel: %s",exc.__str__()) if settings.DEBUG: milog.exception(exc)
from .FLAux import FLtransaccional,FLAux from copy import deepcopy from django.forms.models import model_to_dict from YBUTILS import mylogging as log from .FLSqlQuery import FLSqlQuery milog=log.getLogger("LEGACY.FLSqlCursor") class FLSqlCursor(FLtransaccional): """ Clase Legacy que implementa cursor Similar al usable dentro de QT """ Browse = 1 Edit = 2 Del = 3 Insert = 4 #Metodos para la gestion de modelos (Incluye el registro de funciones de evento @classmethod def _obtenermodelo(cls,stabla): return FLAux._obtenermodelo(stabla) @classmethod def registrarmodelo(cls,stabla,model,bufferChanged=None,beforeCommit=None,afterCommit=None): FLAux.registrarmodelo(stabla,model,bufferChanged,beforeCommit,afterCommit) #Inicializacion def __init__(self,stabla=None): self._modo = 1 #Browse
from .clasesBase import BaseModulos,BaseObjetos,miDatetime from .UtilMIMIX import MCinheritanceUnderscore from .FLSqlQuery import FLSqlQuery from .FLSqlcursor import FLSqlCursor from .ManagerDB import FLManager from .AQSql import AQSql from .FLUtil import FLUtil from . import Factorias from YBUTILS import ObjDictJSON from YBUTILS import mylogging import datetime MC=MCinheritanceUnderscore milog=mylogging.getLogger("LEGACY") #LISTAS AQSql=AQSql AQSqlQuery=FLSqlQuery Array=ObjDictJSON.milista FormDBWidget=BaseModulos FLSqlCursor=FLSqlCursor FLSqlQuery=FLSqlQuery FLManager=FLManager FLUtil=FLUtil Date=miDatetime.today Object=ObjDictJSON.ObjDictJSON QDialog=object QVBoxLayout=object QLabel=object FactoriaModulos=Factorias.FactoriaModulos objetoBase=BaseObjetos
""" Utilidades para el enrutamiento de acceso a multiples BBDD """ from django.db import connection,connections from django.conf import settings from . import globalValues from YBUTILS import mylogging as log milog=log.getLogger("YBUTILS.DbRouter") #----------------------------- VARIABLES GLOBALES _CABECERA_YB_DB='HTTP_X_YB_DB' #-----------------------------MIDDLEWARE class headerDbRouter(object): """ Permite establecer la BBDD a utilizar mediante la cabecera X-YB-DB Si no existe sigue nornmal """ def process_request(self, request): globalValues.setValue(_CABECERA_YB_DB,'default') try: condef=request.META[_CABECERA_YB_DB] if condef: milog.debug("Cabecera de BBDD detectada %s",condef ) #Si no existe no se establece para que no falle if condef in settings.DATABASES:
from time import strptime from datetime import date from .FLSqlcursor import FLSqlCursor from .FLAux import FLAux from .FLSqlQuery import FLSqlQuery from YBUTILS import mylogging as log from YBUTILS.DbRouter import dameConexionDef milog=log.getLogger("LEGACY.FLUtil") class FLUtil: #-------PROTECTED ----------------------------------------------- #Metodos para la gestion de modelos (Incluye el registro de funciones de evento #-------PUBLIC ----------------------------------------------- @classmethod def roundFieldValue(cls,numero, stabla, campo): posiciones=200 decimales=100 try: model=FLAux._obtenermodeloSimple(stabla) micampo=getattr(model,campo) posiciones=micampo.max_digits() decimales=micampo.decimal_places except: pass #A revisar para ver exactamente que tipo hay que devolver, esto devuelve float return round(numero,decimales)
from __future__ import absolute_import from __future__ import division from __future__ import print_function from django.db import connections from django.conf import settings from YBUTILS import mylogging as log try: from threading import local except ImportError: from django.utils._threading_local import local from django.utils.deprecation import MiddlewareMixin milog = log.getLogger("YBUTILS.DbRouter") # ----------------------------- VARIABLES GLOBALES _CABECERA_YB_DB = "HTTP_X_YB_DB" # -----------------------------MIDDLEWARE _thread_locals = local() class ThreadLocalMiddleware(MiddlewareMixin): """ Simple middleware that adds the request object in thread local storage. """ def process_request(self, request): _thread_locals.request = request settings.SESSION_COOKIE_NAME = "sessionid" + request.META["SERVER_PORT"]
""" Definicion de excepciones y tratamiento de errores comunes """ """ Se capturaran todas y se devolvera un mensaje 400 si no mas especifico El mensaje de vuelta tendra la estructura: tipo: 1-Error Arquitectura/API REST 2-Error de aplicacion 3-Validacion 4-Error excepcion capturada msg: Mensaje por defecto data:Otros datos relevantes """ milog = log.getLogger("VIEWREST.error") def YB_error_handler(cherror, exc): print("_________________YBERRORHANDLER_________________") print(cherror) return "Error inesperado" def YB_exception_handler(exc, context): # print("________________YBEXCEPTIONHANDLER________________") errorMsg = exc.__str__() or None try: milog.info("Excepcion capturada de alto nivel: %s", errorMsg) # if settings.DEBUG: # milog.exception(exc)
#!/usr/bin/env python # -*- coding: utf-8 -*- """Libreria de funciones para el tratamiento especial en la carga de templates y el uso del contexto """ from django.template import loader from django.template import RequestContext from YBUTILS import mylogging as log from YBWEB.ctxJSON import DICTJSON milog = log.getLogger("YBWEB.templateCTX") # --------------------CONSTANTES------------------------------------ # YB_DIR_DEFECTO_TEMPLATES='YBWEB' # YB_DIR_COMPONENTS='componentes' # directorio_base=settings.YB_DIR_DEFECTO_TEMPLATES +"/"+"basechain" # directorio_componentes=settings.YB_DIR_COMPONENTS # directorio_base_componentes=settings.YB_DIR_DEFECTO_TEMPLATES +"/"+directorio_componentes # posfijoctx="_context" # --------------------GENERALES------------------------------------ def dametipo(nombretemplate): try: return nombretemplate.split('_')[0] except Exception: return 'otro' def controlTerminahtml(nombre):