- Notifications
You must be signed in to change notification settings - Fork2
Handle all your optional dependencies with a single call!
License
ManderaGeneral/generalimport
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Handle all your optional dependencies with a single call!
generalimport├─Dependency Diagram for ManderaGeneral├─Installation showing dependencies├─Information├─Examples│ ├─Minimal Example│ ├─Tests Showcase│ ├─Recommended Setup│ └─How It Works├─Attributes└─Contributions
flowchart LR0([import]) --> 3([file])0([import]) --> 2([library])1([tool]) --> 2([library])3([file]) --> 4([packager])2([library]) --> 4([packager])2([library]) --> 3([file])click 0 "https://github.com/ManderaGeneral/generalimport"click 1 "https://github.com/ManderaGeneral/generaltool"click 2 "https://github.com/ManderaGeneral/generallibrary"click 3 "https://github.com/ManderaGeneral/generalfile"click 4 "https://github.com/ManderaGeneral/generalpackager"style 0 stroke:#482| Package | Ver | Latest Release | Python | Platform | Cover |
|---|---|---|---|---|---|
| generalimport | 0.5.2 | 2024-01-24 07:20 CET | 3.8,3.9,3.10,3.11,3.12 | Windows, Ubuntu | 97.2 % |
Callgeneralimport before importing any optional dependencies.
fromgeneralimportimportgeneralimportgeneralimport("notinstalled")fromnotinstalledimportmissing_func# No errormissing_func()# Error occurs here
MissingDependencyException: Optional dependency 'notinstalled' was used but it isn't installed.Imports fail when they areused,not imported.
This means you don't need to keep checking if the package is installed before importing it.Simply import your optional package and use it like you would any package and let it fail wherever it fails, with a nice error message.
The beauty of this package is that the error raised isn't just any exception.It has two base classes:unittest.case.SkipTest and_pytest.outcomes.Skipped (If available).
This means that if a test method uses an uninstalled optional package then that test is automatically skipped.This means no more manual skip decorators for optional dependencies!
fromgeneralimportimportgeneralimportgeneralimport("optional_uninstalled_package")fromoptional_uninstalled_packageimportmissing_funcfromunittestimportTestCaseclassMyTest(TestCase):deftest_missing_func(self):self.assertEqual(3,missing_func(1,2))
Ran 1 test in 0.002sOK (skipped=1)Skipped: Optional dependency 'optional_uninstalled_package' was used but it isn't installed.Put this in your__init__.py file to affectall imports inside the folder__init__.py resides in.
fromgeneralimportimportgeneralimportgeneralimport("your","optional","dependencies")
generalimport("*") makes it handleall names (If missing of course)
generalimport("*")._scope = None disables the scope
- Makes it handle missing imports anywhere
- For example it will override
pandasinternal custom optional dependency handling
- When
generalimportis instantiated it creates a new importer forsys.meta_path. - This importer will return 'fake' modules for matching names and scope.
- The scope ensures only your own imports are faked.
- The fake module will recursively return a FakeModule instance when asked for an attribute.
- When used in any way (__call__, __add__, __str__ etc) it raises
generalimport.MissingDependencyException. - This exception has the 'skip-exceptions' from
unittestandpytestas bases, which means that tests will automatically be skipped.
Module: generalimport├─Class: DynamicDunder│ ├─Method: result│ └─Method: trigger├─Class: FakeModule│ ├─Method: error_func│ └─Method: error_func_class├─Class: GeneralImporter│ ├─Method: catch│ ├─Method: create_module│ ├─Method: exec_module│ └─Method: find_spec├─Class: ImportCatcher│ └─Method: handle├─Class: MissingDependencyException├─Class: MissingOptionalDependency├─Function: fake_module_check├─Function: generalimport├─Function: get_importer├─Function: get_installed_modules_names├─Function: get_spec├─Function: import_module├─Function: is_imported├─Function: module_is_installed├─Function: module_is_namespace├─Function: module_name_is_namespace├─Function: reset_generalimport└─Function: spec_is_namespace
About
Handle all your optional dependencies with a single call!
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.