Source code for bridgedb.interfaces
# -*- coding: utf-8 ; test-case-name: bridgedb.test.test_interfaces ; -*-
#_____________________________________________________________________________
#
# This file is part of BridgeDB, a Tor bridge distribution system.
#
# :authors: Isis Lovecruft 0xA3ADB67A2CDB8B35 <isis@torproject.org>
# please also see AUTHORS file
# :copyright: (c) 2007-2015, The Tor Project, Inc.
# (c) 2014-2015, Isis Lovecruft
# :license: see LICENSE for licensing information
#_____________________________________________________________________________
"""All available `Zope`_ interfaces in BridgeDB.
.. _Zope: http://docs.zope.org/zope.interface/index.html
"""
from zope.interface import Interface
from zope.interface import Attribute
from zope.interface import implementer
[docs]class IName(Interface):
"""An interface specification for a named object."""
name = Attribute("A string which identifies this object.")
@implementer(IName)
[docs]class Named(object):
"""A named object."""
#: The character(s) used to join child :class:`Named` object's names with
#: our name.
separator = ' '
def __init__(self):
self._name = str()
@property
def name(self):
"""Get the name of this object.
:rtype: str
:returns: A string which identifies this object.
"""
return self._name
@name.setter
def name(self, name):
"""Set a **name** for identifying this object.
This is used to identify the object in log messages; the **name**
doesn't necessarily need to be unique. Other :class:`Named` objects
which are properties of a :class:`Named` object may inherit their
parents' **name**s.
>>> from bridgedb.distribute import Named
>>> named = Named()
>>> named.name = 'Excellent Super-Awesome Thing'
>>> named.name
'Excellent Super-Awesome Thing'
:param str name: A name for this object.
"""
self._name = name
for attr in self.__dict__.values():
if IName.providedBy(attr):
attr.name = self.separator.join([name, attr.name])