[pyar] Importación de módulos

Leandro E. Colombo Viña colomboleandro en gmail.com
Vie Feb 27 09:10:26 ART 2015


Muchísimas gracias por tus comentarios Alejandro.

La verdad es que lo pensamos así porque el controlador lo realizó una
persona, la base de datos lo realizó otra y lo mismo con el monitor. Ahora
que lo decís y lo pienso, tranquilamente podríamos tener todo en un único
directorio separado en los diferentes módulos.

A modo de comentario nomás, en afán de no extender por demás el mail
anterior, omití algo de información. El controlador no es sólo un módulo,
es un paquete que podría funcionar solo (aún sin mucho sentido). De hecho
la idea es hacerlo funcionar como un daemon, y a través del monitor hacer
cambios en la DB que luego el controlador levanta y modifica su
comportamiento según eso. En el directorio de la base tenemos el módulo de
inicialización de la misma y varios archivos SQL que son las funciones que
se utilizan en la DB.
La estructura completa es:

app/
    run.py
    controlador/
        config/ ---> archivos tipo CFG de los dispositivos.
        log/ ------> log del controlador.
        lib/ ------> librería con las funciones de los dispositivos. Una
especie de "SDK".
        __init__.py
        controlador.py
        controlador_daemon.py  --> éste es el que se ejecuta.
    db/
        init/ -----> módulos y extras para inicializar la DB.
        stores/ ---> archivos SQL con la lógica de la base.
        __init__.py
        db.py -----> clase de conexión con la DB.
    monitor/
        static/
        templates/
        __init__.py
        monitor.py --> a la función main de este es la que llama run.py

Me parece que voy a mudarme a la estructura que me proponés, porque como
vos decís, no creo que se justifique tenerlo tan atomizado.


app/
    config/ ---> archivos tipo CFG de los dispositivos.
    db/
        init/ -----> módulos y extras para inicializar la DB.
        stores/ ---> archivos SQL con la lógica de la base.
    log/ ------> log del controlador.
    lib/ ------> librería "SDK".
    static/
    templates/
    __init__.py
    controlador.py
    controlador_daemon.py  --> éste es el que se ejecuta.
    db.py -----> clase de conexión con la DB.
    monitor.py --> ejecuto este módulo.

Mil gracias!
Cualquier otra sugerencia, es más que bienvenida!

El 27 de febrero de 2015, 4:44, Alejandro Santos <listas en alejolp.com>
escribió:

> 2015-02-27 0:41 GMT+01:00 Leandro E. Colombo Viña <
> colomboleandro en gmail.com>:
> >
> > app/
> >     run.py
> >     controlador/
> >         __init__.py
> >         controlador.py
> >     db/
> >         __init__.py
> >         db.py
> >     monitor/
> >         __init__.py
> >         monitor.py
> >
> > La idea es la siguiente: la app se corre desde run.py, es una aplicación
> web
> > en Flask que consulta una base de datos y controla unos dispositivos
> > electrónicos. En monitor está toda la parte web y lo que sería la
> interfaz
> > de usuario. En db está la configuración de la base de datos (ahí se
> importa
> > el conector y está la clase que maneja la conexión) que usaría tanto el
> > monitor como el controlador. Y en controlador está todo lo necesario para
> > comunicarse con la electrónica.
> >
>
> La estructura que elegiste me suena muy parecida a Java, donde en Java
> cada paquete es un directorio aparte.
>
> ¿Por qué tenés tres directorios, controlador, db, monitor? ¿Pensás
> tenés más controladores, bases de datos y monitores?
>
> De otra forma, con tener algo así debería alcanzar:
>
> app/
>     run.py
>     controlador.py
>     db.py
>     monitor.py
>
> Recién cuando tengas varios modulos que lógicamente sean parecidos,
> por ejemplo si tenés más de media docena de dispositivos electrónicos
> y el código lo repartís en varios archivos, es cuando le veo sentido a
> hacer un directorio aparte. Lo mismo con los otros módulos, db y
> controlador.
>
> > El tema es que queremos ver cuál es la mejor manera de realizar la
> > importación de los parámetros de configuración de la base de datos para
> > ambos paquetes (monitor y controlador).
>
> ¿Dónde y cómo están estos parámetros? ¿Es un archivo .ini, xml?
>
> > Recomiendan usar importaciones relativas? O cargar en el sys.path los
> > directorios donde estan los paquetes e importarlos así?
> >
>
> No, no modifiquen sys.path a menos que entiendan todas las
> consecuencias de hacerlo. Sys.path es para configurar diferentes rutas
> bases de colecciones de paquetes y librerías, eventualmente la raíz de
> tu aplicación, y es lo que usa virtualenv para hacer su magia.
>
> La consecuencia más importante y grave es que vas a tener aliasing de
> módulos. Si en tu sys.path tenés tanto el path a "app" como a
> "app/controlador" vas a poder importar el modulo controlador.py de dos
> formas diferentes, y esto es malo porque para Python van a ser dos
> módulos y dos tipos distintos.
>
>
> --
> Alejandro Santos
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150227/e0ccd48d/attachment-0001.html>


More information about the pyar mailing list