FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-gitlab/gitlab/utils.py at main · sattlerc/python-gitlab · GitHub
sattlerc
python-gitlab
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
python-gitlab
/
gitlab
/
utils.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
88 lines (68 loc) · 2.82 KB
Breadcrumbs
python-gitlab
/
gitlab
/
utils.py
Copy path
File metadata and controls
88 lines (68 loc) · 2.82 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
# -*- coding: utf-8 -*-
#
# Copyright (C) 2016-2017 Gauvain Pocentek <gauvain@pocentek.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import
urllib
.
parse
from
typing
import
Any
,
Callable
,
Dict
,
Optional
,
Union
import
requests
class
_StdoutStream
(
object
):
def
__call__
(
self
,
chunk
:
Any
)
->
None
:
print
(
chunk
)
def
response_content
(
response
:
requests
.
Response
,
streamed
:
bool
,
action
:
Optional
[
Callable
],
chunk_size
:
int
,
)
->
Optional
[
bytes
]:
if
streamed
is
False
:
return
response
.
content
if
action
is
None
:
action
=
_StdoutStream
()
for
chunk
in
response
.
iter_content
(
chunk_size
=
chunk_size
):
if
chunk
:
action
(
chunk
)
return
None
def
copy_dict
(
dest
:
Dict
[
str
,
Any
],
src
:
Dict
[
str
,
Any
])
->
None
:
for
k
,
v
in
src
.
items
():
if
isinstance
(
v
,
dict
):
# Transform dict values to new attributes. For example:
# custom_attributes: {'foo', 'bar'} =>
# "custom_attributes['foo']": "bar"
for
dict_k
,
dict_v
in
v
.
items
():
dest
[
f"
{
k
}
[
{
dict_k
}
]"
]
=
dict_v
else
:
dest
[
k
]
=
v
class
EncodedId
(
str
):
"""A custom `str` class that will return the URL-encoded value of the string.
* Using it recursively will only url-encode the value once.
* Can accept either `str` or `int` as input value.
* Can be used in an f-string and output the URL-encoded string.
Reference to documentation on why this is necessary.
See::
https://docs.gitlab.com/ee/api/index.html#namespaced-path-encoding
https://docs.gitlab.com/ee/api/index.html#path-parameters
"""
# mypy complains if return type other than the class type. So we ignore issue.
def
__new__
(
# type: ignore
cls
,
value
:
Union
[
str
,
int
,
"EncodedId"
]
)
->
Union
[
int
,
"EncodedId"
]:
if
isinstance
(
value
, (
int
,
EncodedId
)):
return
value
if
not
isinstance
(
value
,
str
):
raise
TypeError
(
f"Unsupported type received:
{
type
(
value
)
}
"
)
value
=
urllib
.
parse
.
quote
(
value
,
safe
=
""
)
return
super
().
__new__
(
cls
,
value
)
def
remove_none_from_dict
(
data
:
Dict
[
str
,
Any
])
->
Dict
[
str
,
Any
]:
return
{
k
:
v
for
k
,
v
in
data
.
items
()
if
v
is
not
None
}
Back
|
FazBrowse Home
|
New Git URL