mercurial/utils/interfaceutil.py
author Yuya Nishihara <yuya@tcha.org>
Mon, 10 Sep 2018 22:34:19 +0900
changeset 39538 238a1480d7ad
parent 37810 856f381ad74b
permissions -rw-r--r--
ancestor: use heapreplace() in place of heappop/heappush() This should be slightly faster. Overall perfancestors result:: cpython nginx mercurial ------------- ---------------- ---------------- ---------------- b6db2e80a9ce^ 0.103461 0.006303 0.035716 8eb2145ff0fb 0.192307 (x1.86) 0.012115 (x1.92) 0.052135 (x1.46) this patch 0.139986 (x1.35) 0.006389 (x1.01) 0.037176 (x1.04)

# 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