Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F82836376
tk_experiments.py
JVanderhoop-WMF (julievdh)
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Authored By
JVanderhoop-WMF
May 20 2026, 6:46 AM
2026-05-20 06:46:33 (UTC+0)
Size
2 KB
Referenced Files
None
Subscribers
None
tk_experiments.py
View Options
#!/usr/bin/env python3
"""
Usage: python tk_experiments.py <wiki>
Example: python tk_experiments.py enwiki
"""
import
sys
import
json
import
urllib.request
from
datetime
import
datetime
,
timezone
API_URL
=
"https://test-kitchen.wikimedia.org/api/v1/experiments"
def
fetch_experiments
():
req
=
urllib
.
request
.
Request
(
API_URL
,
headers
=
{
"User-Agent"
:
"tk-experiments-script/1.0 (python)"
},
)
with
urllib
.
request
.
urlopen
(
req
)
as
response
:
return
json
.
loads
(
response
.
read
())
def
is_running
(
exp
):
now
=
datetime
.
now
(
timezone
.
utc
)
start
=
datetime
.
fromisoformat
(
exp
[
"start"
]
.
replace
(
"Z"
,
"+00:00"
))
end
=
datetime
.
fromisoformat
(
exp
[
"end"
]
.
replace
(
"Z"
,
"+00:00"
))
return
start
<=
now
<=
end
def
wiki_in_experiment
(
wiki
,
exp
):
for
rate
,
wikis
in
exp
[
"sample_rate"
]
.
items
():
if
isinstance
(
wikis
,
list
)
and
wiki
in
wikis
:
return
float
(
rate
)
return
None
def
main
():
if
len
(
sys
.
argv
)
<
2
:
print
(
"Usage: python tk_experiments.py <wiki>"
)
print
(
"Example: python tk_experiments.py enwiki"
)
sys
.
exit
(
1
)
wiki
=
sys
.
argv
[
1
]
print
(
f
"Fetching experiments from {API_URL}..."
)
experiments
=
fetch_experiments
()
running
=
[
e
for
e
in
experiments
if
is_running
(
e
)]
matches
=
[(
e
,
wiki_in_experiment
(
wiki
,
e
))
for
e
in
running
]
matches
=
[(
e
,
rate
)
for
e
,
rate
in
matches
if
rate
is
not
None
]
print
(
f
"
\n
Experiments currently running on {wiki}: {len(matches)}
\n
"
)
if
not
matches
:
print
(
"None found."
)
return
for
exp
,
rate
in
matches
:
end_dt
=
datetime
.
fromisoformat
(
exp
[
"end"
]
.
replace
(
"Z"
,
"+00:00"
))
days_left
=
(
end_dt
-
datetime
.
now
(
timezone
.
utc
))
.
days
print
(
f
" {exp['name']}"
)
print
(
f
" Sample rate : {rate:.1%} ({exp['user_identifier_type']})"
)
print
(
f
" Groups : {', '.join(exp['groups'])}"
)
print
(
f
" Ends : {exp['end']} ({days_left}d remaining)"
)
print
(
f
" Stream : {exp['stream_name']}"
)
print
()
if
__name__
==
"__main__"
:
main
()
File Metadata
Details
Attached
Mime Type
text/x-python
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26247121
Default Alt Text
tk_experiments.py (2 KB)
Attached To
Mode
T426813: "What experiments are running on {language}wiki?"
Attached
Detach File
Event Timeline
Log In to Comment