/ svn-cassiopeia --username yuuma.tomita@gmail.com/cas_helper/xldb/sheet_model/table.py
Python | 181 lines | 176 code | 1 blank | 4 comment | 0 complexity | 35611d6996af0385a825ff19c5d9e743 MD5 | raw file
- #!/usr/bin/env python
- #coding:utf8
-
- import os
- from collections import namedtuple
- #_make(iterable), _asdict(), _replace(kwargs), _fields http://www.python.jp/doc/nightly/library/collections.html
- """
- EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
- for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
- print emp.name, emp.title
- """
-
- import tempfile, os, json, codecs, copy
-
-
- class Table(list):
- def __init__(self, rawItems=None):
- self.extend(ItemFactory.constract(rawItems))
- self.roots = [item for item in self if not item.parent]
- @property
- def max_depth(self):
- return max([item.depth for item in self.flatitems])
- def dump(self):
- for item in self:
- print unicode(item)
- def json_dump(self):
- pass
- @staticmethod
- def load_source_from_sheet(connector):
- return ItemFactory.load_source_from_sheet(connector)
-
-
- class Priority(list):
- def __init__(self, rawItems=None):
- self.extend(rawItems)
- @staticmethod
- def load_source_from_sheet(connector):
- return TableItemPriority.load_source_from_sheet(connector)
-
-
- class TableItem(object):
- def __init__(self, value, depth=0, order=0, parent=None, **k):
- self.value = value
- self.order = order
- self.parent = parent
- self.children = []
- self.depth = depth
- @property
- def parent(self):
- return self.__parent
- @parent.setter
- def parent(self, parent):
- self.__parent = parent
- if parent:
- parent.children.append(self)
- return parent
- @property
- def item_id(self):
- item = self
- make_id_from = lambda item: u'({0}){1}'.format(str(item.order).zfill(2), item.value)
- res = [make_id_from(item)]
- while item.parent:
- item = item.parent
- res.append(make_id_from(item))
- return ', '.join(reversed(res))
- #unicode?repr?????????
- def __repr__(self):
- return u'<MenuItem:o={0}, d={1}, vlen={2}>'.format(str(self.order).zfill(2), self.depth, len(self.value))
- def __unicode__(self):
- return u'<(o={0}, d={1}, v={2} ({3})>'.format(str(self.order).zfill(2), self.depth, self.value, self.item_id)
-
-
- class TableItemFactory(object):
- RawItem = namedtuple('RawItem', 'value col_order row_order')
- @staticmethod
- def constract(rawItems):
- resItems = []
- parentItem = None
- check_depth = 0
- for item in rawItems:
- while item.depth != check_depth: #???? item.depth == check_depth????parentItem?????
- if item.depth != 0:
- parentItem = parentItem.parent
- check_depth = parentItem.depth + 1
- else:
- parentItem = None
- break
- currentItem = MenuItem(item.value, item.depth, item.order, parentItem)
- resItems.append(currentItem)
- #???? #???item???item????????
- parentItem = currentItem
- check_depth = parentItem.depth + 1
- return resItems
- @classmethod
- def getRawItemsFrom(cls, raw_source, separator='.'):
- res = []
- order = 0
- for line in raw_source.splitlines():
- if line:
- value = line.replace(separator, '')
- depth_counter = 0
- while line.startswith(separator):
- depth_counter += 1
- line = line[1:]
- res.append(cls.RawItem(value, depth_counter, order))
- order += 1
- return res
- @classmethod
- def load_source_from_sheet(cls, connector): #????????????Sheet???????.pattern????
- raw_data = connector.get_raw_data(u'????????', 'C3') #??????connector????????????
- _e = lambda start, end: enumerate(range(end - start), start) #(5, 0),(6, 1),,/(row, row_order)
- RawItem = cls.RawItem
- rawItems = []
- for row, row_order in _e(connector.start_row, connector.end_row):
- for col, col_order in _e(connector.start_col, connector.end_col):
- val = connector.sheet.cell(row, col).value
- if val:
- print u'val:{0}, col_order:{1} , row_order:{2}'.format(val, col_order, row_order)
- rawItems.append(RawItem(val, col_order, row_order))
- return rawItems
-
-
- class TableItemPriority(TableItemFactory):
- RawItem = namedtuple('RawItem', 'priority emargence importance')
- @classmethod
- def load_source_from_sheet(cls, connector): #????????????Sheet???????.pattern????
- raw_data = connector.get_raw_data(u'????????', 'C3') #??????connector????????????
- _e = lambda start, end: enumerate(range(end - start), start) #(5, 0),(6, 1),,/(row, row_order)
- RawItem = cls.RawItem
- rawItems = []
- for row, row_order in _e(connector.start_row, connector.end_row):
- for col, col_order in _e(connector.start_col, connector.end_col):
- val = connector.sheet.cell(row, col).value
- if val:
- print u'val:{0}, col_order:{1} , row_order:{2}'.format(val, col_order+1, row_order+1)
- rawItems.append(RawItem(val, col_order+1, row_order+1))
- return rawItems
-
-
- ur""" test section
- #base row data
- import xldb.sheetutils
- reload(xldb.sheetutils)
- Connector = xldb.sheetutils.Connector
- _dir = ur'D:\Orant\dev\cas\????????????\????????????\kin_re\helpdesk\setting_docs'
- _file = ur'priority_matrix.xls'
- connector = Connector(_dir, _file)
-
- connector.get_raw_data(u'????????', 'C3')
-
- import xldb.sheet_model.table
- reload(xldb.sheet_model.table)
- TableItemFactory = xldb.sheet_model.table.TableItemFactory
- TableItemFactory.load_source_from_sheet(connector)
-
- TableItemPriority = xldb.sheet_model.table.TableItemPriority
- TableItemPriority.load_source_from_sheet(connector)
-
- MultiMenu = xldb.multi_menu.MultiMenu
- ItemFactory = xldb.multi_menu.ItemFactory
- menu = MultiMenu(ItemFactory.getRawItemsFrom(source))
- menu
- menu.items['a'].children
- menu.items['b'].parent
- menu.items['b'].item_id
-
- for item in menu: print unicode(item)
-
-
- import xldb.sheetutils
- reload(xldb.sheetutils)
- Connector = xldb.sheetutils.Connector
- _dir = ur'D:\Orant\dev\cas\????????????\????????????\kin_re\helpdesk\setting_docs'
- _file = ur'priority_matrix.xls'
- dataset = Connector(_dir, _file).get_source(u'????????', 'C3', pattern='Priority')
-
-
-
- """
-
-