Commit 8c175f22 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Merge branch 'fix/spelling-of-pypi' into 'master'

Fix spelling of PyPI, the Python Package Index

See merge request gitlab-org/gitlab!44058
parents bb607158 10e68d42
......@@ -82,7 +82,7 @@ export const PACKAGE_REGISTRY_TABS = [
type: PackageType.NUGET,
},
{
title: s__('PackageRegistry|PyPi'),
title: s__('PackageRegistry|PyPI'),
type: PackageType.PYPI,
},
];
......
......@@ -18,7 +18,7 @@ export const getPackageTypeLabel = packageType => {
case PackageType.NUGET:
return s__('PackageType|NuGet');
case PackageType.PYPI:
return s__('PackageType|PyPi');
return s__('PackageType|PyPI');
case PackageType.COMPOSER:
return s__('PackageType|Composer');
......
# frozen_string_literal: true
# Display package version data acording to PyPi
# Display package version data acording to PyPI
# Simple API: https://warehouse.pypa.io/api-reference/legacy/#simple-project-api
module Packages
module Pypi
......@@ -12,7 +12,7 @@ module Packages
@project = project
end
# Returns the HTML body for PyPi simple API.
# Returns the HTML body for PyPI simple API.
# Basically a list of package download links for a specific
# package
def body
......
---
title: Fix spelling of PyPI
merge_request: 44058
author: Peter Bittner (@bittner)
type: other
......@@ -181,7 +181,7 @@ successfully, you must replicate their data using some other means.
| [Maven Repository](../../../user/packages/maven_repository/index.md) | **Yes** (13.2) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default |
| [Conan Repository](../../../user/packages/conan_repository/index.md) | **Yes** (13.2) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default |
| [NuGet Repository](../../../user/packages/nuget_repository/index.md) | **Yes** (13.2) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default |
| [PyPi Repository](../../../user/packages/pypi_repository/index.md) | **Yes** (13.2) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default |
| [PyPI Repository](../../../user/packages/pypi_repository/index.md) | **Yes** (13.2) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default |
| [Composer Repository](../../../user/packages/composer_repository/index.md) | **Yes** (13.2) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default |
| [Versioned Terraform State](../../terraform_state.md) | **Yes** (13.5) | No | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_terraform_state_version_replication`, enabled by default |
| [External merge request diffs](../../merge_request_diffs.md) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/33817) | No | Via Object Storage provider if supported. Native Geo support (Beta). | |
......
......@@ -14,7 +14,7 @@ The Packages feature allows GitLab to act as a repository for the following:
| Software repository | Description | Available in GitLab version |
| ------------------- | ----------- | --------------------------- |
| [PyPi Repository](../../user/packages/pypi_repository/index.md) | The GitLab PyPi Repository enables every project in GitLab to have its own space to store [PyPi](https://pypi.org/) packages. | 12.10+ |
| [PyPI Repository](../../user/packages/pypi_repository/index.md) | The GitLab PyPI Repository enables every project in GitLab to have its own space to store [PyPI](https://pypi.org/) packages. | 12.10+ |
| [Composer Repository](../../user/packages/composer_repository/index.md) | The GitLab Composer Repository enables every project in GitLab to have its own space to store [Composer](https://getcomposer.org/) packages. | 13.1+ |
| [NuGet Repository](../../user/packages/nuget_repository/index.md) | The GitLab NuGet Repository enables every project in GitLab to have its own space to store [NuGet](https://www.nuget.org/) packages. | 12.8+ |
| [Conan Repository](../../user/packages/conan_repository/index.md) | The GitLab Conan Repository enables every project in GitLab to have its own space to store [Conan](https://conan.io/) packages. | 12.4+ |
......
......@@ -4,14 +4,14 @@ group: Package
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# GitLab PyPi Repository
# GitLab PyPI Repository
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/208747) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.10.
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/221259) to GitLab Core in 13.3.
With the GitLab PyPi Repository, every project can have its own space to store PyPi packages.
With the GitLab PyPI Repository, every project can have its own space to store PyPI packages.
The GitLab PyPi Repository works with:
The GitLab PyPI Repository works with:
- [pip](https://pypi.org/project/pip/)
- [twine](https://pypi.org/project/twine/)
......@@ -20,13 +20,13 @@ The GitLab PyPi Repository works with:
You need a recent version of [pip](https://pypi.org/project/pip/) and [twine](https://pypi.org/project/twine/).
## Enabling the PyPi Repository
## Enabling the PyPI Repository
NOTE: **Note:**
This option is available only if your GitLab administrator has
[enabled support for the Package Registry](../../../administration/packages/index.md).
After the PyPi Repository is enabled, it is available for all new projects
After the PyPI Repository is enabled, it is available for all new projects
by default. To enable it for existing projects, or if you want to disable it:
1. Navigate to your project's **Settings > General > Visibility, project features, permissions**.
......@@ -37,8 +37,8 @@ You should then be able to see the **Packages & Registries** section on the left
## Getting started
This section covers creating a new example PyPi package to upload. This is a
quickstart to test out the **GitLab PyPi Registry**. If you already understand how
This section covers creating a new example PyPI package to upload. This is a
quickstart to test out the **GitLab PyPI Registry**. If you already understand how
to build and publish your own packages, move on to the [next section](#adding-the-gitlab-pypi-repository-as-a-source).
### Create a project
......@@ -152,10 +152,10 @@ And confirm your output matches the below:
mypypipackage-0.0.1-py3-none-any.whl mypypipackage-0.0.1.tar.gz
```
Our package is now all set up and ready to be uploaded to the **GitLab PyPi
Our package is now all set up and ready to be uploaded to the **GitLab PyPI
Package Registry**. Before we do so, we next need to set up authentication.
## Adding the GitLab PyPi Repository as a source
## Adding the GitLab PyPI Repository as a source
### Authenticating with a personal access token
......@@ -256,7 +256,7 @@ TWINE_PASSWORD=<personal_access_token or deploy_token> TWINE_USERNAME=<username
```
If you did not follow the guide above, then you need to ensure your package
has been properly built and you [created a PyPi package with `setuptools`](https://packaging.python.org/tutorials/packaging-projects/).
has been properly built and you [created a PyPI package with `setuptools`](https://packaging.python.org/tutorials/packaging-projects/).
You can then upload your package using the following command:
......
......@@ -18305,7 +18305,7 @@ msgstr ""
msgid "PackageRegistry|Published to the %{project} Package Registry %{datetime}"
msgstr ""
msgid "PackageRegistry|PyPi"
msgid "PackageRegistry|PyPI"
msgstr ""
msgid "PackageRegistry|Recipe: %{recipe}"
......@@ -18389,7 +18389,7 @@ msgstr ""
msgid "PackageType|NuGet"
msgstr ""
msgid "PackageType|PyPi"
msgid "PackageType|PyPI"
msgstr ""
msgid "Packages"
......
......@@ -101,7 +101,7 @@ describe('Getters PackageDetails Store', () => {
${packageWithoutBuildInfo} | ${'Maven'}
${npmPackage} | ${'NPM'}
${nugetPackage} | ${'NuGet'}
${pypiPackage} | ${'PyPi'}
${pypiPackage} | ${'PyPI'}
`(`package type`, ({ packageEntity, expectedResult }) => {
beforeEach(() => setupState({ packageEntity }));
......
......@@ -385,7 +385,7 @@ exports[`packages_list_app renders 1`] = `
</b-tab-stub>
<b-tab-stub
tag="div"
title="PyPi"
title="PyPI"
titlelinkclass="gl-tab-nav-item"
>
<template>
......@@ -400,7 +400,7 @@ exports[`packages_list_app renders 1`] = `
class="svg-250 svg-content"
>
<img
alt="There are no PyPi packages yet"
alt="There are no PyPI packages yet"
class="gl-max-w-full"
src="helpSvg"
/>
......@@ -416,7 +416,7 @@ exports[`packages_list_app renders 1`] = `
<h1
class="h4"
>
There are no PyPi packages yet
There are no PyPI packages yet
</h1>
<p>
......
......@@ -37,7 +37,7 @@ describe('Packages shared utils', () => {
${'maven'} | ${'Maven'}
${'npm'} | ${'NPM'}
${'nuget'} | ${'NuGet'}
${'pypi'} | ${'PyPi'}
${'pypi'} | ${'PyPI'}
${'composer'} | ${'Composer'}
${'foo'} | ${null}
`(`package type`, ({ packageType, expectedResult }) => {
......
......@@ -23,24 +23,24 @@ RSpec.describe API::PypiPackages do
using RSpec::Parameterized::TableSyntax
where(:project_visibility_level, :user_role, :member, :user_token, :shared_examples_name, :expected_status) do
'PUBLIC' | :developer | true | true | 'PyPi package versions' | :success
'PUBLIC' | :guest | true | true | 'PyPi package versions' | :success
'PUBLIC' | :developer | true | false | 'PyPi package versions' | :success
'PUBLIC' | :guest | true | false | 'PyPi package versions' | :success
'PUBLIC' | :developer | false | true | 'PyPi package versions' | :success
'PUBLIC' | :guest | false | true | 'PyPi package versions' | :success
'PUBLIC' | :developer | false | false | 'PyPi package versions' | :success
'PUBLIC' | :guest | false | false | 'PyPi package versions' | :success
'PUBLIC' | :anonymous | false | true | 'PyPi package versions' | :success
'PRIVATE' | :developer | true | true | 'PyPi package versions' | :success
'PRIVATE' | :guest | true | true | 'process PyPi api request' | :forbidden
'PRIVATE' | :developer | true | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :guest | true | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :developer | false | true | 'process PyPi api request' | :not_found
'PRIVATE' | :guest | false | true | 'process PyPi api request' | :not_found
'PRIVATE' | :developer | false | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :guest | false | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :anonymous | false | true | 'process PyPi api request' | :unauthorized
'PUBLIC' | :developer | true | true | 'PyPI package versions' | :success
'PUBLIC' | :guest | true | true | 'PyPI package versions' | :success
'PUBLIC' | :developer | true | false | 'PyPI package versions' | :success
'PUBLIC' | :guest | true | false | 'PyPI package versions' | :success
'PUBLIC' | :developer | false | true | 'PyPI package versions' | :success
'PUBLIC' | :guest | false | true | 'PyPI package versions' | :success
'PUBLIC' | :developer | false | false | 'PyPI package versions' | :success
'PUBLIC' | :guest | false | false | 'PyPI package versions' | :success
'PUBLIC' | :anonymous | false | true | 'PyPI package versions' | :success
'PRIVATE' | :developer | true | true | 'PyPI package versions' | :success
'PRIVATE' | :guest | true | true | 'process PyPI api request' | :forbidden
'PRIVATE' | :developer | true | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :guest | true | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :developer | false | true | 'process PyPI api request' | :not_found
'PRIVATE' | :guest | false | true | 'process PyPI api request' | :not_found
'PRIVATE' | :developer | false | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :guest | false | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :anonymous | false | true | 'process PyPI api request' | :unauthorized
end
with_them do
......@@ -76,24 +76,24 @@ RSpec.describe API::PypiPackages do
using RSpec::Parameterized::TableSyntax
where(:project_visibility_level, :user_role, :member, :user_token, :shared_examples_name, :expected_status) do
'PUBLIC' | :developer | true | true | 'process PyPi api request' | :success
'PUBLIC' | :guest | true | true | 'process PyPi api request' | :forbidden
'PUBLIC' | :developer | true | false | 'process PyPi api request' | :unauthorized
'PUBLIC' | :guest | true | false | 'process PyPi api request' | :unauthorized
'PUBLIC' | :developer | false | true | 'process PyPi api request' | :forbidden
'PUBLIC' | :guest | false | true | 'process PyPi api request' | :forbidden
'PUBLIC' | :developer | false | false | 'process PyPi api request' | :unauthorized
'PUBLIC' | :guest | false | false | 'process PyPi api request' | :unauthorized
'PUBLIC' | :anonymous | false | true | 'process PyPi api request' | :unauthorized
'PRIVATE' | :developer | true | true | 'process PyPi api request' | :success
'PRIVATE' | :guest | true | true | 'process PyPi api request' | :forbidden
'PRIVATE' | :developer | true | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :guest | true | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :developer | false | true | 'process PyPi api request' | :not_found
'PRIVATE' | :guest | false | true | 'process PyPi api request' | :not_found
'PRIVATE' | :developer | false | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :guest | false | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :anonymous | false | true | 'process PyPi api request' | :unauthorized
'PUBLIC' | :developer | true | true | 'process PyPI api request' | :success
'PUBLIC' | :guest | true | true | 'process PyPI api request' | :forbidden
'PUBLIC' | :developer | true | false | 'process PyPI api request' | :unauthorized
'PUBLIC' | :guest | true | false | 'process PyPI api request' | :unauthorized
'PUBLIC' | :developer | false | true | 'process PyPI api request' | :forbidden
'PUBLIC' | :guest | false | true | 'process PyPI api request' | :forbidden
'PUBLIC' | :developer | false | false | 'process PyPI api request' | :unauthorized
'PUBLIC' | :guest | false | false | 'process PyPI api request' | :unauthorized
'PUBLIC' | :anonymous | false | true | 'process PyPI api request' | :unauthorized
'PRIVATE' | :developer | true | true | 'process PyPI api request' | :success
'PRIVATE' | :guest | true | true | 'process PyPI api request' | :forbidden
'PRIVATE' | :developer | true | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :guest | true | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :developer | false | true | 'process PyPI api request' | :not_found
'PRIVATE' | :guest | false | true | 'process PyPI api request' | :not_found
'PRIVATE' | :developer | false | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :guest | false | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :anonymous | false | true | 'process PyPI api request' | :unauthorized
end
with_them do
......@@ -142,24 +142,24 @@ RSpec.describe API::PypiPackages do
using RSpec::Parameterized::TableSyntax
where(:project_visibility_level, :user_role, :member, :user_token, :shared_examples_name, :expected_status) do
'PUBLIC' | :developer | true | true | 'PyPi package creation' | :created
'PUBLIC' | :guest | true | true | 'process PyPi api request' | :forbidden
'PUBLIC' | :developer | true | false | 'process PyPi api request' | :unauthorized
'PUBLIC' | :guest | true | false | 'process PyPi api request' | :unauthorized
'PUBLIC' | :developer | false | true | 'process PyPi api request' | :forbidden
'PUBLIC' | :guest | false | true | 'process PyPi api request' | :forbidden
'PUBLIC' | :developer | false | false | 'process PyPi api request' | :unauthorized
'PUBLIC' | :guest | false | false | 'process PyPi api request' | :unauthorized
'PUBLIC' | :anonymous | false | true | 'process PyPi api request' | :unauthorized
'PRIVATE' | :developer | true | true | 'process PyPi api request' | :created
'PRIVATE' | :guest | true | true | 'process PyPi api request' | :forbidden
'PRIVATE' | :developer | true | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :guest | true | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :developer | false | true | 'process PyPi api request' | :not_found
'PRIVATE' | :guest | false | true | 'process PyPi api request' | :not_found
'PRIVATE' | :developer | false | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :guest | false | false | 'process PyPi api request' | :unauthorized
'PRIVATE' | :anonymous | false | true | 'process PyPi api request' | :unauthorized
'PUBLIC' | :developer | true | true | 'PyPI package creation' | :created
'PUBLIC' | :guest | true | true | 'process PyPI api request' | :forbidden
'PUBLIC' | :developer | true | false | 'process PyPI api request' | :unauthorized
'PUBLIC' | :guest | true | false | 'process PyPI api request' | :unauthorized
'PUBLIC' | :developer | false | true | 'process PyPI api request' | :forbidden
'PUBLIC' | :guest | false | true | 'process PyPI api request' | :forbidden
'PUBLIC' | :developer | false | false | 'process PyPI api request' | :unauthorized
'PUBLIC' | :guest | false | false | 'process PyPI api request' | :unauthorized
'PUBLIC' | :anonymous | false | true | 'process PyPI api request' | :unauthorized
'PRIVATE' | :developer | true | true | 'process PyPI api request' | :created
'PRIVATE' | :guest | true | true | 'process PyPI api request' | :forbidden
'PRIVATE' | :developer | true | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :guest | true | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :developer | false | true | 'process PyPI api request' | :not_found
'PRIVATE' | :guest | false | true | 'process PyPI api request' | :not_found
'PRIVATE' | :developer | false | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :guest | false | false | 'process PyPI api request' | :unauthorized
'PRIVATE' | :anonymous | false | true | 'process PyPI api request' | :unauthorized
end
with_them do
......@@ -185,7 +185,7 @@ RSpec.describe API::PypiPackages do
project.update!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
end
it_behaves_like 'process PyPi api request', :developer, :bad_request, true
it_behaves_like 'process PyPI api request', :developer, :bad_request, true
end
context 'with an invalid package' do
......@@ -232,24 +232,24 @@ RSpec.describe API::PypiPackages do
using RSpec::Parameterized::TableSyntax
where(:project_visibility_level, :user_role, :member, :user_token, :shared_examples_name, :expected_status) do
'PUBLIC' | :developer | true | true | 'PyPi package download' | :success
'PUBLIC' | :guest | true | true | 'PyPi package download' | :success
'PUBLIC' | :developer | true | false | 'PyPi package download' | :success
'PUBLIC' | :guest | true | false | 'PyPi package download' | :success
'PUBLIC' | :developer | false | true | 'PyPi package download' | :success
'PUBLIC' | :guest | false | true | 'PyPi package download' | :success
'PUBLIC' | :developer | false | false | 'PyPi package download' | :success
'PUBLIC' | :guest | false | false | 'PyPi package download' | :success
'PUBLIC' | :anonymous | false | true | 'PyPi package download' | :success
'PRIVATE' | :developer | true | true | 'PyPi package download' | :success
'PRIVATE' | :guest | true | true | 'PyPi package download' | :success
'PRIVATE' | :developer | true | false | 'PyPi package download' | :success
'PRIVATE' | :guest | true | false | 'PyPi package download' | :success
'PRIVATE' | :developer | false | true | 'PyPi package download' | :success
'PRIVATE' | :guest | false | true | 'PyPi package download' | :success
'PRIVATE' | :developer | false | false | 'PyPi package download' | :success
'PRIVATE' | :guest | false | false | 'PyPi package download' | :success
'PRIVATE' | :anonymous | false | true | 'PyPi package download' | :success
'PUBLIC' | :developer | true | true | 'PyPI package download' | :success
'PUBLIC' | :guest | true | true | 'PyPI package download' | :success
'PUBLIC' | :developer | true | false | 'PyPI package download' | :success
'PUBLIC' | :guest | true | false | 'PyPI package download' | :success
'PUBLIC' | :developer | false | true | 'PyPI package download' | :success
'PUBLIC' | :guest | false | true | 'PyPI package download' | :success
'PUBLIC' | :developer | false | false | 'PyPI package download' | :success
'PUBLIC' | :guest | false | false | 'PyPI package download' | :success
'PUBLIC' | :anonymous | false | true | 'PyPI package download' | :success
'PRIVATE' | :developer | true | true | 'PyPI package download' | :success
'PRIVATE' | :guest | true | true | 'PyPI package download' | :success
'PRIVATE' | :developer | true | false | 'PyPI package download' | :success
'PRIVATE' | :guest | true | false | 'PyPI package download' | :success
'PRIVATE' | :developer | false | true | 'PyPI package download' | :success
'PRIVATE' | :guest | false | true | 'PyPI package download' | :success
'PRIVATE' | :developer | false | false | 'PyPI package download' | :success
'PRIVATE' | :guest | false | false | 'PyPI package download' | :success
'PRIVATE' | :anonymous | false | true | 'PyPI package download' | :success
end
with_them do
......
# frozen_string_literal: true
RSpec.shared_examples 'PyPi package creation' do |user_type, status, add_member = true|
RSpec.shared_examples 'PyPI package creation' do |user_type, status, add_member = true|
RSpec.shared_examples 'creating pypi package files' do
it 'creates package files' do
expect { subject }
......@@ -106,7 +106,7 @@ RSpec.shared_examples 'PyPi package creation' do |user_type, status, add_member
end
end
RSpec.shared_examples 'PyPi package versions' do |user_type, status, add_member = true|
RSpec.shared_examples 'PyPI package versions' do |user_type, status, add_member = true|
context "for user type #{user_type}" do
before do
project.send("add_#{user_type}", user) if add_member && user_type != :anonymous
......@@ -123,7 +123,7 @@ RSpec.shared_examples 'PyPi package versions' do |user_type, status, add_member
end
end
RSpec.shared_examples 'PyPi package download' do |user_type, status, add_member = true|
RSpec.shared_examples 'PyPI package download' do |user_type, status, add_member = true|
context "for user type #{user_type}" do
before do
project.send("add_#{user_type}", user) if add_member && user_type != :anonymous
......@@ -140,7 +140,7 @@ RSpec.shared_examples 'PyPi package download' do |user_type, status, add_member
end
end
RSpec.shared_examples 'process PyPi api request' do |user_type, status, add_member = true|
RSpec.shared_examples 'process PyPI api request' do |user_type, status, add_member = true|
context "for user type #{user_type}" do
before do
project.send("add_#{user_type}", user) if add_member && user_type != :anonymous
......@@ -155,13 +155,13 @@ RSpec.shared_examples 'rejects PyPI access with unknown project id' do
let(:project) { OpenStruct.new(id: 1234567890) }
context 'as anonymous' do
it_behaves_like 'process PyPi api request', :anonymous, :not_found
it_behaves_like 'process PyPI api request', :anonymous, :not_found
end
context 'as authenticated user' do
subject { get api(url), headers: basic_auth_header(user.username, personal_access_token.token) }
it_behaves_like 'process PyPi api request', :anonymous, :not_found
it_behaves_like 'process PyPI api request', :anonymous, :not_found
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment