class Payments(BrowserView, Location):
    interface.implements(IBrowserPublisher, IEnumerableMapping)

    __name__ = u'attachments'

    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.payments = IPayableExtension(context).payments

    def publishTraverse(self, request, name):
        attach = self.payments.get(name.lower())

        if attach is None:
            raise NotFound(self, name, request)

        return LocationProxy(attach, self, name)

    def browserDefault(self, request):
        return empty, ()

    def keys(self):
        return self.payments.keys()

    def __iter__(self):
        return iter(self.payments)

    def values(self):
        return self.payments.values()

    def items(self):
        return self.payments.items()

    def __len__(self):
        return len(self.payments)

    def get(self, key, default=None):
        try:
            return self[key]
        except KeyError:
            return default

    def __getitem__(self, name):
        configlet = IPayableExtension(self.context)

        attach = configlet.payments.get(name)

        if resource is None:
            raise KeyError(name)

        return LocationProxy(attach, self, name)
 def __init__(self, context, request):
     self.context = context
     self.request = request
     self.payments = IPayableExtension(context).payments