view mercurial/utils/interfaceutil.py @ 41216:5cc5a5561c3f

revset: remove a rare usage of "%d" for a non-revision item In order to fix an important bug, we are about to narrow the semantic of "%d" in revset. This is one of the few exceptions that we need to get rid of before being able to fix the bug. See the later semantic narrowing changeset for full rationale on the semantic change.
author Boris Feld <boris.feld@octobus.net>
date Thu, 10 Jan 2019 15:57:13 +0100
parents 856f381ad74b
children
line wrap: on
line source

# interfaceutil.py - Utilities for declaring interfaces.
#
# Copyright 2018 Gregory Szorc <gregory.szorc@gmail.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

# zope.interface imposes a run-time cost due to module import overhead and
# bookkeeping for declaring interfaces. So, we use stubs for various
# zope.interface primitives unless instructed otherwise.

from __future__ import absolute_import

from .. import (
    encoding,
)

if encoding.environ.get('HGREALINTERFACES'):
    from ..thirdparty.zope import (
        interface as zi,
    )

    Attribute = zi.Attribute
    Interface = zi.Interface
    implementer = zi.implementer
else:
    class Attribute(object):
        def __init__(self, __name__, __doc__=''):
            pass

    class Interface(object):
        def __init__(self, name, bases=(), attrs=None, __doc__=None,
                 __module__=None):
            pass

    def implementer(*ifaces):
        def wrapper(cls):
            return cls

        return wrapper