def test_index_new_row(self): data = 'house,2005-10-10\nwindow,2005-05-10\ncomputer,2005-10-10' handler = Things() handler.load_state_from_string(data) handler.add_row(['flower', Date.decode('2005-05-10')]) self.assertEqual(handler.search(date=Date.decode('2005-05-10')), [1,3])
def test_load_state_with_schema(self): handler = Languages() handler.load_state_from_string(TEST_DATA_1) rows = list(handler.get_rows()) self.assertEqual(rows, [ [u"python", 'http://python.org/', 52343, Date.decode('2003-10-23')], [u"ruby", 'http://ruby-lang.org/', 42352, Date.decode('2001-03-28')]])
def test_load_state_with_schema(self): handler = Languages() handler.load_state_from_string(TEST_DATA_1) rows = list(handler.get_rows()) self.assertEqual(rows, [[ u"python", 'http://python.org/', 52343, Date.decode('2003-10-23') ], [ u"ruby", 'http://ruby-lang.org/', 42352, Date.decode('2001-03-28') ]])
def test_build_csv_data(self): handler = People() handler.load_state_from_string('') handler.add_row(['Piotr', 'Macuk', Date.decode('1975-12-08')]) handler.add_row(['Basia', 'Macuk', Date.decode('2002-02-14')]) self.assertEqual(handler.search(surname='macuk'), [0, 1]) handler.add_row(['Pawe³', 'Macuk', Date.decode('1977-05-13')]) self.assertEqual(handler.search(surname='macuk'), [0, 1, 2]) handler.del_row(2) self.assertEqual(handler.search(surname='macuk'), [0, 1]) handler.del_row(0) self.assertEqual(handler.search(surname='macuk'), [1])
def get_errors(self): errors = [] handler = self.get_value('data') # Consistency check # First round on variables # Starting from 1 + header lineno = 2 locals_ = {} for line in handler.get_rows(): record = {} for index, key in enumerate(handler.columns): record[key] = line[index] # Name name = record['name'] if name is None: continue if not Variable.is_valid(name): err = ERR_BAD_NAME.gettext(line=lineno, name=name) errors.append(err) continue if name in locals_: err = ERR_DUPLICATE_NAME.gettext(line=lineno, name=name) errors.append(err) continue # Type type_name = record['type'] if type_name is None: # Write down default at this time record['type'] = type_name = 'str' datatype = Type.get_type(type_name) if datatype is None: err = ERR_BAD_TYPE.gettext(line=lineno, type=type_name) errors.append(err) continue # Length length = record['length'] if length is None: # Write down default at this time record['length'] = length = 20 if not ValidInteger.is_valid(length): err = ERR_BAD_LENGTH.gettext(line=lineno, length=length) errors.append(err) continue if issubclass(datatype, SqlEnumerate): # Enumerate Options enum_option = record['enum_options'] if enum_option is None: err = ERR_MISSING_OPTIONS(line=lineno) errors.append(err) continue # Split on "/" enum_options = EnumerateOptions.split(enum_option['value']) record['enum_options'] = enum_options # Enumerate Representation enum_repr = record['enum_repr'] if enum_repr is None: # Write down default at the time of writing record['enum_repr'] = enum_repr = 'radio' if not EnumerateRepresentation.is_valid(enum_repr): err = ERR_BAD_ENUM_REPR.gettext(line=lineno, enum_repr=enum_repr) errors.append(err) continue elif issubclass(datatype, NumDecimal): # Decimals decimals = record['decimals'] if decimals is None: # Write down default at the time of writing record['decimals'] = decimals = 2 if not ValidInteger.is_valid(decimals): err = ERR_BAD_DECIMALS.gettext(line=lineno, decimals=decimals) errors.append(err) continue # Mandatory mandatory = record['mandatory'] if mandatory is None: # Write down default at the time of writing record['mandatory'] = mandatory = True if not Mandatory.is_valid(mandatory): err = ERR_BAD_MANDATORY.gettext(line=lineno, mandatory=mandatory) errors.append(err) continue # Size size = record['size'] if size is None: # Write down default at the time of writing if type_name == 'text': record['size'] = size = 5 else: record['size'] = size = length if not ValidInteger.is_valid(size): err = ERR_BAD_SIZE.gettext(line=lineno, size=size) errors.append(err) continue # Default value default = record['default'] = record['default'].strip() if default: if issubclass(datatype, EnumBoolean): value = Mandatory.decode(default) default = EnumBoolean.encode(value) elif issubclass(datatype, SqlEnumerate): datatype = datatype(options=enum_options) #default = checkid(default) or '' default = default elif issubclass(datatype, NumTime): # "0-0-0 09:00:00" -> "09:00:00" default = default.split(' ')[-1] # "09:00:00" -> "09:00" if default.count(":") > 1: default = default.rsplit(":", 1)[0] elif issubclass(datatype, NumDate): # "2010-11-18 00:00:00" -> "18/11/2010" default = default.split(' ')[0] value = Date.decode(default) default = NumDate.encode(value) elif issubclass(datatype, NumDigit): datatype = datatype(length=length) if not datatype.is_valid(default): err = ERR_BAD_DEFAULT.gettext(line=lineno, default=unicode(default, 'utf_8')) errors.append(err) continue record['default'] = default if record['enum_repr'] == 'checkbox': locals_[name] = [] else: locals_[name] = 0 lineno += 1 # Second round on references # Starting from 1 + header lineno = 2 for row in handler.get_rows(): dependency = row.get_value('dependency') if dependency: try: Expression.is_valid(dependency, locals_) except Exception, err: err = ERR_BAD_DEPENDENCY.gettext(line=lineno, err=err) errors.append(err) continue formula = row.get_value('formula') if formula: try: datatype.sum except AttributeError: err = ERR_NO_FORMULA.gettext(line=lineno, type=type_name) errors.append(err) continue try: Expression.is_valid(formula, locals_) except Exception, err: err = ERR_BAD_FORMULA.gettext(line=lineno, err=err) errors.append(err) continue
def test_indexes_hit_in_many_rows(self): data = 'house,2005-10-10\nwindow,2005-05-10\ncomputer,2005-10-10' handler = Things(string=data) handler.load_state_from_string(data) self.assertEqual(handler.search(date=Date.decode('2005-01-01')), []) self.assertEqual(handler.search(date=Date.decode('2005-10-10')), [0,2])
def test_indexes_hit_in_one_row(self): handler = Languages() handler.load_state_from_string(TEST_DATA_1) self.assertEqual(handler.search(number=52343), [0]) self.assertEqual(handler.search(date=Date.decode('2001-03-28')), [1])
from ikaaro.table import OrderedTable, OrderedTableFile from ikaaro.table_views import OrderedTable_View, Table_EditRecord from ikaaro.text import CSV from ikaaro.tracker import Tracker # Import from wiki from wiki import WikiFolder # Import from tzm from chapter.chapter import Chapters from phoenix.phoenix import Phoenix from project.project import Projects #from training.training import Training from forums.forums import Forums message_date = Date.decode('2003-10-23') MESSAGES_DATA = """0, 0, 120124, 'hello world'""" ########################################################################### # Resources ########################################################################### class Affiliations(CSV): class_id = 'affiliations' def init_resource(self): super(Affiliations, self).init_resource() path = get_abspath('data/affiliations.csv') self.handler.load_state_from_uri(path) class Industry(CSV):