Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
镜像
Python_Packaging_Authority
pip
提交
bd4d52b0
P
pip
项目概览
镜像
/
Python_Packaging_Authority
/
pip
12 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
pip
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
bd4d52b0
编写于
2月 01, 2020
作者:
S
Stéphane Bidoul
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add helper to get DirectUrl metadata from Distrribution
上级
88582c25
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
71 addition
and
1 deletion
+71
-1
src/pip/_internal/utils/direct_url_helpers.py
src/pip/_internal/utils/direct_url_helpers.py
+41
-0
tests/unit/test_direct_url_helpers.py
tests/unit/test_direct_url_helpers.py
+30
-1
未找到文件。
src/pip/_internal/utils/direct_url_helpers.py
浏览文件 @
bd4d52b0
import
logging
from
pip._internal.models.direct_url
import
(
DIRECT_URL_METADATA_NAME
,
ArchiveInfo
,
DirectUrl
,
DirectUrlValidationError
,
DirInfo
,
VcsInfo
,
)
from
pip._internal.utils.typing
import
MYPY_CHECK_RUNNING
from
pip._internal.vcs
import
vcs
try
:
from
json
import
JSONDecodeError
except
ImportError
:
# PY2
JSONDecodeError
=
ValueError
# type: ignore
if
MYPY_CHECK_RUNNING
:
from
typing
import
Optional
from
pip._internal.models.link
import
Link
from
pip._vendor.pkg_resources
import
Distribution
logger
=
logging
.
getLogger
(
__name__
)
def
direct_url_as_pep440_direct_reference
(
direct_url
,
name
):
# type: (DirectUrl, str) -> str
...
...
@@ -87,3 +103,28 @@ def direct_url_from_link(link, source_dir=None, link_is_in_wheel_cache=False):
info
=
ArchiveInfo
(
hash
=
hash
),
subdirectory
=
link
.
subdirectory_fragment
,
)
def
dist_get_direct_url
(
dist
):
# type: (Distribution) -> Optional[DirectUrl]
"""Obtain a DirectUrl from a pkg_resource.Distribution.
Returns None if the distribution has no `direct_url.json` metadata,
or if `direct_url.json` is invalid.
"""
if
not
dist
.
has_metadata
(
DIRECT_URL_METADATA_NAME
):
return
None
try
:
return
DirectUrl
.
from_json
(
dist
.
get_metadata
(
DIRECT_URL_METADATA_NAME
))
except
(
DirectUrlValidationError
,
JSONDecodeError
,
UnicodeDecodeError
)
as
e
:
logger
.
warning
(
"Error parsing %s for %s: %s"
,
DIRECT_URL_METADATA_NAME
,
dist
.
project_name
,
e
,
)
return
None
tests/unit/test_direct_url_helpers.py
浏览文件 @
bd4d52b0
from
functools
import
partial
from
mock
import
patch
from
mock
import
MagicMock
,
patch
from
pip._internal.models.direct_url
import
(
DIRECT_URL_METADATA_NAME
,
ArchiveInfo
,
DirectUrl
,
DirInfo
,
...
...
@@ -12,6 +13,7 @@ from pip._internal.models.link import Link
from
pip._internal.utils.direct_url_helpers
import
(
direct_url_as_pep440_direct_reference
,
direct_url_from_link
,
dist_get_direct_url
,
)
from
pip._internal.utils.urls
import
path_to_url
...
...
@@ -165,3 +167,30 @@ def test_from_link_hide_user_password():
link_is_in_wheel_cache
=
True
,
)
assert
direct_url
.
to_dict
()[
"url"
]
==
"ssh://git@g.c/u/p.git"
def
test_dist_get_direct_url_no_metadata
():
dist
=
MagicMock
()
dist
.
has_metadata
.
return_value
=
False
assert
dist_get_direct_url
(
dist
)
is
None
dist
.
has_metadata
.
assert_called
()
def
test_dist_get_direct_url_bad_metadata
():
dist
=
MagicMock
()
dist
.
has_metadata
.
return_value
=
True
dist
.
get_metadata
.
return_value
=
"{}"
# invalid direct_url.json
assert
dist_get_direct_url
(
dist
)
is
None
dist
.
get_metadata
.
assert_called_with
(
DIRECT_URL_METADATA_NAME
)
def
test_dist_get_direct_url_valid_metadata
():
dist
=
MagicMock
()
dist
.
has_metadata
.
return_value
=
True
dist
.
get_metadata
.
return_value
=
(
'{"url": "https://e.c/p.tgz", "archive_info": {}}'
)
direct_url
=
dist_get_direct_url
(
dist
)
dist
.
get_metadata
.
assert_called_with
(
DIRECT_URL_METADATA_NAME
)
assert
direct_url
.
url
==
"https://e.c/p.tgz"
assert
isinstance
(
direct_url
.
info
,
ArchiveInfo
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录