Como se verá, la aplicación es totalmente funcional por si misma. Bueno, que si se quiere ver es una pequeña biblioteca, casi inútil desde un punto de vista práctico. Vamos, que ni siquiera esta capturando excepciones. Sin embargo, yo voy a suponer que esta aplicación es la joya de la corona, que dentro de cada función encierra grandes operaciones de tratamiento de ficheros que me gustaría que estuvieran disponibles para otras aplicaciones, sobre todo, para un cliente web que funcione con AngularJS
Con ustedes, la aplicación ficheros.py:
# coding: utf-8 import os import json class Usuarios(): """ Manejo de usuarios por medio de ficheros json """ def __init__(self): self.direccion = os.getcwd() + '/archivos/' def listado(self): """ Retorna lista con usuarios registrados Returns: listado: (list) Lista de usuarios registrados """ try: lista = os.listdir(self.direccion) usuarios = [usuario.split('.')[0] for usuario in lista] except IOError as e: return {'error': e.args} return usuarios def detalle(self, usuario): """ Retorna diccionario con información de usuario Args: usuario: (str) usuario del que se desean detalles Returns: dict: Información del usuario """ try: fichero = open(self.direccion + '/' + usuario + '.json') contenido = json.load(fichero) except ValueError as e: return {'error': e.message} except IOError as e: return {'error': e.args[1]} return contenido def creacion(self, usuario, datos): """ Retorna diccionario de datos con los que se ha creado al usuario Args: usuario: (str) nombre del usuario a crear datos: (dict) datos de la información del usuario Returns: dict: Datos con los que se ha creado al usuario """ try: fichero = open(self.direccion + '/' + usuario + '.json', 'w') contenido = json.dump(datos, fichero) except ValueError as e: return {'error': e.message} except IOError as e: return {'error': e.args[1]} return datos def modificacion(self, usuario, datos): """ Retorna diccionario con los datos modificados del usuario Args: usuario: (str) nombre del usuario a modificar datos: (dict) datos a modificar del usuario Returns: dict: Datos con los que se ha creado al usuario """ try: fichero = open(self.direccion + '/' + usuario + '.json', 'w+') contenido = json.dump(datos, fichero) except ValueError as e: return {'error': e.message} except IOError as e: return {'error': e.args[1]} return datos def borrado(self, usuario): """ Retorna nombre de usuario borrado Args: usuario: (str) nombre del usuario a borrar Returns: usuario: (str) nombre del usuario borrado """ try: fichero = self.direccion + '/' + usuario + '.json' os.remove(fichero) except OSError as e: return {'error': e.args[1]} return usuarioComo puede intuirse del código, tenemos cinco operaciones definidas.
- Listar los ficheros que se encuentran en ./archivos/ (listar())
- Ver en detalle un fichero .json que se encuentra dentro de ./archivos/ (detalle()), y que básicamente consiste en retornar el contenido json del fichero traducido a un tipo python válido.
- Crear un nuevo fichero json dentro de ./archivos/ (creacion())
- Modificar un fichero json, reemplazando todo el contenido actual con el contenido que tiene las modificaciones ya aplicadas. Parece ser que la precisión en las definiciones es algo importante
- Borrar un fichero json dentro de ./archivos/
Para empezar a usar la aplicación, bastaría con crear el directorio ./archivos/ junto con algunos ficheros de prueba. Pues que lo que viene a decir la documentación es que cada método de la aplicación recibe, en su mayoría, un usuario y un diccionario datos. Y en su mayoría retorna otro diccionario
$ mkdir ./archivos $ echo '{"palabras": ["ambiente", "publico"], "nombre": "Alexander", "apellido": "Ort\u00edz"}' > ./archivos/alortiz.json $ echo '{"palabras": ["contenido", "fichero"], "nombre": "Karen", "apellido": "Pe\u00f1ate"}' > archivos/kpenate.json $ echo '{"palabras": ["posix", "permisos"], "nombre": "Olga", "apellido": "Pineda"}' > archivos/opineda.jsonPor último, convertiremos esta diminuta aplicación en una paquete python válido. Tomando en cuenta lo sencillo que es en python: Creamos un directorio, ubicamos todos los ficheros creados dentro y creamos un ficheros __init__.py
$ mkdir ./fichero_app $ mv archivos/ ficheros.py fichero_app/ $ touch fichero_app/__init__.pyUn script python que tenga el mismo directorio raíz que fichero_app (En este momento, ./ambiente/aplicacion/aplicacion/fichero_app), puede importar la clase Fichero de la siguiente forma:
from fichero_app.ficheros import UsuariosLa cuestión sobre el directorio a usar es un poco espinosa, producto de no parametrizarla como debiera. El truco es que la búsqueda del directorio ficheros ocurrirá en la base desde donde se ejecute la aplicación que llama a nuestra pequeña aplicación como módulo.
El siguiente paso va en la línea de la guía con Pyramid: De como publicamos con pyramid una aplicación python
No hay comentarios:
Publicar un comentario