summaryrefslogtreecommitdiff
path: root/Lib/importlib/NOTES
blob: 92e2841d9ce2d15eae41004eb6fb28646a580128 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
to do
/////

* Refactor source/bytecode finder/loader code such that bytecode support is a
  subclass of source support (makes it nicer for VMs that don't use CPython
  bytecode).

    + ExtensionFileFinder
    + PyFileFinder
    + PyPycFileFinder
    + PyFileLoader

        - get_code for source only
        - get_data
        - source_mtime
        - source_path

    + PyPycFileLoader(PyFileLoader)

        - get_code
        - bytecode_path
        - write_bytecode

* Implement PEP 302 protocol for loaders (should just be a matter of testing).

    + Source/bytecode.

* Public API left to expose (w/ docs!)

    + abc

        - Finder

            * find_module

        - Loader

            * load_module

        - (?) Importer(Finder, Loader)
        - ResourceLoader(Loader)

            * get_data

        - InspectLoader(Loader)

            * is_package
            * get_code
            * get_source

        - (?) SourceLoader(ResourceLoader)

            * source_path
            * bytecode_path
            * write_bytecode (not abstract)

    + util

        - set___package__ decorator

    + machinery

        - Extensions importers

            * ExtensionFinder
            * (?) Loader

        - Source/bytecode importers

            * SourceFinder
            * (?) Loader

    + test (Really want to worry about compatibility with future versions?)

        - abc

            * FinderTests [doc]
            * LoaderTests [doc]

* Remove ``import *`` from importlib.__init__.

* Remove __all__ from importlib._bootstrap.

* Add leading underscores to all objects in importlib._bootstrap that are not
  publicly exposed.

* Make sure that there is documentation *somewhere* fully explaining the
semantics of import that can be referenced from the package's documentation
(even if it is in the package documentation itself, although it might be best
in the language specification).

* Write benchmark suite.

* OPTIMIZE!

  + Fast path absolute name.
  + Fast path pulling from sys.modules.

* Bootstrap importlib as implementation of builtins.__import__

* Replace standard library modules.

  + imp
  + py_compile
  + compileall