Commit 2a24c9cc authored by Simon Feltman's avatar Simon Feltman Committed by Martin Pitt
Browse files

Move TYPE constants from _gobject to GObject

Clear out TYPE constants from _gobject/__init__.py and move them into the
GObject overrides. Disperse class imports among modules that use them instead
of using _gobject/__init__.py as a staging area (e.g. GInterface).

https://bugzilla.gnome.org/show_bug.cgi?id=687487
parent c2aa6f0d
......@@ -28,45 +28,15 @@ if 'gobject' in sys.modules:
raise ImportError('When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject".')
from . import _gobject
from . import constants
from . import propertyhelper
from . import signalhelper
GInterface = _gobject.GInterface
GObject = _gobject.GObject
GType = _gobject.GType
TYPE_INVALID = _gobject.TYPE_INVALID
_PyGObject_API = _gobject._PyGObject_API
pygobject_version = _gobject.pygobject_version
TYPE_NONE = constants.TYPE_NONE
TYPE_INTERFACE = constants.TYPE_INTERFACE
TYPE_CHAR = constants.TYPE_CHAR
TYPE_UCHAR = constants.TYPE_UCHAR
TYPE_BOOLEAN = constants.TYPE_BOOLEAN
TYPE_INT = constants.TYPE_INT
TYPE_UINT = constants.TYPE_UINT
TYPE_LONG = constants.TYPE_LONG
TYPE_ULONG = constants.TYPE_ULONG
TYPE_INT64 = constants.TYPE_INT64
TYPE_UINT64 = constants.TYPE_UINT64
TYPE_ENUM = constants.TYPE_ENUM
TYPE_FLAGS = constants.TYPE_FLAGS
TYPE_FLOAT = constants.TYPE_FLOAT
TYPE_DOUBLE = constants.TYPE_DOUBLE
TYPE_STRING = constants.TYPE_STRING
TYPE_POINTER = constants.TYPE_POINTER
TYPE_BOXED = constants.TYPE_BOXED
TYPE_PARAM = constants.TYPE_PARAM
TYPE_OBJECT = constants.TYPE_OBJECT
TYPE_PYOBJECT = constants.TYPE_PYOBJECT
TYPE_GTYPE = constants.TYPE_GTYPE
TYPE_UNICHAR = constants.TYPE_UNICHAR
TYPE_STRV = constants.TYPE_STRV
TYPE_VARIANT = constants.TYPE_VARIANT
class GObjectMeta(type):
"Metaclass for automatically registering GObject classes"
def __init__(cls, name, bases, dict_):
......
......@@ -21,7 +21,7 @@
from . import _gobject
# TYPE_INVALID defined in gobjectmodule.c
TYPE_INVALID = _gobject.TYPE_INVALID
TYPE_NONE = _gobject.type_from_name('void')
TYPE_INTERFACE = _gobject.type_from_name('GInterface')
TYPE_CHAR = _gobject.type_from_name('gchar')
......
......@@ -27,7 +27,7 @@ import types
_have_py3 = (sys.version_info[0] >= 3)
from . import _glib, _gobject
from . import _glib
try:
maketrans = ''.maketrans
except AttributeError:
......@@ -60,6 +60,18 @@ from .types import \
StructMeta, \
Function
from ._gobject._gobject import \
GInterface, \
GObject
from ._gobject.constants import \
TYPE_NONE, \
TYPE_BOXED, \
TYPE_POINTER, \
TYPE_ENUM, \
TYPE_FLAGS
repository = Repository.get_default()
# Cache of IntrospectionModules that have been loaded.
......@@ -77,7 +89,7 @@ def get_parent_for_object(object_info):
# Workaround for GObject.Object and GObject.InitiallyUnowned.
if namespace == 'GObject' and name == 'Object' or name == 'InitiallyUnowned':
return _gobject.GObject
return GObject
module = __import__('gi.repository.%s' % namespace, fromlist=[name])
return getattr(module, name)
......@@ -129,16 +141,16 @@ class IntrospectionModule(object):
if wrapper is None:
if info.is_flags():
if g_type.is_a(_gobject.TYPE_FLAGS):
if g_type.is_a(TYPE_FLAGS):
wrapper = flags_add(g_type)
else:
assert g_type == _gobject.TYPE_NONE
assert g_type == TYPE_NONE
wrapper = flags_register_new_gtype_and_add(info)
else:
if g_type.is_a(_gobject.TYPE_ENUM):
if g_type.is_a(TYPE_ENUM):
wrapper = enum_add(g_type)
else:
assert g_type == _gobject.TYPE_NONE
assert g_type == TYPE_NONE
wrapper = enum_register_new_gtype_and_add(info)
wrapper.__info__ = info
......@@ -154,14 +166,14 @@ class IntrospectionModule(object):
value_name = value_info.get_name_unescaped().translate(ascii_upper_trans)
setattr(wrapper, value_name, wrapper(value_info.get_value()))
if g_type != _gobject.TYPE_NONE:
if g_type != TYPE_NONE:
g_type.pytype = wrapper
elif isinstance(info, RegisteredTypeInfo):
g_type = info.get_g_type()
# Check if there is already a Python wrapper.
if g_type != _gobject.TYPE_NONE:
if g_type != TYPE_NONE:
type_ = g_type.pytype
if type_ is not None:
self.__dict__[name] = type_
......@@ -178,13 +190,13 @@ class IntrospectionModule(object):
bases = (CCallback,)
metaclass = GObjectMeta
elif isinstance(info, InterfaceInfo):
bases = (_gobject.GInterface,)
bases = (GInterface,)
metaclass = GObjectMeta
elif isinstance(info, (StructInfo, UnionInfo)):
if g_type.is_a(_gobject.TYPE_BOXED):
if g_type.is_a(TYPE_BOXED):
bases = (Boxed,)
elif (g_type.is_a(_gobject.TYPE_POINTER) or
g_type == _gobject.TYPE_NONE or
elif (g_type.is_a(TYPE_POINTER) or
g_type == TYPE_NONE or
g_type.fundamental == g_type):
bases = (Struct,)
else:
......@@ -202,7 +214,7 @@ class IntrospectionModule(object):
wrapper = metaclass(name, bases, dict_)
# Register the new Python wrapper.
if g_type != _gobject.TYPE_NONE:
if g_type != TYPE_NONE:
g_type.pytype = wrapper
elif isinstance(info, FunctionInfo):
......
......@@ -2,7 +2,10 @@ import types
import warnings
import functools
from gi import _gobject, PyGIDeprecationWarning
from gi import PyGIDeprecationWarning
from gi._gobject.constants import \
TYPE_NONE, \
TYPE_INVALID
# support overrides in different directories than our gi module
from pkgutil import extend_path
......@@ -33,8 +36,8 @@ class _Registry(dict):
raise KeyError('You have tried to modify the registry outside of the overrides module. This is not allowed')
g_type = info.get_g_type()
assert g_type != _gobject.TYPE_NONE
if g_type != _gobject.TYPE_INVALID:
assert g_type != TYPE_NONE
if g_type != TYPE_INVALID:
g_type.pytype = value
# strip gi.overrides from module name
......
......@@ -24,6 +24,8 @@ from __future__ import absolute_import
import sys
from . import _gobject
from ._gobject._gobject import GInterface
from ._gobject.constants import TYPE_INVALID
from ._gi import \
InterfaceInfo, \
......@@ -181,8 +183,8 @@ def find_vfunc_info_in_interface(bases, vfunc_name):
# This can be seen in IntrospectionModule.__getattr__() in module.py.
# We do not need to search regular classes here, only wrapped interfaces.
# We also skip GInterface, because it is not wrapped and has no __info__ attr.
if base is _gobject.GInterface or\
not issubclass(base, _gobject.GInterface) or\
if base is GInterface or\
not issubclass(base, GInterface) or\
not isinstance(base.__info__, InterfaceInfo):
continue
......@@ -260,7 +262,7 @@ def mro(C):
for subclass_bases in bases_of_subclasses:
candidate = subclass_bases[0]
not_head = [s for s in bases_of_subclasses if candidate in s[1:]]
if not_head and _gobject.GInterface not in candidate.__bases__:
if not_head and GInterface not in candidate.__bases__:
candidate = None # conflict, reject candidate
else:
break
......@@ -287,7 +289,7 @@ class StructMeta(type, MetaClassHelper):
# Avoid touching anything else than the base class.
g_type = cls.__info__.get_g_type()
if g_type != _gobject.TYPE_INVALID and g_type.pytype is not None:
if g_type != TYPE_INVALID and g_type.pytype is not None:
return
cls._setup_fields()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment