/usr/share/pyshared/pychart/chart_object.py is in python-pychart 1.39-7build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #
# Copyright (C) 2000-2005 by Yasushi Saito (yasushi.saito@gmail.com)
#
# Jockey is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.
#
# Jockey is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
import pychart_types
import types
def set_defaults(cls, **dict):
validAttrs = getattr(cls, "keys")
for attr, val in dict.items():
if not validAttrs.has_key(attr):
raise Exception, "%s: unknown attribute %s." % (cls, attr)
tuple = list(validAttrs[attr])
# 0 : type
# 1: defaultValue
# 2: document
# 3: defaultValue document (optional)
tuple[1] = val
validAttrs[attr] = tuple
class T(object):
def init(self, args):
keys = self.keys
for attr, tuple in keys.items():
defaultVal = tuple[1]
if isinstance(defaultVal, types.FunctionType):
# if the value is procedure, use the result of the proc call
# as the default value
defaultVal = apply(defaultVal, ())
setattr(self, attr, defaultVal)
for key, val in args.items():
self.__setattr__(key, val)
def __check_type(self, item, value):
if item.startswith("_"):
return
if not self.keys.has_key(item):
raise Exception, "%s: unknown attribute '%s'" % (self, item)
typeval, default_value, docstring = self.keys[item][0:3]
if value == None or typeval == pychart_types.AnyType:
pass
elif typeval == bool:
# In 2.3, bool is a full-fledged type, whereas
# in 2.2, it's just a function that returns an integer.
# To mask this difference, we handle the bool type specially.
if value not in (True, False):
raise TypeError, "%s: Expecting bool, but got %s" % (self, value)
elif typeval == str:
if not isinstance(value, str) and not isinstance(value, unicode):
raise TypeError, "%s: Expecting a string, but got %s" % (self, value)
elif isinstance(typeval, types.FunctionType):
# user-defined check procedure
error = apply(typeval, (value,))
if error != None:
raise TypeError, "%s: %s for attribute '%s', but got '%s'" % (self, error, item, value)
elif isinstance(value, typeval):
pass
else:
raise TypeError, "%s: Expecting type %s, but got %s (attr=%s, %s)" % (self, typeval, value, item, self.keys[item])
def __init__(self, **args):
self.init(args)
def __setattr__(self, item, value):
self.__check_type(item, value)
self.__dict__[item] = value
def check_integrity(self):
for attr, value in self.__dict__.items():
self.__check_type(attr, value)
return True
|