{ "info": { "author": "Yevhen Kuzmovych", "author_email": "kuzmoyev@fit.cvut.cz", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "\n= filabel\n:toc:\n:note-caption: :information_source:\n:warning-caption: :warning:\n\nTool for labeling PRs at GitHub by globs.\n\n\n== Zad\u00e1n\u00ed \u00fakolu 2\n\nVa\u0161\u00edm \u00fakolem za 5 bod\u016f je roz\u0161\u00ed\u0159it CLI aplikaci z minul\u00e9 \u00falohy o webov\u00e9 rozhran\u00ed.\nSt\u00e1vaj\u00edc\u00ed funkcionalita ale mus\u00ed b\u00fdt zachov\u00e1na,\nmimo p\u016fvodn\u00ed aplikace p\u016fjde tedy nav\u00edc spustit web server a to pomoc\u00ed `flask run`.\n\nV\u00fdslednou aplikaci nasa\u010fte na PythonAnywhere, nebo jin\u00fd ve\u0159ejn\u00fd WSGI hosting.\nOdkaz na b\u011b\u017e\u00edc\u00ed aplikaci a repozit\u00e1\u0159 n\u00e1m po\u0161lete e-mailem.\n\nNasazenou aplikaci nastavte tak,\nabychom mohli chov\u00e1n\u00ed vyzkou\u0161et zasl\u00e1n\u00edm Pull Requestu do va\u0161eho repozit\u00e1\u0159e.\n\n== Specifikace\n\nAplikace mus\u00ed p\u0159ij\u00edmat na adrese `/` GitHub webhooky (metoda POST).\nAplikace mus\u00ed spr\u00e1vn\u011b zpracovat https://developer.github.com/webhooks/[webhooky]\n`pull_request` a `ping` ve form\u00e1tu JSON.\n\nNa `ping` aplikace spr\u00e1vn\u011b odpov\u00ed dle dokumentace.\n\nNa `pull_request` aplikace tak\u00e9 spr\u00e1vn\u011b odpov\u00ed dle dokumentace,\nnav\u00edc nastav\u00ed spr\u00e1vn\u011b \u0161t\u00edtky, dle konfigura\u010dn\u00edho souboru a zad\u00e1n\u00ed minul\u00e9 \u00falohy.\n\nAplikace mus\u00ed podporovat zabezpe\u010den\u00ed pomoc\u00ed webhook secret (viz d\u00e1le).\n\nNa adrese `/` se p\u0159i po\u017eadavku GET bude nach\u00e1zet jednoduch\u00e1 HTML str\u00e1nka,\nze kter\u00e9 bude jasn\u00e9, jak\u00e1 pravidla plat\u00ed a jak\u00fd u\u017eivatel bude \u0161t\u00edtky nastavovat.\nU\u017eivatelsk\u00e9 jm\u00e9no se na str\u00e1nce zobraz\u00ed podle pou\u017eit\u00e9ho tokenu,\nnen\u00ed zadr\u00e1tovan\u00e9 do k\u00f3du aplikace nebo \u0161ablony.\n\nMus\u00edte vyu\u017e\u00edt \u0161ablonu.\nNebudeme hodnotit vzhled str\u00e1nky,\nale vyu\u017eijte HTML pro prezentaci informac\u00ed.\nVydumpov\u00e1n\u00ed Python slovn\u00edku do `
` boxu nen\u00ed dosta\u010duj\u00edc\u00ed.\nPokud si nejste jisti, pou\u017eijte zano\u0159en\u00e9 seznamy (\u0161t\u00edtek: pravidla).\n\n=== Spou\u0161t\u011bn\u00ed aplikace\n\nAplikace se mus\u00ed d\u00e1t spustit pomoc\u00ed p\u0159\u00edkazu `flask run`\na to nastaven\u00edm prom\u011bnn\u00e9 prost\u0159ed\u00ed `FLASK_APP` na `filabel.py`.\n\n[source,console]\n$ export FLASK_APP=filabel.py\n$ flask run\n\nZ\u00e1rove\u0148 je mo\u017en\u00e9 pomoc\u00ed prom\u011bnn\u00e9 prost\u0159ed\u00ed nastavit,\nkde m\u00e1 aplikace hledat konfigura\u010dn\u00ed soubor(y).\n\nPomoc\u00ed prom\u011bnn\u00e9 `FILABEL_CONFIG` je mo\u017en\u00e9 nastavit cestu k jednomu konfigura\u010dn\u00edmu souboru,\nnebo v\u00edce soubor\u016fm, odd\u011blen\u00fdch dvojte\u010dkou.\n\nV konfigura\u010dn\u00edch souborech hled\u00e1te sekce `github` a `labels`.\n\nCLI aplikace z minul\u00e9ho t\u00fddne mus\u00ed st\u00e1le fungovat a testy z minula mus\u00ed proch\u00e1zet.\n\n=== Zabezpe\u010den\u00ed webhooku\n\nProto\u017ee p\u0159\u00edj\u00edm\u00e1n\u00ed ud\u00e1lost\u00ed z internetu m\u016f\u017ee b\u00fdt riskantn\u00ed,\nnab\u00edz\u00ed GitHub mo\u017enost webhooky zabezpe\u010dit proti zneu\u017eiti.\nAbyste rozpoznali, \u017ee v\u00e1m ud\u00e1lost poslal pr\u00e1v\u011b GitHub,\nje ke ka\u017ed\u00e9mu requestu z GitHubu p\u0159ilo\u017een\u00e1 hlavi\u010dka `X-Hub-Signature`, nap\u0159:\n\n[source]\nX-Hub-Signature: sha1=0b861d9a594a4f421cabcdef75d5aefc46df8967\n\nkter\u00e1 v\u00e1m \u0159\u00edk\u00e1,\n\u017ee pokud pou\u017eijete HMAC hexdigest s odpov\u00eddaj\u00edc\u00ed hash funkc\u00ed a s kl\u00ed\u010dem,\nkter\u00fd je uveden\u00fd v polo\u017ece `secret`, na cel\u00e9 t\u011blo requestu\na v\u00e1mi spo\u010d\u00edtan\u00fd v\u00fdsledek se shoduje s t\u00edm v hlavi\u010dce `X-Hub-Signature`,\ntak tento request p\u0159i\u0161el z GitHubu, a m\u016f\u017eete mu tedy ve\u0159it.\n\nV\u00edce informac\u00ed a p\u0159\u00edklad v Ruby je na\nhttps://developer.github.com/webhooks/securing/[github securing].\n\nDo konfiguran\u010d\u00edho souboru (sekce `github`) tedy p\u0159idejte polo\u017eku `secret`.\nP\u0159i nastavov\u00e1n\u00ed webhooku na GitHubu pou\u017eijte stejn\u00fd secret jako p\u0159i nasazov\u00e1n\u00ed aplikace.\n\n== Automatick\u00e9 testy\n\nTesty z minula st\u00e1le mus\u00ed proch\u00e1zet.\nExistuje i n\u011bkolik nov\u00fdch test\u016f v souboru `test_web_smoke.py`.\n\nPro spu\u0161t\u011bn\u00ed pouze nov\u00fdch test\u016f m\u016f\u017eete pou\u017e\u00edt:\n\n[source,console]\n$ python -m pytest -v -k web test\n\nPro nov\u00e9 testy nen\u00ed t\u0159eba speci\u00e1ln\u00ed setup z minula.\n\nWARNING: Testy **netestuj\u00ed hlavn\u00ed funkcionalitu aplikace**,\nale pouze p\u0159idru\u017een\u00e9 v\u011bci, jako importovatelnost,\np\u0159\u00edtomnost usernamu na hlavn\u00ed str\u00e1nce,\nping, ov\u011b\u0159en\u00ed \u201esecret\u201c.\nUjist\u011bte se, \u017ee va\u0161e nasazen\u00e1 aplikace funguje, jak m\u00e1.\n\nN\u00e1sleduje text z minula, kter\u00fd st\u00e1le plat\u00ed:\n\nPro spu\u0161t\u011bn\u00ed test\u016f nainstalujte do virtu\u00e1ln\u00edho prost\u0159ed\u00ed bal\u00edk `pytest`.\n\nTesty vy\u017eaduj\u00ed ur\u010dit\u00fd setup repozit\u00e1\u0159\u016f. Pro jeho vytvo\u0159en\u00ed pou\u017eijte skript\n`test_environment/setup.sh`. Je t\u0159eba nastavit prom\u011bnn\u00e9 prost\u0159ed\u00ed\n`GH_TOKEN` a `GH_USER`.\nToken mus\u00ed p\u0159\u00edslu\u0161et dan\u00e9mu u\u017eivateli a m\u00edt scope `repo`.\n\nSkript vyu\u017e\u00edv\u00e1 program https://hub.github.com/[hub],\nkter\u00fd si *nejprve zprovozn\u011bte*.\n\nTesty jsou napsan\u00e9 tak, \u017ee pokud v\u00e1\u0161 program funguje dle zad\u00e1n\u00ed,\ndaj\u00ed se pou\u0161t\u011bt opakovan\u011b. Pokud ale dle zad\u00e1n\u00ed nefunguje,\nje t\u0159eba smazat v\u0161echny \u0161t\u00edtky.\nAlternativn\u011b m\u016f\u017eete testovac\u00ed repozit\u00e1\u0159e smazat pomoc\u00ed skriptu\n`test_environment/delete.sh` (pot\u0159eba scope `delete_repo`) a vytvo\u0159it znovu.\nVytv\u00e1\u0159en\u00ed repozit\u00e1\u0159\u016f a Pull Request\u016f m\u016f\u017ee trvat jednotky minut.\n\nPro spu\u0161t\u011bn\u00ed test\u016f nastavte stejn\u00e9 prom\u011bnn\u00e9 prost\u0159ed\u00ed (`GH_TOKEN` a `GH_USER`).\n\n[source,console]\n$ export GH_USER=anicka\n$ export GH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n$ python -m pytest -v test\n\nTesty v souboru test_radioactive_waste.py trvaj\u00ed dlouho a maj\u00ed potenci\u00e1l\nvy\u0159adit v\u00e1s na hodinu z p\u0159\u00edstupu ke GitHub API.\nKdy\u017e lad\u00edte ostatn\u00ed testy, doporu\u010dujeme je vyp\u00ednat pomoc\u00ed p\u0159ep\u00edna\u010de `-k`:\n\n[source,console]\n$ python -m pytest -v -k \"not radioactive\" test\n\nTesty p\u0159edpokl\u00e1daj\u00ed, \u017ee se \u0161t\u00edtky m\u011bn\u00ed podle b\u011bhu p\u0159edchoz\u00edch test\u016f.\nNepou\u0161t\u011bjte tedy jednotliv\u00e9 testy samostatn\u011b.\n\nTesty si m\u016f\u017eete zkop\u00edrovat k sob\u011b do repozit\u00e1\u0159e, pova\u017eujte je za Public Domain.\nNep\u0159idejte ale do repozit\u00e1\u0159e omylem soubor `auth.real.cfg`,\nkter\u00fd se v pr\u016fb\u011bhu test\u016f do\u010dasn\u011b vytv\u00e1\u0159\u00ed a obsahuje v\u00e1\u0161 token.\n\nNOTE: Testy proti \u017eiv\u00e9mu API, nav\u00edc napsan\u00e9 tak,\n\u017ee se jednotliv\u00e9 testy navz\u00e1jem ovliv\u0148uj\u00ed, jsou uk\u00e1zkou toho,\njak se to nem\u00e1 d\u011blat.\nPokud naraz\u00edte v testech na probl\u00e9m, nebo nev\u00edte jak d\u00e1l, zeptejte se.\nK tomu, jak se to d\u011bl\u00e1 po\u0159\u00e1dn\u011b, se v p\u0159edm\u011btu dostaneme pozd\u011bji.\n\nWARNING: Testy netestuj\u00ed barevnost v\u00fdstupu. I neobarven\u00fd v\u00fdstup projde testy.\nBarevnost kontrolujte o\u010dima.\n\n== Odevzd\u00e1n\u00ed \u00fakolu\n\nOdkazy na repozit\u00e1\u0159 a b\u011b\u017e\u00edc\u00ed aplikaci n\u00e1m po\u0161lete e-mailem.\nPro odevzd\u00e1n\u00ed v repozit\u00e1\u0159i nastavte tag `v0.2`.\n\n\n",
"description_content_type": "",
"docs_url": null,
"download_url": "https://github.com/kuzmoyev/filabel-0.2/archive/1.0.tar.gz",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/kuzmoyev/filabel-0.2",
"keywords": "filabel",
"license": "MIT",
"maintainer": "",
"maintainer_email": "",
"name": "filabel-kuzmoyev",
"package_url": "https://pypi.org/project/filabel-kuzmoyev/",
"platform": "",
"project_url": "https://pypi.org/project/filabel-kuzmoyev/",
"project_urls": {
"Download": "https://github.com/kuzmoyev/filabel-0.2/archive/1.0.tar.gz",
"Homepage": "https://github.com/kuzmoyev/filabel-0.2"
},
"release_url": "https://pypi.org/project/filabel-kuzmoyev/1.0/",
"requires_dist": [
"click",
"requests",
"flask",
"jinja2"
],
"requires_python": ">=3.5.0",
"summary": "Tool for labeling PRs at GitHub by globs.",
"version": "1.0"
},
"last_serial": 4450267,
"releases": {
"1.0": [
{
"comment_text": "",
"digests": {
"md5": "3bf57a75884ed7cb3e08ef0927068900",
"sha256": "527e06bdc33bef2a88f6c65afb9615ee2582cc3ea84f935af7716c5a3b9ef819"
},
"downloads": -1,
"filename": "filabel_kuzmoyev-1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "3bf57a75884ed7cb3e08ef0927068900",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.5.0",
"size": 10656,
"upload_time": "2018-11-04T17:58:12",
"url": "https://files.pythonhosted.org/packages/ab/cc/31e77170d9282083908bb2ff97db27456fe18e724ea5087e2d2b0ceb7d76/filabel_kuzmoyev-1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b7869459537658db501fd76506a82b7a",
"sha256": "24f35ef0e42df45a7a00c58ead361c81676b3c316399f8a455d86669b57fedce"
},
"downloads": -1,
"filename": "filabel_kuzmoyev-1.0.tar.gz",
"has_sig": false,
"md5_digest": "b7869459537658db501fd76506a82b7a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5.0",
"size": 11026,
"upload_time": "2018-11-04T17:58:14",
"url": "https://files.pythonhosted.org/packages/99/16/1913282e734ef6b8fda826411f5ea06ade118852e232c7c46b6f2f6bd127/filabel_kuzmoyev-1.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "3bf57a75884ed7cb3e08ef0927068900",
"sha256": "527e06bdc33bef2a88f6c65afb9615ee2582cc3ea84f935af7716c5a3b9ef819"
},
"downloads": -1,
"filename": "filabel_kuzmoyev-1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "3bf57a75884ed7cb3e08ef0927068900",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.5.0",
"size": 10656,
"upload_time": "2018-11-04T17:58:12",
"url": "https://files.pythonhosted.org/packages/ab/cc/31e77170d9282083908bb2ff97db27456fe18e724ea5087e2d2b0ceb7d76/filabel_kuzmoyev-1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b7869459537658db501fd76506a82b7a",
"sha256": "24f35ef0e42df45a7a00c58ead361c81676b3c316399f8a455d86669b57fedce"
},
"downloads": -1,
"filename": "filabel_kuzmoyev-1.0.tar.gz",
"has_sig": false,
"md5_digest": "b7869459537658db501fd76506a82b7a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5.0",
"size": 11026,
"upload_time": "2018-11-04T17:58:14",
"url": "https://files.pythonhosted.org/packages/99/16/1913282e734ef6b8fda826411f5ea06ade118852e232c7c46b6f2f6bd127/filabel_kuzmoyev-1.0.tar.gz"
}
]
}