view mercurial/interfaces/util.py @ 43286:f8c114f20d2d

rust-cpython: require GIL to borrow immutable reference from PySharedRefCell Since the inner value may be leaked, we probably need GIL to guarantee that there's no data race. inner(py).borrow() is replaced with inner_shared(py).borrow(), which basically means any PySharedRefCell data should be accessed through PySharedRef wrapper.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 21 Sep 2019 17:15:50 +0900
parents 687b865b95ad
children 6000f5b25c9b
line wrap: on
line source

# util.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(b'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__=b''):
            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