worked on phab and wiki activity data collection
This commit is contained in:
parent
ab771e25b7
commit
60dfe7e0a2
266
src/helper_scripts/dump_collector.py
Normal file
266
src/helper_scripts/dump_collector.py
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
import requests
|
||||||
|
import bz2
|
||||||
|
import shutil
|
||||||
|
import os
|
||||||
|
|
||||||
|
import concurrent.futures
|
||||||
|
|
||||||
|
YEARLY_PROJECTS = [
|
||||||
|
"dewiki", "frwiki", "eswiki", "itwiki", "ruwiki", "jawiki", "viwiki", "zhwiki",
|
||||||
|
"ptwiki", "enwiktionary", "plwiki", "nlwiki", "svwiki", "metawiki", "arwiki",
|
||||||
|
"shwiki", "cebwiki", "mgwiktionary", "fawiki", "frwiktionary", "ukwiki",
|
||||||
|
"hewiki", "kowiki", "srwiki", "trwiki", "loginwiki", "huwiki", "cawiki",
|
||||||
|
"nowiki", "mediawikiwiki", "fiwiki", "cswiki", "idwiki", "rowiki", "enwikisource",
|
||||||
|
"frwikisource", "ruwiktionary", "dawiki", "bgwiki", "incubatorwiki",
|
||||||
|
"enwikinews", "specieswiki", "thwiki"
|
||||||
|
]
|
||||||
|
|
||||||
|
MONTHLY_PROJECTS = ["wikidatawiki", "commonswiki", "enwiki"]
|
||||||
|
|
||||||
|
ALL_PROJECTS = [
|
||||||
|
"aawiki", "aawikibooks", "aawiktionary", "abwiki", "abwiktionary", "acewiki",
|
||||||
|
"adywiki", "aewikimedia", "afwiki", "afwikibooks", "afwikiquote", "afwiktionary",
|
||||||
|
"akwiki", "akwikibooks", "akwiktionary", "alswiki", "altwiki", "amiwiki",
|
||||||
|
"amwiki", "amwikimedia", "amwikiquote", "amwiktionary", "angwiki", "angwikibooks",
|
||||||
|
"angwikiquote", "angwikisource", "angwiktionary", "anpwiki", "anwiki",
|
||||||
|
"anwiktionary", "arcwiki", "arwiki", "arwikibooks", "arwikimedia", "arwikinews",
|
||||||
|
"arwikiquote", "arwikisource", "arwikiversity", "arwiktionary", "arywiki",
|
||||||
|
"arzwiki", "astwiki", "astwikibooks", "astwikiquote", "astwiktionary", "aswiki",
|
||||||
|
"aswikibooks", "aswikiquote", "aswikisource", "aswiktionary", "atjwiki",
|
||||||
|
"avkwiki", "avwiki", "avwiktionary", "awawiki", "aywiki", "aywikibooks",
|
||||||
|
"aywiktionary", "azbwiki", "azwiki", "azwikibooks", "azwikiquote", "azwikisource",
|
||||||
|
"azwiktionary", "banwiki", "banwikisource", "barwiki", "bat_smgwiki", "bawiki",
|
||||||
|
"bawikibooks", "bbcwiki", "bclwiki", "bclwikiquote", "bclwiktionary", "bdwikimedia",
|
||||||
|
"be_x_oldwiki", "betawikiversity", "bewiki", "bewikibooks", "bewikimedia",
|
||||||
|
"bewikiquote", "bewikisource", "bewiktionary", "bewwiki", "bgwiki", "bgwikibooks",
|
||||||
|
"bgwikinews", "bgwikiquote", "bgwikisource", "bgwiktionary", "bhwiki",
|
||||||
|
"bhwiktionary", "biwiki", "biwikibooks", "biwiktionary", "bjnwiki",
|
||||||
|
"bjnwikiquote", "bjnwiktionary", "blkwiki", "blkwiktionary", "bmwiki",
|
||||||
|
"bmwikibooks", "bmwikiquote", "bmwiktionary", "bnwiki", "bnwikibooks", "bnwikiquote",
|
||||||
|
"bnwikisource", "bnwikivoyage", "bnwiktionary", "bowiki", "bowikibooks",
|
||||||
|
"bowiktionary", "bpywiki", "brwiki", "brwikimedia", "brwikiquote", "brwikisource",
|
||||||
|
"brwiktionary", "bswiki", "bswikibooks", "bswikinews", "bswikiquote",
|
||||||
|
"bswikisource", "bswiktionary", "btmwiki", "btmwiktionary", "bugwiki",
|
||||||
|
"bxrwiki", "cawiki", "cawikibooks", "cawikimedia", "cawikinews", "cawikiquote",
|
||||||
|
"cawikisource", "cawiktionary", "cbk_zamwiki", "cdowiki", "cebwiki",
|
||||||
|
"cewiki", "chowiki", "chrwiki", "chrwiktionary", "chwiki", "chwikibooks",
|
||||||
|
"chwiktionary", "chywiki", "ckbwiki", "ckbwiktionary", "cnwikimedia", "commonswiki",
|
||||||
|
"cowiki", "cowikibooks", "cowikimedia", "cowikiquote", "cowiktionary",
|
||||||
|
"crhwiki", "crwiki", "crwikiquote", "crwiktionary", "csbwiki", "csbwiktionary",
|
||||||
|
"cswiki", "cswikibooks", "cswikinews", "cswikiquote", "cswikisource", "cswikiversity",
|
||||||
|
"cswikivoyage", "cswiktionary", "cuwiki", "cvwiki", "cvwikibooks", "cywiki",
|
||||||
|
"cywikibooks", "cywikiquote", "cywikisource", "cywiktionary", "dagwiki",
|
||||||
|
"dawiki", "dawikibooks", "dawikiquote", "dawikisource", "dawiktionary",
|
||||||
|
"dewiki", "dewikibooks", "dewikinews", "dewikiquote", "dewikisource",
|
||||||
|
"dewikiversity", "dewikivoyage", "dewiktionary", "dgawiki", "dinwiki", "diqwiki",
|
||||||
|
"diqwiktionary", "dkwikimedia", "donatewiki", "dsbwiki", "dtpwiki", "dtywiki",
|
||||||
|
"dvwiki", "dvwiktionary", "dzwiki", "dzwiktionary", "eewiki", "elwiki",
|
||||||
|
"elwikibooks", "elwikinews", "elwikiquote", "elwikisource", "elwikiversity",
|
||||||
|
"elwikivoyage", "elwiktionary", "emlwiki", "enwiki", "enwikibooks", "enwikinews",
|
||||||
|
"enwikiquote", "enwikisource", "enwikiversity", "enwikivoyage", "enwiktionary",
|
||||||
|
"eowiki", "eowikibooks", "eowikinews", "eowikiquote", "eowikisource", "eowikivoyage",
|
||||||
|
"eowiktionary", "eswiki", "eswikibooks", "eswikinews", "eswikiquote", "eswikisource",
|
||||||
|
"eswikiversity", "eswikivoyage", "eswiktionary", "etwiki", "etwikibooks",
|
||||||
|
"etwikimedia", "etwikiquote", "etwikisource", "etwiktionary", "euwiki", "euwikibooks",
|
||||||
|
"euwikiquote", "euwikisource", "euwiktionary", "extwiki", "fatwiki", "fawiki",
|
||||||
|
"fawikibooks", "fawikinews", "fawikiquote", "fawikisource", "fawikivoyage",
|
||||||
|
"fawiktionary", "ffwiki", "fiu_vrowiki", "fiwiki", "fiwikibooks", "fiwikimedia",
|
||||||
|
"fiwikinews", "fiwikiquote", "fiwikisource", "fiwikiversity", "fiwikivoyage",
|
||||||
|
"fiwiktionary", "fjwiki", "fjwiktionary", "fonwiki", "foundationwiki", "fowiki",
|
||||||
|
"fowikisource", "fowiktionary", "frpwiki", "frrwiki", "frwiki", "frwikibooks",
|
||||||
|
"frwikinews", "frwikiquote", "frwikisource", "frwikiversity", "frwikivoyage",
|
||||||
|
"frwiktionary", "furwiki", "fywiki", "fywikibooks", "fywiktionary", "gagwiki",
|
||||||
|
"ganwiki", "gawiki", "gawikibooks", "gawikiquote", "gawiktionary", "gcrwiki",
|
||||||
|
"gdwiki", "gdwiktionary", "glkwiki", "glwiki", "glwikibooks", "glwikiquote",
|
||||||
|
"glwikisource", "glwiktionary", "gnwiki", "gnwikibooks", "gnwiktionary",
|
||||||
|
"gomwiki", "gomwiktionary", "gorwiki", "gorwiktionary", "gotwiki", "gotwikibooks",
|
||||||
|
"gpewiki", "gucwiki", "gurwiki", "guwiki", "guwikibooks", "guwikiquote",
|
||||||
|
"guwikisource", "guwiktionary", "guwwiki", "guwwikinews", "guwwikiquote",
|
||||||
|
"guwwiktionary", "gvwiki", "gvwiktionary", "hakwiki", "hawiki", "hawiktionary",
|
||||||
|
"hawwiki", "hewiki", "hewikibooks", "hewikinews", "hewikiquote", "hewikisource",
|
||||||
|
"hewikivoyage", "hewiktionary", "hifwiki", "hifwiktionary", "hiwiki", "hiwikibooks",
|
||||||
|
"hiwikimedia", "hiwikiquote", "hiwikisource", "hiwikiversity", "hiwikivoyage",
|
||||||
|
"hiwiktionary", "howiki", "hrwiki", "hrwikibooks", "hrwikiquote", "hrwikisource",
|
||||||
|
"hrwiktionary", "hsbwiki", "hsbwiktionary", "htwiki", "htwikisource", "huwiki",
|
||||||
|
"huwikibooks", "huwikinews", "huwikiquote", "huwikisource", "huwiktionary",
|
||||||
|
"hywiki", "hywikibooks", "hywikiquote", "hywikisource", "hywiktionary",
|
||||||
|
"hywwiki", "hzwiki", "iawiki", "iawikibooks", "iawiktionary", "idwiki",
|
||||||
|
"idwikibooks", "idwikimedia", "idwikiquote", "idwikisource", "idwiktionary",
|
||||||
|
"iewiki", "iewikibooks", "iewiktionary", "iglwiki", "igwiki", "igwikiquote",
|
||||||
|
"igwiktionary", "iiwiki", "ikwiki", "ikwiktionary", "ilowiki", "incubatorwiki",
|
||||||
|
"inhwiki", "iowiki", "iowiktionary", "iswiki", "iswikibooks", "iswikiquote",
|
||||||
|
"iswikisource", "iswiktionary", "itwiki", "itwikibooks", "itwikinews",
|
||||||
|
"itwikiquote", "itwikisource", "itwikiversity", "itwikivoyage", "itwiktionary",
|
||||||
|
"iuwiki", "iuwiktionary", "jamwiki", "jawiki", "jawikibooks", "jawikinews",
|
||||||
|
"jawikiquote", "jawikisource", "jawikiversity", "jawikivoyage", "jawiktionary",
|
||||||
|
"jbowiki", "jbowiktionary", "jvwiki", "jvwikisource", "jvwiktionary",
|
||||||
|
"kaawiki", "kaawiktionary", "kabwiki", "kawiki", "kawikibooks", "kawikiquote",
|
||||||
|
"kawiktionary", "kbdwiki", "kbdwiktionary", "kbpwiki", "kcgwiki", "kcgwiktionary",
|
||||||
|
"kgwiki", "kiwiki", "kjwiki", "kkwiki", "kkwikibooks", "kkwikiquote", "kkwiktionary",
|
||||||
|
"klwiki", "klwiktionary", "kmwiki", "kmwikibooks", "kmwiktionary", "knwiki",
|
||||||
|
"knwikibooks", "knwikiquote", "knwikisource", "knwiktionary", "koiwiki",
|
||||||
|
"kowiki", "kowikibooks", "kowikinews", "kowikiquote", "kowikisource",
|
||||||
|
"kowikiversity", "kowiktionary", "krcwiki", "krwiki", "krwikiquote",
|
||||||
|
"kshwiki", "kswiki", "kswikibooks", "kswikiquote", "kswiktionary", "kuswiki",
|
||||||
|
"kuwiki", "kuwikibooks", "kuwikiquote", "kuwiktionary", "kvwiki", "kwwiki",
|
||||||
|
"kwwikiquote", "kwwiktionary", "kywiki", "kywikibooks", "kywikiquote",
|
||||||
|
"kywiktionary", "labswiki", "ladwiki", "lawiki", "lawikibooks", "lawikiquote",
|
||||||
|
"lawikisource", "lawiktionary", "lbewiki", "lbwiki", "lbwikibooks", "lbwikiquote",
|
||||||
|
"lbwiktionary", "lezwiki", "lfnwiki", "lgwiki", "lijwiki", "lijwikisource",
|
||||||
|
"liwiki", "liwikibooks", "liwikinews", "liwikiquote", "liwikisource", "liwiktionary",
|
||||||
|
"lldwiki", "lmowiki", "lmowiktionary", "lnwiki", "lnwikibooks", "lnwiktionary",
|
||||||
|
"loginwiki", "lowiki", "lowiktionary", "lrcwiki", "ltgwiki", "ltwiki",
|
||||||
|
"ltwikibooks", "ltwikiquote", "ltwikisource", "ltwiktionary", "lvwiki",
|
||||||
|
"lvwikibooks", "lvwiktionary", "madwiki", "maiwiki", "maiwikimedia", "map_bmswiki", "mdfwiki", "mediawikiwiki",
|
||||||
|
"metawiki", "mgwiki", "mgwikibooks", "mgwiktionary", "mhrwiki", "mhwiki",
|
||||||
|
"mhwiktionary", "minwiki", "minwiktionary", "miwiki", "miwikibooks", "miwiktionary",
|
||||||
|
"mkwiki", "mkwikibooks", "mkwikimedia", "mkwikisource", "mkwiktionary", "mlwiki",
|
||||||
|
"mlwikibooks", "mlwikiquote", "mlwikisource", "mlwiktionary", "mniwiki", "mniwiktionary",
|
||||||
|
"mnwiki", "mnwikibooks", "mnwiktionary", "mnwwiki", "mnwwiktionary", "mrjwiki",
|
||||||
|
"mrwiki", "mrwikibooks", "mrwikiquote", "mrwikisource", "mrwiktionary", "mswiki",
|
||||||
|
"mswikibooks", "mswikisource", "mswiktionary", "mtwiki", "mtwiktionary", "muswiki",
|
||||||
|
"mwlwiki", "mxwikimedia", "myvwiki", "mywiki", "mywikibooks", "mywiktionary",
|
||||||
|
"mznwiki", "nahwiki", "nahwikibooks", "nahwiktionary", "napwiki", "napwikisource",
|
||||||
|
"nawiki", "nawikibooks", "nawikiquote", "nawiktionary", "nds_nlwiki", "ndswiki",
|
||||||
|
"ndswikibooks", "ndswikiquote", "ndswiktionary", "newiki", "newikibooks",
|
||||||
|
"newiktionary", "newwiki", "ngwiki", "niawiki", "niawiktionary", "nlwiki",
|
||||||
|
"nlwikibooks", "nlwikimedia", "nlwikinews", "nlwikiquote", "nlwikisource",
|
||||||
|
"nlwikivoyage", "nlwiktionary", "nnwiki", "nnwikiquote", "nnwiktionary",
|
||||||
|
"nostalgiawiki", "novwiki", "nowiki", "nowikibooks", "nowikimedia", "nowikinews",
|
||||||
|
"nowikiquote", "nowikisource", "nowiktionary", "nqowiki", "nrmwiki", "nsowiki",
|
||||||
|
"nvwiki", "nycwikimedia", "nywiki", "nzwikimedia", "ocwiki", "ocwikibooks",
|
||||||
|
"ocwiktionary", "olowiki", "omwiki", "omwiktionary", "orwiki", "orwikisource",
|
||||||
|
"orwiktionary", "oswiki", "outreachwiki", "pagwiki", "pamwiki", "papwiki",
|
||||||
|
"pawiki", "pawikibooks", "pawikisource", "pawiktionary", "pcdwiki", "pcmwiki",
|
||||||
|
"pdcwiki", "pflwiki", "pihwiki", "piwiki", "piwiktionary", "plwiki", "plwikibooks",
|
||||||
|
"plwikimedia", "plwikinews", "plwikiquote", "plwikisource", "plwikivoyage",
|
||||||
|
"plwiktionary", "pmswiki", "pmswikisource", "pnbwiki", "pnbwiktionary", "pntwiki",
|
||||||
|
"pswiki", "pswikibooks", "pswikivoyage", "pswiktionary", "ptwiki", "ptwikibooks",
|
||||||
|
"ptwikimedia", "ptwikinews", "ptwikiquote", "ptwikisource", "ptwikiversity",
|
||||||
|
"ptwikivoyage", "ptwiktionary", "pwnwiki", "quwiki", "quwikibooks", "quwikiquote",
|
||||||
|
"quwiktionary", "rmwiki", "rmwikibooks", "rmwiktionary", "rmywiki", "rnwiki",
|
||||||
|
"rnwiktionary", "roa_rupwiki", "roa_rupwiktionary", "roa_tarawiki", "rowiki",
|
||||||
|
"rowikibooks", "rowikinews", "rowikiquote", "rowikisource", "rowikivoyage",
|
||||||
|
"rowiktionary", "rswikimedia", "ruewiki", "ruwiki", "ruwikibooks", "ruwikimedia",
|
||||||
|
"ruwikinews", "ruwikiquote", "ruwikisource", "ruwikiversity", "ruwikivoyage",
|
||||||
|
"ruwiktionary", "rwwiki", "rwwiktionary", "sahwiki", "sahwikiquote", "sahwikisource",
|
||||||
|
"satwiki", "sawiki", "sawikibooks", "sawikiquote", "sawikisource", "sawiktionary",
|
||||||
|
"scnwiki", "scnwiktionary", "scowiki", "scwiki", "scwiktionary", "sdwiki",
|
||||||
|
"sdwikinews", "sdwiktionary", "sewiki", "sewikibooks", "sewikimedia", "sgwiki",
|
||||||
|
"sgwiktionary", "shiwiki", "shnwiki", "shnwikibooks", "shnwikivoyage",
|
||||||
|
"shnwiktionary", "shwiki", "shwiktionary", "shywiktionary", "simplewiki",
|
||||||
|
"simplewikibooks", "simplewikiquote", "simplewiktionary", "siwiki", "siwikibooks",
|
||||||
|
"siwiktionary", "skrwiki", "skrwiktionary", "skwiki", "skwikibooks", "skwikiquote",
|
||||||
|
"skwikisource", "skwiktionary", "slwiki", "slwikibooks", "slwikiquote",
|
||||||
|
"slwikisource", "slwikiversity", "slwiktionary", "smnwiki", "smwiki", "smwiktionary",
|
||||||
|
"snwiki", "snwiktionary", "sourceswiki", "sowiki", "sowiktionary", "specieswiki",
|
||||||
|
"sqwiki", "sqwikibooks", "sqwikinews", "sqwikiquote", "sqwiktionary", "srnwiki",
|
||||||
|
"srwiki", "srwikibooks", "srwikinews", "srwikiquote", "srwikisource", "srwiktionary",
|
||||||
|
"sswiki", "sswiktionary", "stqwiki", "stwiki", "stwiktionary", "suwiki",
|
||||||
|
"suwikibooks", "suwikiquote", "suwikisource", "suwiktionary", "svwiki",
|
||||||
|
"svwikibooks", "svwikinews", "svwikiquote", "svwikisource", "svwikiversity",
|
||||||
|
"svwikivoyage", "svwiktionary", "swwiki", "swwikibooks", "swwiktionary",
|
||||||
|
"szlwiki", "szywiki", "tawiki", "tawikibooks", "tawikinews", "tawikiquote",
|
||||||
|
"tawikisource", "tawiktionary", "taywiki", "tcywiki", "tenwiki", "test2wiki",
|
||||||
|
"testwiki", "testwikidatawiki", "tetwiki", "tewiki", "tewikibooks", "tewikiquote",
|
||||||
|
"tewikisource", "tewiktionary", "tgwiki", "tgwikibooks", "tgwiktionary",
|
||||||
|
"thwiki", "thwikibooks", "thwikinews", "thwikiquote", "thwikisource", "thwiktionary",
|
||||||
|
"tiwiki", "tiwiktionary", "tkwiki", "tkwikibooks", "tkwikiquote", "tkwiktionary",
|
||||||
|
"tlwiki", "tlwikibooks", "tlwikiquote", "tlwiktionary", "tlywiki", "tnwiki",
|
||||||
|
"tnwiktionary", "towiki", "towiktionary", "tpiwiki", "tpiwiktionary", "trvwiki",
|
||||||
|
"trwiki", "trwikibooks", "trwikimedia", "trwikinews", "trwikiquote", "trwikisource",
|
||||||
|
"trwikivoyage", "trwiktionary", "tswiki", "tswiktionary", "ttwiki", "ttwikibooks",
|
||||||
|
"ttwikiquote", "ttwiktionary", "tumwiki", "twwiki", "twwiktionary", "tyvwiki",
|
||||||
|
"tywiki", "uawikimedia", "udmwiki", "ugwiki", "ugwikibooks", "ugwikiquote",
|
||||||
|
"ugwiktionary", "ukwiki", "ukwikibooks", "ukwikinews", "ukwikiquote", "ukwikisource",
|
||||||
|
"ukwikivoyage", "ukwiktionary", "urwiki", "urwikibooks", "urwikiquote", "urwiktionary",
|
||||||
|
"uzwiki", "uzwikibooks", "uzwikiquote", "uzwiktionary", "vecwiki", "vecwikisource",
|
||||||
|
"vecwiktionary", "vepwiki", "vewiki", "viwiki", "viwikibooks", "viwikiquote",
|
||||||
|
"viwikisource", "viwikivoyage", "viwiktionary", "vlswiki", "votewiki", "vowiki",
|
||||||
|
"vowikibooks", "vowikiquote", "vowiktionary", "warwiki", "wawiki", "wawikibooks",
|
||||||
|
"wawikisource", "wawiktionary", "wbwikimedia", "wikidatawiki", "wikifunctionswiki",
|
||||||
|
"wikimania2015wiki", "wikimania2016wiki", "wikimania2017wiki", "wowiki",
|
||||||
|
"wowikiquote", "wowiktionary", "wuuwiki", "xalwiki", "xhwiki", "xhwikibooks",
|
||||||
|
"xhwiktionary", "xmfwiki", "yiwiki", "yiwikisource", "yiwiktionary", "yowiki",
|
||||||
|
"yowikibooks", "yowiktionary", "yuewiktionary", "zawiki", "zawikibooks", "zawikiquote",
|
||||||
|
"zawiktionary", "zeawiki", "zghwiki", "zh_classicalwiki", "zh_min_nanwiki",
|
||||||
|
"zh_min_nanwikibooks", "zh_min_nanwikiquote", "zh_min_nanwikisource", "zh_min_nanwiktionary",
|
||||||
|
"zh_yuewiki", "zhwiki", "zhwikibooks", "zhwikinews", "zhwikiquote", "zhwikisource",
|
||||||
|
"zhwikiversity", "zhwikivoyage", "zhwiktionary", "zuwiki", "zuwikibooks", "zuwiktionary"
|
||||||
|
]
|
||||||
|
|
||||||
|
DUMP = "2024-11"
|
||||||
|
test_url = f"https://dumps.wikimedia.org/other/mediawiki_history/{DUMP}/aawiki/{DUMP}.aawiki.all-time.tsv.bz2"
|
||||||
|
DUMP_LOC_PREFIX = f"https://dumps.wikimedia.org/other/mediawiki_history/{DUMP}/"
|
||||||
|
FILE_LOC_PREFIX = "/data/users/mgaughan/mw-repo-lifecycles/wiki_activity_data/"
|
||||||
|
|
||||||
|
YEARS = ['2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024']
|
||||||
|
|
||||||
|
def download_file(url):
|
||||||
|
response = requests.get(url)
|
||||||
|
if "content-disposition" in response.headers:
|
||||||
|
content_disposition = response.headers["content-disposition"]
|
||||||
|
filename = FILE_LOC_PREFIX + content_disposition.split("filename=")[1]
|
||||||
|
else:
|
||||||
|
filename = FILE_LOC_PREFIX + url.split("/")[-1]
|
||||||
|
with open(filename, mode="wb") as file:
|
||||||
|
file.write(response.content)
|
||||||
|
print(f"Downloaded file {filename}")
|
||||||
|
return filename
|
||||||
|
|
||||||
|
def decompress(filepath):
|
||||||
|
decompressed_filepath = filepath[:-4]
|
||||||
|
with bz2.BZ2File(filepath) as fr, open(decompressed_filepath,"wb") as fw:
|
||||||
|
shutil.copyfileobj(fr,fw)
|
||||||
|
print(f"Decompressed {decompressed_filepath}")
|
||||||
|
#os.remove(filepath)
|
||||||
|
print(f"Deleted {filepath}")
|
||||||
|
|
||||||
|
|
||||||
|
def batch_parallel_for_yearly():
|
||||||
|
urls = []
|
||||||
|
for entry in YEARLY_PROJECTS:
|
||||||
|
for year in YEARS:
|
||||||
|
urls.append(f"{DUMP_LOC_PREFIX}{entry}/{DUMP}.{entry}.{year}.tsv.bz2")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def batch_parallel_for_single():
|
||||||
|
urls = []
|
||||||
|
for entry in ALL_PROJECTS:
|
||||||
|
if entry not in YEARLY_PROJECTS and entry not in MONTHLY_PROJECTS:
|
||||||
|
urls.append(f"{DUMP_LOC_PREFIX}{entry}/{DUMP}.{entry}.all-time.tsv.bz2")
|
||||||
|
for url in urls:
|
||||||
|
download_file(url)
|
||||||
|
'''
|
||||||
|
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
|
||||||
|
future_to_filepath = {executor.submit(download_file, url): url for url in urls}
|
||||||
|
for future in concurrent.futures.as_completed(future_to_filepath):
|
||||||
|
filepath = future_to_filepath[future]
|
||||||
|
try:
|
||||||
|
data = future
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("Keyboard interrupt received, shutting down executor")
|
||||||
|
executor.shutdown(wait=False, cancel_futures=True)
|
||||||
|
except Exception as exc:
|
||||||
|
print('generated an exception: %s' % (exc))
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
def decompress_directory(directory_name):
|
||||||
|
# Traverse the directory
|
||||||
|
for root, dirs, files in os.walk(directory_name):
|
||||||
|
for file in files:
|
||||||
|
if file.endswith('.bz2'):
|
||||||
|
# Full path to the file
|
||||||
|
filepath = os.path.join(root, file)
|
||||||
|
print(filepath)
|
||||||
|
# Apply the decompress function
|
||||||
|
decompress(filepath)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
batch_parallel_for_single()
|
||||||
|
#decompress_directory(FILE_LOC_PREFIX)
|
||||||
|
#file = download_file(test_url)
|
||||||
|
#decompress("/data/users/mgaughan/mw-repo-lifecycles/wiki_activity_data/2024-11.zuwiktionary.all-time.tsv.bz2")
|
@ -8,24 +8,27 @@ file_location = "/data/users/mgaughan/mw-repo-lifecycles/commit_data/"
|
|||||||
repo_location = "/data/users/mgaughan/mw-repo-lifecycles/repo_artifacts/"
|
repo_location = "/data/users/mgaughan/mw-repo-lifecycles/repo_artifacts/"
|
||||||
|
|
||||||
cst = datetime.timezone(datetime.timedelta(hours=-6))
|
cst = datetime.timezone(datetime.timedelta(hours=-6))
|
||||||
|
'''
|
||||||
repos = {
|
repos = {
|
||||||
"core" : {
|
"core" : {
|
||||||
"url": "https://gerrit.wikimedia.org/r/mediawiki/core",
|
"url": "https://gerrit.wikimedia.org/r/mediawiki/core",
|
||||||
"from_date": datetime.datetime(2022, 9, 10, 00, 00, 00, tzinfo=cst),
|
"from_date": datetime.datetime(2012, 1, 1, 00, 00, 00, tzinfo=cst),
|
||||||
"to_date": datetime.datetime(2022, 10, 10, 00, 00, 00, tzinfo=cst)
|
"to_date": datetime.datetime(2014, 12, 31, 00, 00, 00, tzinfo=cst)
|
||||||
},
|
|
||||||
"parsoid" :{
|
|
||||||
"url": "https://gerrit.wikimedia.org/r/mediawiki/services/parsoid",
|
|
||||||
"from_date": datetime.datetime(2024, 6, 10, 00, 00, 00, tzinfo=cst),
|
|
||||||
"to_date": datetime.datetime(2024, 10, 10, 00, 00, 00, tzinfo=cst)
|
|
||||||
},
|
},
|
||||||
"visualeditor": {
|
"visualeditor": {
|
||||||
"url": "https://gerrit.wikimedia.org/r/VisualEditor/VisualEditor",
|
"url": "https://gerrit.wikimedia.org/r/VisualEditor/VisualEditor",
|
||||||
"from_date": datetime.datetime(2013, 5, 1, 00, 00, 00, tzinfo=cst),
|
"from_date": datetime.datetime(2012, 1, 1, 00, 00, 00, tzinfo=cst),
|
||||||
"to_date": datetime.datetime(2013, 10, 10, 00, 00, 00, tzinfo=cst)
|
"to_date": datetime.datetime(2013, 5, 1, 00, 00, 00, tzinfo=cst)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
'''
|
||||||
|
repos = {
|
||||||
|
"visualeditor": {
|
||||||
|
"url": "https://gerrit.wikimedia.org/r/VisualEditor/VisualEditor",
|
||||||
|
"from_date": datetime.datetime(2012, 1, 1, 00, 00, 00, tzinfo=cst),
|
||||||
|
"to_date": datetime.datetime(2014, 12, 31, 00, 00, 00, tzinfo=cst)
|
||||||
|
}
|
||||||
|
}
|
||||||
for repo in repos.keys():
|
for repo in repos.keys():
|
||||||
print(repos[repo])
|
print(repos[repo])
|
||||||
print(repos[repo]['url'])
|
print(repos[repo]['url'])
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
import os
|
|
||||||
import sys
|
|
||||||
import wget
|
|
File diff suppressed because one or more lines are too long
@ -6,16 +6,8 @@ import pandas as pd
|
|||||||
import requests
|
import requests
|
||||||
import re
|
import re
|
||||||
import datetime
|
import datetime
|
||||||
|
import time
|
||||||
|
|
||||||
# phab=Phabricator("https://phabricator.wikimedia.org/")
|
|
||||||
tags = [
|
|
||||||
"VisualEditor",
|
|
||||||
"Parsoid"
|
|
||||||
]
|
|
||||||
|
|
||||||
#set phabricator api token
|
|
||||||
token = "api-wurg254ciq5uvfxlr4rszn5ynpy4"
|
|
||||||
api_base = 'https://phabricator.wikimedia.org/api/'
|
|
||||||
|
|
||||||
# the query task taken from MGerlach's notebook
|
# the query task taken from MGerlach's notebook
|
||||||
def query_task_tag(
|
def query_task_tag(
|
||||||
@ -23,8 +15,8 @@ def query_task_tag(
|
|||||||
limit = 100,
|
limit = 100,
|
||||||
ts1 = None, ts2 = None,
|
ts1 = None, ts2 = None,
|
||||||
api_url_base = 'https://phabricator.wikimedia.org/api/maniphest.search',
|
api_url_base = 'https://phabricator.wikimedia.org/api/maniphest.search',
|
||||||
api_token = "api-wurg254ciq5uvfxlr4rszn5ynpy4"',
|
api_token = "api-wurg254ciq5uvfxlr4rszn5ynpy4",
|
||||||
sleep = 1,
|
sleep = 10
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
query all tasks tagged with specific tag
|
query all tasks tagged with specific tag
|
||||||
@ -38,17 +30,18 @@ def query_task_tag(
|
|||||||
RETURNS:
|
RETURNS:
|
||||||
- list of dictionary.
|
- list of dictionary.
|
||||||
'''
|
'''
|
||||||
|
time.sleep(sleep)
|
||||||
to_query = 1
|
to_query = 1
|
||||||
after = None
|
after = None
|
||||||
|
|
||||||
data = []
|
data = []
|
||||||
|
|
||||||
while to_query == 1:
|
while to_query == 1:
|
||||||
|
time.sleep(sleep)
|
||||||
params = {
|
params = {
|
||||||
'api.token' : api_token,
|
'api.token' : api_token,
|
||||||
'constraints[tags]':tag_term, ## term that task is tagged with
|
'constraints[query]':[tag_term], ## term that task is searched for with
|
||||||
|
#'constraints[projects]':["VisualEditor"], ## term that task is tagged with
|
||||||
'constraints[createdStart]':ts1, ## timestamp task creation (min)
|
'constraints[createdStart]':ts1, ## timestamp task creation (min)
|
||||||
'constraints[createdEnd]':ts2, ## timestamp task creation (max)
|
'constraints[createdEnd]':ts2, ## timestamp task creation (max)
|
||||||
'limit':limit,
|
'limit':limit,
|
||||||
@ -56,6 +49,58 @@ def query_task_tag(
|
|||||||
"attachments[subscribers]":"true",
|
"attachments[subscribers]":"true",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response = requests.get( api_url_base, params=params)
|
||||||
|
print(response)
|
||||||
|
result = json.loads(response.text)['result']
|
||||||
|
print(result)
|
||||||
|
## the data
|
||||||
|
data_tmp = result['data']
|
||||||
|
data += data_tmp
|
||||||
|
## check if there are more results to query
|
||||||
|
cursor = result['cursor']
|
||||||
|
## if after == None, no more queries
|
||||||
|
if cursor['after'] == None:
|
||||||
|
to_query = 0
|
||||||
|
## if after != None, query next page by passing after-argument
|
||||||
|
else:
|
||||||
|
after = cursor['after']
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#also from MGerlach
|
||||||
|
def query_transactions_phid_task(
|
||||||
|
task_phid,
|
||||||
|
limit = 100,
|
||||||
|
api_url_base = 'https://phabricator.wikimedia.org/api/transaction.search',
|
||||||
|
api_token = 'api-grocgdq2767cx6v5ywckkjmetx2f',
|
||||||
|
sleep = 10,
|
||||||
|
):
|
||||||
|
'''
|
||||||
|
query all transactions for a task (task_phid).
|
||||||
|
OPTIONAL:
|
||||||
|
- limit (int, default=100), number of results per query, cannot be larger than 100
|
||||||
|
- sleep (int, default = 0), sleep between each query
|
||||||
|
- api_url_base (str,) is the url for the api
|
||||||
|
- api_token (str, default=martins token),
|
||||||
|
|
||||||
|
RETURNS:
|
||||||
|
- list of dictionary.
|
||||||
|
'''
|
||||||
|
time.sleep(sleep)
|
||||||
|
to_query = 1
|
||||||
|
after = None
|
||||||
|
|
||||||
|
data = []
|
||||||
|
|
||||||
|
while to_query == 1:
|
||||||
|
time.sleep(sleep)
|
||||||
|
params = {
|
||||||
|
'api.token' : api_token,
|
||||||
|
'objectIdentifier':task_phid, ## task-phid
|
||||||
|
'limit':limit,
|
||||||
|
'after':after,
|
||||||
|
}
|
||||||
response = requests.get( api_url_base, params=params)
|
response = requests.get( api_url_base, params=params)
|
||||||
result = json.loads(response.text)['result']
|
result = json.loads(response.text)['result']
|
||||||
|
|
||||||
@ -72,18 +117,29 @@ def query_task_tag(
|
|||||||
after = cursor['after']
|
after = cursor['after']
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# phab=Phabricator("https://phabricator.wikimedia.org/")
|
||||||
|
tags = [
|
||||||
|
"VisualEditor",
|
||||||
|
"Parsoid"
|
||||||
|
]
|
||||||
|
#set phabricator api token
|
||||||
|
token = "api-wurg254ciq5uvfxlr4rszn5ynpy4"
|
||||||
|
api_base = 'https://phabricator.wikimedia.org/api/'
|
||||||
|
|
||||||
# for the search criteria of
|
ve_ts1 = int(datetime.datetime.timestamp(datetime.datetime(2012, 1, 1, 0, 0, 0)))
|
||||||
# the umbrella tag VisualEditor
|
ve_ts2 = int(datetime.datetime.timestamp(datetime.datetime(2014, 12, 31, 0, 0, 0)))
|
||||||
# open tasks
|
|
||||||
# closed tasks
|
|
||||||
# the umbrella tag of Parsoid?
|
|
||||||
|
|
||||||
# query
|
ve_data = query_task_tag("VisualEditor", ts1=ve_ts1, ts2=ve_ts2)
|
||||||
# query for umbrella tag
|
|
||||||
# in a given womdpw pf to,e
|
|
||||||
# if open or closed
|
|
||||||
|
|
||||||
|
for entry in ve_data:
|
||||||
# then, for each task,
|
task_id = entry['phid']
|
||||||
# collect the comments with them
|
print(task_id)
|
||||||
|
transactions = query_transactions_phid_task(task_id)
|
||||||
|
comments = {}
|
||||||
|
for item in transactions:
|
||||||
|
comments[item['id']] = item['comments']
|
||||||
|
entry['task_comments'] = comments
|
||||||
|
DATA_PREFIX = "/data/users/mgaughan/mw-repo-lifecycles/phab_data/"
|
||||||
|
with open(DATA_PREFIX + "visualeditor/" + "2012_1_1_to_2014_12_31.json", "w") as outfile1:
|
||||||
|
json.dump(ve_data, outfile1)
|
||||||
|
Loading…
Reference in New Issue
Block a user