From 3f1942cbfbc845b3e67707f7a34d1563c7737a6a Mon Sep 17 00:00:00 2001 From: Antonio de la Rosa Date: Thu, 17 Mar 2016 20:29:18 +0100 Subject: [PATCH] Added arrayfield field --- paramecio/cromosoma/extrafields/arrayfield.py | 46 +++++++++++++++++++ paramecio/index.py | 2 +- setup.py | 4 +- tests/arrayfieldtest.py | 31 +++++++++++++ 4 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 paramecio/cromosoma/extrafields/arrayfield.py create mode 100644 tests/arrayfieldtest.py diff --git a/paramecio/cromosoma/extrafields/arrayfield.py b/paramecio/cromosoma/extrafields/arrayfield.py new file mode 100644 index 0000000..921e501 --- /dev/null +++ b/paramecio/cromosoma/extrafields/arrayfield.py @@ -0,0 +1,46 @@ +from paramecio.cromosoma.webmodel import PhangoField +import json + +class ArrayField(PhangoField): + + def __init__(self, name, field_type, required=False): + + super().__init__(name, required) + + self.field_type=field_type + + def check(self, value): + + if type(value).__name__=='str': + try: + value=json.loads(value) + except json.JSONDecodeError: + + value=[] + self.error=True + self.txt_error='Sorry, the json array is invalid' + + elif type(value).__name__!='list': + + value=[] + self.error=True + self.txt_error='Sorry, the json array is invalid' + + for k,v in enumerate(value): + + value[k]=self.field_type.check(v) + + final_value=json.dumps(value) + + final_value=super().check(final_value) + + return final_value + + def get_type_sql(self): + + return 'TEXT NOT NULL DEFAULT ""' + + def show_formatted(self, value): + + return ", ".join(value) + diff --git a/paramecio/index.py b/paramecio/index.py index b601158..cb9f9cd 100644 --- a/paramecio/index.py +++ b/paramecio/index.py @@ -1,5 +1,5 @@ import os, sys, traceback, inspect -from importlib import import_module, reload +from importlib import import_module from bottle import route, get, post, run, default_app, abort, request, static_file from settings import config from beaker.middleware import SessionMiddleware diff --git a/setup.py b/setup.py index ec3858d..350d9c4 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ if sys.version_info < (3, 3): #import paramecio setup(name='paramecio', - version='0.1.0b1', + version='0.1.0b2', description='Fast and simple Framework based in bottle and Mako.', long_description='This framework is simple framework used for create web apps. Paramecio is modular and fast. By default have a module called admin that can be used for create ', author='Antonio de la Rosa Caballero', @@ -39,4 +39,4 @@ setup(name='paramecio', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', ], - ) \ No newline at end of file + ) diff --git a/tests/arrayfieldtest.py b/tests/arrayfieldtest.py new file mode 100644 index 0000000..3e49a31 --- /dev/null +++ b/tests/arrayfieldtest.py @@ -0,0 +1,31 @@ +from settings import config +from paramecio.cromosoma import corefields +from paramecio.cromosoma.extrafields.arrayfield import ArrayField +import unittest +import json + +class TestFieldMethods(unittest.TestCase): + + def test_i18nfield(self): + + type_field=corefields.IntegerField('value') + + field=ArrayField('field', type_field) + + value=[1,2,5,'trick\''] + + json_encoded=field.check(value) + + self.assertEqual(json_encoded, '["1", "2", "5", "0"]') + + type_field=corefields.CharField('value') + + field=ArrayField('field', type_field) + + value=['trick', 'mytuquito', 25] + + json_encoded=field.check(value) + + self.assertEqual(json_encoded, '["trick", "mytuquito", "25"]') + +