@@ -24,6 +24,8 @@ file to download for a package, given a requirement:
24
24
is an HTML page of anchor links.
25
25
2. Collect together all of the links (e.g. by parsing the anchor links
26
26
from the HTML pages) and create ``Link `` objects from each of these.
27
+ The :ref: `LinkCollector <link-collector-class >` class is responsible
28
+ for both this step and the previous.
27
29
3. Determine which of the links are minimally relevant, using the
28
30
:ref: `LinkEvaluator <link-evaluator-class >` class. Create an
29
31
``InstallationCandidate `` object (aka candidate for install) for each
@@ -39,6 +41,7 @@ The remainder of this section is organized by documenting some of the
39
41
classes inside ``index.py ``, in the following order:
40
42
41
43
* the main :ref: `PackageFinder <package-finder-class >` class,
44
+ * the :ref: `LinkCollector <link-collector-class >` class,
42
45
* the :ref: `LinkEvaluator <link-evaluator-class >` class,
43
46
* the :ref: `CandidateEvaluator <candidate-evaluator-class >` class,
44
47
* the :ref: `CandidatePreferences <candidate-preferences-class >` class, and
@@ -95,18 +98,47 @@ links.
95
98
One of ``PackageFinder ``'s main top-level methods is
96
99
``find_best_candidate() ``. This method does the following two things:
97
100
98
- 1. Calls its ``find_all_candidates() `` method, which reads and parses all the
99
- index URL's provided by the user, constructs a :ref: `LinkEvaluator
100
- <link-evaluator-class>` object to filter out some of those links, and then
101
- returns a list of ``InstallationCandidates `` (aka candidates for install).
102
- This corresponds to steps 1-3 of the :ref: `Overview <index-py-overview >`
103
- above.
101
+ 1. Calls its ``find_all_candidates() `` method, which gathers all
102
+ possible package links by reading and parsing the index URL's and
103
+ locations provided by the user (the :ref: `LinkCollector
104
+ <link-collector-class>` class's ``collect_links() `` method), constructs a
105
+ :ref: `LinkEvaluator <link-evaluator-class >` object to filter out some of
106
+ those links, and then returns a list of ``InstallationCandidates `` (aka
107
+ candidates for install). This corresponds to steps 1-3 of the
108
+ :ref: `Overview <index-py-overview >` above.
104
109
2. Constructs a ``CandidateEvaluator `` object and uses that to determine
105
110
the best candidate. It does this by calling the ``CandidateEvaluator ``
106
111
class's ``compute_best_candidate() `` method on the return value of
107
112
``find_all_candidates() ``. This corresponds to steps 4-5 of the Overview.
108
113
109
114
115
+ .. _link-collector-class :
116
+
117
+ The ``LinkCollector `` class
118
+ ***************************
119
+
120
+ The :ref: `LinkCollector <link-collector-class >` class is the class
121
+ responsible for collecting the raw list of "links" to package files
122
+ (represented as ``Link `` objects). An instance of the class accesses the
123
+ various `PEP 503 `_ HTML "simple repository" pages, parses their HTML,
124
+ extracts the links from the anchor elements, and creates ``Link `` objects
125
+ from that information. The ``LinkCollector `` class is "unintelligent" in that
126
+ it doesn't do any evaluation of whether the links are relevant to the
127
+ original requirement; it just collects them.
128
+
129
+ The ``LinkCollector `` class takes into account the user's :ref: `--find-links
130
+ <--find-links>`, :ref: `--extra-index-url <--extra-index-url >`, and related
131
+ options when deciding which locations to collect links from. The class's main
132
+ method is the ``collect_links() `` method. The :ref: `PackageFinder
133
+ <package-finder-class>` class invokes this method as the first step of its
134
+ ``find_all_candidates() `` method.
135
+
136
+ The ``LinkCollector `` class is the only class in the ``index.py `` module that
137
+ makes network requests and is the only class in the module that depends
138
+ directly on ``PipSession ``, which stores pip's configuration options and
139
+ state for making requests.
140
+
141
+
110
142
.. _link-evaluator-class :
111
143
112
144
The ``LinkEvaluator `` class
@@ -191,7 +223,8 @@ The ``BestCandidateResult`` class
191
223
The ``BestCandidateResult `` class is a convenience "container" class that
192
224
encapsulates the result of finding the best candidate for a requirement.
193
225
(By "container" we mean an object that simply contains data and has no
194
- business logic or state-changing methods of its own.)
226
+ business logic or state-changing methods of its own.) It stores not just the
227
+ final result but also intermediate values used to determine the result.
195
228
196
229
The class is the return type of both the ``CandidateEvaluator `` class's
197
230
``compute_best_candidate() `` method and the ``PackageFinder `` class's
0 commit comments