You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Given that, I think some work should be done to make the boundary between public and private parts of the API here clearer.
Approach
use __all__ entries in every module of the library
to limit which things should be imported with * imports
use an __all__ entry in the top-level __init__.py
to define what is importable directly from the rapids_dependency_file_generator module without needing to know about submodules
to limit what is imported by from rapids_dependency_file_generator import *
prefix all internal-only functions, classes, methods, and other objects with _
Benefits of this work
Clarifies the boundary between public and private, reducing the need for tight coordination between rapids-build-backend and rapids-dependency-file-generator for some types of changes.
Makes it easier for tools to help enforce those boundaries:
sphinx autodoc will by default only auto-generate documentation for entries in __all__ (docs)
That means that things like rapids-build-backend that want to import other things have imported coupled to the exact file layout in this project, like this.
And so we could freely re-arrange the modules inside this library without breaking rapids-build-backend.
Exposing submodule import paths is really helpful in projects with large APIs like sklearn or scipy, but for this small library I think it'd be better to push downstream consumers to just import from the top-level namespace.
submodules are re-exporting all their imports (click me)
Details
The ongoing work on
rapids-build-backend
relies on usingrapids-dependency-file-generator
as an importable module, not a CLI, like thisref: https://github.com/rapidsai/rapids-build-backend/pull/17/files#r1542068869
Given that, I think some work should be done to make the boundary between public and private parts of the API here clearer.
Approach
__all__
entries in every module of the library*
imports__all__
entry in the top-level__init__.py
rapids_dependency_file_generator
module without needing to know about submodulesfrom rapids_dependency_file_generator import *
_
Benefits of this work
Clarifies the boundary between public and private, reducing the need for tight coordination between
rapids-build-backend
andrapids-dependency-file-generator
for some types of changes.Makes it easier for tools to help enforce those boundaries:
sphinx
autodoc will by default only auto-generate documentation for entries in__all__
(docs)_
(e.g.ruff
's pylintimport-private-name
check))Other notes
Consider the following.
only '__version__' is importable from the top-level namespace today (click me)
Only
__version__
is exported from the top-level moduledependency-file-generator/src/rapids_dependency_file_generator/__init__.py
Lines 3 to 5 in 795c0c3
That means that things like
rapids-build-backend
that want to import other things have imported coupled to the exact file layout in this project, like this.In my opinion, it'd be better to re-export that stuff from the main module, so that
rapids-build-backend
could do thisAnd so we could freely re-arrange the modules inside this library without breaking
rapids-build-backend
.Exposing submodule import paths is really helpful in projects with large APIs like
sklearn
orscipy
, but for this small library I think it'd be better to push downstream consumers to just import from the top-level namespace.submodules are re-exporting all their imports (click me)
Consider the following
It's technically possible right now to do something like this:
That should be discouraged, via an
__all__
entry insrc/rapids_dependency_file_generator/cli.py
(and all the other submodules).The text was updated successfully, but these errors were encountered: