Skip to content

Add Python repository, remote and package pages (upstream #371) with the fork's URL and save rules - #20

Merged
aevnsvi merged 15 commits into
mainfrom
ups-371-python
Nov 2, 2026
Merged

aevnsvi merged 15 commits into
mainfrom
ups-371-python

Conversation

@aevnsvi

@aevnsvi aevnsvi commented Nov 2, 2026

Copy link
Copy Markdown

What this changes

Takes the Python repository, remote and package pages from the upstream pull request
pulp#371 and brings them to the rules the file, deb and rpm pages
already follow. Content of the upstream pull request taken: head commit
dde91d0078d7ec8d5c1753df6dea1ce284a3e80d. It sits on top of the RPM pages (upstream pulp#370, already
on main).

Upstream commits

8 of the 10 upstream commits are cherry-picked with -x: each keeps its upstream author and has a
"(cherry picked from commit ...)" line naming the upstream commit. The upstream diff was read in
full before anything was fetched or built: it changes only TypeScript under src/, the README and
the Cypress smoke file, no dependency, lockfile, script, workflow or config, and every request goes
through the existing Pulp API wrapper.

Conflicts with the RPM pages and the fork's code were resolved by merging both sides:

  • plugin lookup table: Python and RPM imports and cases side by side
  • action exports: Python and RPM lines together
  • remote form: plugin type and disabled-fields switch list both plugins, and the download policy
    block and the Python fields block both stay
  • sync modal: the sync policy props and the optimize toggle switch both stay
  • repository form: the fork's props are kept and Python is added to the plugin type
  • distribution list component: the fork's version kept
  • README: Python and RPM lines

Two commits are not in the history: the one that only touched the Cypress smoke tests (the fork has
no Cypress; its assertions are ported to the Playwright smoke test below) and the one that hides the
ansible-only private option for Python, which became empty because the fork already limits that
field to ansible repositories.

Commits added on top of the picks

  • Treat Python like the other plugins when finding distributions: Python distributions serve the
    repository directly, so no publication is needed to count as served.
  • Create Python repositories through the shared create flow: every version is kept by default, a
    distribution is created only when the box is ticked after the name and base path were checked, and
    a refused distribution is reported once and never retried under another name.
  • Show served URLs on the Python repository pages: every distribution serving the repository is
    listed with the URL the server reports instead of one built from a base path, the pip line uses it,
    and a failed load is shown instead of "None".
  • Drop the per-row repository column from the Python package list: it sent one request per row.
  • Let Python remotes choose the download policy: new remotes start on on demand and an existing
    remote keeps its policy. Includes and excludes are sent trimmed, without blank lines and in the
    order typed; a cleared field is sent as an empty list.
  • Check the Python pages in the smoke run.

Delete, sync, revert and update for Python keep the upstream behaviour for now.

How it is tested

  • npx vitest run src/containers/python-repository src/containers/python-remote src/containers/python src/utilities
    (request sequences of the create page, served URLs, no repository request from the package list,
    policy default and the includes and excludes bodies)
  • npm test && npm run lint:ts && npm run lint:e2e && npx prettier -l . && npx eslint src/ config/ e2e/ scripts/ && npx ls-lint && node scripts/check-public.mjs --all
  • CI smoke on the upstream Pulp image

Nparente27 and others added 15 commits November 2, 2026 12:32
(cherry picked from commit 432f691)
pulp_python distributions serve the repository directly, so a
repository-bound Python distribution is served without a publication and
no publication endpoint is scanned for it.
A new Python repository keeps every version, offers a distribution only
when the box is ticked, checks the name and base path before writing, and
reports a refused distribution once instead of retrying it under another
name.
The detail page and its tabs list every distribution serving the
repository with the URL the server reports instead of a URL built from a
base path, and say why when the distributions could not be loaded.
The column sent one repository lookup per package row, and Pulp has no
filter that answers it for a whole page. A repository's own Packages tab
lists the packages it holds.
A new Python remote starts on the on demand policy, the form offers all
three policies, and an existing remote keeps the policy it has. Includes
and excludes are sent trimmed, without blank lines and in the order
typed, and a cleared field is sent as an empty list.
The smoke run opens the Python repository, remote and package pages and
looks for the substitution, reject, includes, excludes, keep latest,
package type and download policy fields.
@aevnsvi
aevnsvi merged commit 0d34dda into main Nov 2, 2026
6 checks passed
@aevnsvi
aevnsvi deleted the ups-371-python branch November 2, 2026 11:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants