home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import sys
- import zipfile
- from odf.text import UserFieldDecl
- from odf.namespaces import OFFICENS
- from odf.opendocument import load
- OUTENCODING = 'utf-8'
- VALUE_TYPES = {
- 'float': (OFFICENS, u'value'),
- 'percentage': (OFFICENS, u'value'),
- 'currency': (OFFICENS, u'value'),
- 'date': (OFFICENS, u'date-value'),
- 'time': (OFFICENS, u'time-value'),
- 'boolean': (OFFICENS, u'boolean-value'),
- 'string': (OFFICENS, u'string-value') }
-
- class UserFields(object):
- src_file = None
- dest_file = None
-
- def __init__(self, src = None, dest = None):
- self.src_file = src
- self.dest_file = dest
- self.document = None
-
-
- def loaddoc(self):
- if isinstance(self.src_file, basestring):
- if not zipfile.is_zipfile(self.src_file):
- raise TypeError('%s is no odt file.' % self.src_file)
- zipfile.is_zipfile(self.src_file)
- elif self.src_file is None:
- self.src_file = sys.stdin
-
- self.document = load(self.src_file)
-
-
- def savedoc(self):
- if self.dest_file is None:
- self.document.save('-')
- else:
- self.document.save(self.dest_file)
-
-
- def list_fields(self):
- return [ x[0] for x in self.list_fields_and_values() ]
-
-
- def list_fields_and_values(self, field_names = None):
- self.loaddoc()
- found_fields = []
- all_fields = self.document.getElementsByType(UserFieldDecl)
- for f in all_fields:
- value_type = f.getAttribute('valuetype')
- if value_type == 'string':
- value = f.getAttribute('stringvalue')
- else:
- value = f.getAttribute('value')
- field_name = f.getAttribute('name')
- if field_names is None or field_name in field_names:
- found_fields.append((field_name.encode(OUTENCODING), value_type.encode(OUTENCODING), value.encode(OUTENCODING)))
- continue
-
- return found_fields
-
-
- def list_values(self, field_names):
- return [ x[2] for x in self.list_fields_and_values(field_names) ]
-
-
- def get(self, field_name):
- values = self.list_values([
- field_name])
- if not values:
- return None
- return values[0]
-
-
- def get_type_and_value(self, field_name):
- fields = self.list_fields_and_values([
- field_name])
- if not fields:
- return None
- (field_name, value_type, value) = fields[0]
- return (value_type, value)
-
-
- def update(self, data):
- self.loaddoc()
- all_fields = self.document.getElementsByType(UserFieldDecl)
- for f in all_fields:
- field_name = f.getAttribute('name')
- if data.has_key(field_name):
- value_type = f.getAttribute('valuetype')
- value = data.get(field_name)
- if value_type == 'string':
- f.setAttribute('stringvalue', value)
- else:
- f.setAttribute('value', value)
- value_type == 'string'
-
- self.savedoc()
-
-
-