Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Handle all your optional dependencies with a single call!

License

NotificationsYou must be signed in to change notification settings

ManderaGeneral/generalimport

Repository files navigation

Handle all your optional dependencies with a single call!

Table of Contents

generalimport├─Dependency Diagram for ManderaGeneral├─Installation showing dependencies├─Information├─Examples│  ├─Minimal Example│  ├─Tests Showcase│  ├─Recommended Setup│  └─How It Works├─Attributes└─Contributions

Dependency Diagram for ManderaGeneral

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
Loading

Installation showing dependencies

pip installgeneralimport
No dependencies✔️

Information

PackageVerLatest ReleasePythonPlatformCover
generalimport0.5.22024-01-24 07:20 CET3.8,3.9,3.10,3.11,3.12Windows, Ubuntu97.2 %

Examples

Minimal Example

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.

Tests Showcase

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.

Recommended Setup

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 overridepandas internal custom optional dependency handling

How It Works

  • Whengeneralimport is 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 raisesgeneralimport.MissingDependencyException.
  • This exception has the 'skip-exceptions' fromunittest andpytest as bases, which means that tests will automatically be skipped.

Attributes

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

Contributions

Issue-creation, discussions and pull requests are most welcome!

Generated 2024-01-24 07:20 CET for commitmaster.

Packages

No packages published

Contributors3

  •  
  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp