From c66e7b3e6eaabdb026389ec9530313bdb2199d8c Mon Sep 17 00:00:00 2001 From: Jeremy Fincher Date: Sat, 9 Apr 2005 17:04:27 +0000 Subject: [PATCH] Added a utils.python module for python-esque things. --- src/utils/__init__.py | 1 + src/utils/python.py | 53 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/utils/python.py diff --git a/src/utils/__init__.py b/src/utils/__init__.py index c11a9c361..b18702384 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -102,5 +102,6 @@ import seq import str import file import iter +import python # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: diff --git a/src/utils/python.py b/src/utils/python.py new file mode 100644 index 000000000..11af3113d --- /dev/null +++ b/src/utils/python.py @@ -0,0 +1,53 @@ +### +# Copyright (c) 2005, Jeremiah Fincher +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the author of this software nor the name of +# contributors to this software may be used to endorse or promote products +# derived from this software without specific prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +### + +class Object(object): + def __ne__(self, other): + return not self == other + +class TupleSubclass(type): + def __new__(cls, name, bases, dict): + assert tuple in bases + assert '__attrs__' in dict + for (i, attr) in enumerate(dict['__attrs__']): + dict[attr] = property(lambda self, i=i: self[i]) + del dict['__attrs__'] + # XXX Check the length of the iterable given. + return super(TupleSubclass, cls).__new__(cls, name, bases, dict) + + +class Acquire(object): + # Mixin for acquiring attributes from parents. + def __init__(self, attr): + self.__parent = attr + + def __getattr__(self, attr): + return getattr(self.__parent, attr) + +# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: