Skip to content

Commit

Permalink
[lazy_extractor] Import actual class if an attribute is accessed
Browse files Browse the repository at this point in the history
Now all core tests pass with lazy extraction enabled
  • Loading branch information
pukkandan committed Aug 22, 2021
1 parent 1151c40 commit 5bc4a65
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions devscripts/lazy_load_template.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
#!/usr/bin/env python3
# coding: utf-8
from __future__ import unicode_literals

import re


class LazyLoadExtractor(object):
class LazyLoadMetaClass(type):
def __getattr__(cls, name):
return getattr(cls._get_real_class(), name)


class LazyLoadExtractor(metaclass=LazyLoadMetaClass):
_module = None

@classmethod
def _get_real_class(cls):
if '__real_class' not in cls.__dict__:
mod = __import__(cls._module, fromlist=(cls.__name__,))
cls.__real_class = getattr(mod, cls.__name__)
return cls.__real_class

def __new__(cls, *args, **kwargs):
mod = __import__(cls._module, fromlist=(cls.__name__,))
real_cls = getattr(mod, cls.__name__)
real_cls = cls._get_real_class()
instance = real_cls.__new__(real_cls)
instance.__init__(*args, **kwargs)
return instance

0 comments on commit 5bc4a65

Please sign in to comment.