예제 #1
0
 def _configure(self, columns):
     columns = list(columns)
     # build list of ColConfigs from list of strings - backward compat.
     self._string_configured = 0
     if columns and type(columns[0]) == types.StringType:
         self._string_configured = 1
         column_names = columns
         columns = []
         for name in column_names:
             columns.append(ColumnConfiguration(name, len(columns), 'none'))
     # check to make sure they haven't given a col a name that matches
     #  one of our hidden names.
     positions = []
     names = ['_seq']
     for column in columns:
         if column.name in names:
             raise _exceptions.ENameInUse(column.name)
         names.append(column.name)
         if column.position in positions:
             raise _exceptions.EInvalidValue('columns',column.name,
                                             'Position is already populated.')
         positions.append(column.position)
     columns.append(ColumnConfiguration('_seq', len(columns), 'ascending'))
     self.last_values = []
     self.columns = columns
     self.data_manager.configure(columns)
예제 #2
0
 def as_dictionary(self,data):
     if type(data) is types.StringType:
         data = self.eval(data)
     elif type(data) is types.DictType:
         data = self.as_values(data)
     if type(data) is not types.ListType:
         raise _exceptions.EInvalidValue('data',data)
     return convert_to_dict(self._names[0:len(data)],data)
예제 #3
0
 def add_entry(self, values):
     if self.last_values:
         sort_orders = self.data_manager.get_sort_orders()
         for pos in range(0, len(values)):
             if sort_orders[pos] == 'ascending':
                 if values[pos] <= self.last_values[pos]:
                     raise _exceptions.EInvalidValue(
                         self.data_manager.get_name(pos), values[pos],
                         'Contradicts sort order')
             elif sort_orders[pos] == 'descending':
                 if values[pos] >= self.last_values[pos]:
                     raise _exceptions.EInvalidValue(
                         self.data_manager.get_name(index), values[index],
                         'Contradicts sort order')
     if self.data_manager.num_columns() != (len(values) + 1):
         raise _exceptions.EInvalidValue('values', values)
     self.last_values = values
     self._queue.append(values)
     self._write_queue()
예제 #4
0
 def sequence(self,data):
     if type(data) is types.StringType:
         index = data.rfind(',')
         if index == -1:
             return int(data.strip()[1:-1].strip())
         return int(data.strip()[index+1:-1].strip())
     elif type(data) is types.ListType:
         return data[-1]
     elif type(data) is types.DictType and data.has_key('_seq'):
         return data['_seq']
     raise _exceptions.EInvalidValue('data',data)
예제 #5
0
 def as_values(self,data):
     values = []
     if type(data) is types.DictType:
         for name in self._names:
             values.append(data[name])
         return values
     if type(data) is types.StringType:
         return self.eval(data)
     if type(data) is types.ListType:
         return data
     raise _exceptions.EInvalidValue('data',data)
예제 #6
0
 def __init__(self,name=None,position=None,sort_order=None,meta=None):
     if meta is None:
         meta = {}
     self.name = name
     self.position = position
     self.meta = meta
     if sort_order in (None, 'None'):
         sort_order = 'none'
     if sort_order not in ['none', 'ascending', 'descending']:
         text = 'Needs to be: "none", "ascending", or "descending"'
         raise _exceptions.EInvalidValue('sort_order', sort_order, text)
     self.sort_order = sort_order
예제 #7
0
    def connect(self,
                timeout=DEFAULT_TIMEOUT,
                dialout_options_file=None,
                routes=None):
        if dialout_options_file is None:
            raise exceptions.EInvalidValue('dialout_options_file', None,
                                           'dialout_options_file parameter must '\
                                           'be specified.')
        if routes is None:
            routes = []
        self._lock.acquire()
        try:
            if not self.is_connected():
                self._connect(timeout, dialout_options_file, routes)
        finally:
            self._lock.release()

        return
예제 #8
0
 def get_slice_values(self, column, start, end, extended=0):
     if not os.path.exists(self.filename):
         return ()
     self._trim_lock.acquire()
     try:
         sort = self.data_manager.get_row().get_sort_order(column)
         if (sort == 'none'
             or not self.data_manager.is_sort_order_constant(column)):
             text = 'Cannot get slice on non-ordered field'
             raise _exceptions.EInvalidValue('column', column, text)
         if (sort == 'descending' and end > start) or \
            (sort == 'ascending' and end < start):
             temp = end
             end = start
             start = temp
         stream = self._get_sorted_slice_values(column,start,end,extended)
     finally:
         self._trim_lock.release()
     return stream