mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-09 14:13:35 +00:00
Lazy load yubikey module to avoid lib errors when not in use
This commit is contained in:
@ -16,8 +16,12 @@ extra_files += [('cbcm-v1.1beta1.json', '.')]
|
|||||||
extra_files += [('contactdelegation-v1.json', '.')]
|
extra_files += [('contactdelegation-v1.json', '.')]
|
||||||
extra_files += [('versionhistory-v1.json', '.')]
|
extra_files += [('versionhistory-v1.json', '.')]
|
||||||
|
|
||||||
|
hidden_imports = [
|
||||||
|
'gam.auth.yubikey',
|
||||||
|
]
|
||||||
|
|
||||||
a = Analysis(['gam/__main__.py'],
|
a = Analysis(['gam/__main__.py'],
|
||||||
hiddenimports=[],
|
hiddenimports=hidden_imports,
|
||||||
hookspath=None,
|
hookspath=None,
|
||||||
excludes=['FixTk', 'tcl', 'tk', '_tkinter', 'tkinter', 'Tkinter'],
|
excludes=['FixTk', 'tcl', 'tk', '_tkinter', 'tkinter', 'Tkinter'],
|
||||||
datas=extra_files,
|
datas=extra_files,
|
||||||
|
@ -46,7 +46,6 @@ from cryptography.x509.oid import NameOID
|
|||||||
|
|
||||||
import gam.auth.oauth
|
import gam.auth.oauth
|
||||||
from gam import auth
|
from gam import auth
|
||||||
from gam.auth import yubikey
|
|
||||||
from gam import controlflow
|
from gam import controlflow
|
||||||
from gam import display
|
from gam import display
|
||||||
from gam import fileutils
|
from gam import fileutils
|
||||||
@ -84,6 +83,7 @@ from gam import transport
|
|||||||
from gam import utils
|
from gam import utils
|
||||||
from gam.var import *
|
from gam.var import *
|
||||||
|
|
||||||
|
yubikey = utils.LazyLoader('yubikey', globals(), 'gam.auth.yubikey')
|
||||||
from passlib.hash import sha512_crypt
|
from passlib.hash import sha512_crypt
|
||||||
|
|
||||||
if platform.system() == 'Linux':
|
if platform.system() == 'Linux':
|
||||||
|
@ -6,8 +6,9 @@ import os
|
|||||||
from google.auth.jwt import Credentials as JWTCredentials
|
from google.auth.jwt import Credentials as JWTCredentials
|
||||||
|
|
||||||
import gam
|
import gam
|
||||||
|
from gam import utils
|
||||||
|
|
||||||
from gam.auth import oauth
|
from gam.auth import oauth
|
||||||
from gam.auth import yubikey
|
|
||||||
from gam.var import _FN_OAUTH2_TXT
|
from gam.var import _FN_OAUTH2_TXT
|
||||||
from gam.var import _FN_OAUTH2SERVICE_JSON
|
from gam.var import _FN_OAUTH2SERVICE_JSON
|
||||||
from gam.var import GC_OAUTH2_TXT
|
from gam.var import GC_OAUTH2_TXT
|
||||||
@ -15,6 +16,7 @@ from gam.var import GC_OAUTH2SERVICE_JSON
|
|||||||
from gam.var import GC_ENABLE_DASA
|
from gam.var import GC_ENABLE_DASA
|
||||||
from gam.var import GC_Values
|
from gam.var import GC_Values
|
||||||
|
|
||||||
|
yubikey = utils.LazyLoader('yubikey', globals(), 'gam.auth.yubikey')
|
||||||
# TODO: Move logic that determines file name into this module. We should be able
|
# TODO: Move logic that determines file name into this module. We should be able
|
||||||
# to discover the file location without accessing a private member or waiting
|
# to discover the file location without accessing a private member or waiting
|
||||||
# for a global initialization.
|
# for a global initialization.
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import division
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
@ -5,8 +9,10 @@ import time
|
|||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
from html.entities import name2codepoint
|
from html.entities import name2codepoint
|
||||||
from html.parser import HTMLParser
|
from html.parser import HTMLParser
|
||||||
|
import importlib
|
||||||
import json
|
import json
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
|
import types
|
||||||
|
|
||||||
from gam import controlflow
|
from gam import controlflow
|
||||||
from gam import fileutils
|
from gam import fileutils
|
||||||
@ -14,6 +20,41 @@ from gam import transport
|
|||||||
from gam.var import *
|
from gam.var import *
|
||||||
|
|
||||||
|
|
||||||
|
class LazyLoader(types.ModuleType):
|
||||||
|
"""Lazily import a module, mainly to avoid pulling in large dependencies.
|
||||||
|
|
||||||
|
`contrib`, and `ffmpeg` are examples of modules that are large and not always
|
||||||
|
needed, and this allows them to only be loaded when they are used.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# The lint error here is incorrect.
|
||||||
|
def __init__(self, local_name, parent_module_globals, name): # pylint: disable=super-on-old-class
|
||||||
|
self._local_name = local_name
|
||||||
|
self._parent_module_globals = parent_module_globals
|
||||||
|
|
||||||
|
super(LazyLoader, self).__init__(name)
|
||||||
|
|
||||||
|
def _load(self):
|
||||||
|
# Import the target module and insert it into the parent's namespace
|
||||||
|
module = importlib.import_module(self.__name__)
|
||||||
|
self._parent_module_globals[self._local_name] = module
|
||||||
|
|
||||||
|
# Update this object's dict so that if someone keeps a reference to the
|
||||||
|
# LazyLoader, lookups are efficient (__getattr__ is only called on lookups
|
||||||
|
# that fail).
|
||||||
|
self.__dict__.update(module.__dict__)
|
||||||
|
|
||||||
|
return module
|
||||||
|
|
||||||
|
def __getattr__(self, item):
|
||||||
|
module = self._load()
|
||||||
|
return getattr(module, item)
|
||||||
|
|
||||||
|
def __dir__(self):
|
||||||
|
module = self._load()
|
||||||
|
return dir(module)
|
||||||
|
|
||||||
|
|
||||||
class _DeHTMLParser(HTMLParser):
|
class _DeHTMLParser(HTMLParser):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
Reference in New Issue
Block a user