FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
openai-python/scripts/detect-breaking-changes.py at main · aberja/openai-python · GitHub
aberja
/
openai-python
Public
forked from
openai/openai-python
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
openai-python
/
scripts
/
detect-breaking-changes.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
79 lines (61 loc) · 2.42 KB
Breadcrumbs
openai-python
/
scripts
/
detect-breaking-changes.py
Copy path
File metadata and controls
79 lines (61 loc) · 2.42 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
from
__future__
import
annotations
import
sys
from
typing
import
Iterator
from
pathlib
import
Path
import
rich
import
griffe
from
rich
.
text
import
Text
from
rich
.
style
import
Style
def
public_members
(
obj
:
griffe
.
Object
|
griffe
.
Alias
)
->
dict
[
str
,
griffe
.
Object
|
griffe
.
Alias
]:
if
isinstance
(
obj
,
griffe
.
Alias
):
# ignore imports for now, they're technically part of the public API
# but we don't have good preventative measures in place to prevent
# changing them
return
{}
return
{
name
:
value
for
name
,
value
in
obj
.
all_members
.
items
()
if
not
name
.
startswith
(
"_"
)}
def
find_breaking_changes
(
new_obj
:
griffe
.
Object
|
griffe
.
Alias
,
old_obj
:
griffe
.
Object
|
griffe
.
Alias
,
*
,
path
:
list
[
str
],
)
->
Iterator
[
Text
|
str
]:
new_members
=
public_members
(
new_obj
)
old_members
=
public_members
(
old_obj
)
for
name
,
old_member
in
old_members
.
items
():
if
isinstance
(
old_member
,
griffe
.
Alias
)
and
len
(
path
)
>
2
:
# ignore imports in `/types/` for now, they're technically part of the public API
# but we don't have good preventative measures in place to prevent changing them
continue
new_member
=
new_members
.
get
(
name
)
if
new_member
is
None
:
cls_name
=
old_member
.
__class__
.
__name__
yield
Text
(
f"(
{
cls_name
}
)"
,
style
=
Style
(
color
=
"rgb(119, 119, 119)"
))
yield
from
[
" "
for
_
in
range
(
10
-
len
(
cls_name
))]
yield
f"
{
'.'
.
join
(
path
)
}
.
{
name
}
"
yield
"
\n
"
continue
yield
from
find_breaking_changes
(
new_member
,
old_member
,
path
=
[
*
path
,
name
])
def
main
()
->
None
:
try
:
against_ref
=
sys
.
argv
[
1
]
except
IndexError
as
err
:
raise
RuntimeError
(
"You must specify a base ref to run breaking change detection against"
)
from
err
package
=
griffe
.
load
(
"openai"
,
search_paths
=
[
Path
(
__file__
).
parent
.
parent
.
joinpath
(
"src"
)],
)
old_package
=
griffe
.
load_git
(
"openai"
,
ref
=
against_ref
,
search_paths
=
[
"src"
],
)
assert
isinstance
(
package
,
griffe
.
Module
)
assert
isinstance
(
old_package
,
griffe
.
Module
)
output
=
list
(
find_breaking_changes
(
package
,
old_package
,
path
=
[
"openai"
]))
if
output
:
rich
.
print
(
Text
(
"Breaking changes detected!"
,
style
=
Style
(
color
=
"rgb(165, 79, 87)"
)))
rich
.
print
()
for
text
in
output
:
rich
.
print
(
text
,
end
=
""
)
sys
.
exit
(
1
)
main
()
Back
|
FazBrowse Home
|
New Git URL