poikilos
3 years ago
1 changed files with 155 additions and 0 deletions
@ -0,0 +1,155 @@ |
|||
#!/usr/bin/env python3 |
|||
''' |
|||
Specify a label or search term, optionally with a page #. |
|||
|
|||
Examples: |
|||
# label: |
|||
enlynx.py Bucket_Game |
|||
# label and page number: |
|||
enlynx.py Bucket_Game page 2 |
|||
# multiple labels: |
|||
enlynx.py Bucket_Game urgent |
|||
# closed issues only: |
|||
enlynx.py Bucket_Game --closed |
|||
# both closed and open issues: |
|||
enlynx.py Bucket_Game --closed --open |
|||
# search: |
|||
enlynx.py find SIGSEGV |
|||
# search for 2 terms: |
|||
enlynx.py find mobs find walk |
|||
# or |
|||
enlynx.py find mobs AND walk |
|||
# search for a closed issue: |
|||
enlynx.py find SIGSEGV --closed |
|||
# label with search: |
|||
enlynx.py Bucket_Game find mobs |
|||
# label with search, next page: |
|||
enlynx.py Bucket_Game find node page 2 |
|||
|
|||
|
|||
''' |
|||
me = "enlynx.py" |
|||
lynxCmd = "lynx" |
|||
sessionPath = "/tmp/enlynx.lynx-session" |
|||
import sys |
|||
import subprocess |
|||
|
|||
enc = {} # URL Encoded single characters |
|||
enc[':'] = '%3A' |
|||
# ^ Do this with urllib if there are many more |
|||
|
|||
# see <https://stackoverflow.com/questions/5574702/how-to-print-to-stderr-in-python> |
|||
def error(*args, **kwargs): |
|||
print(*args, file=sys.stderr, **kwargs) |
|||
|
|||
verbose = True |
|||
|
|||
def debug(msg): |
|||
if not verbose: |
|||
return |
|||
sys.stderr.write("{}\n".format(msg)) |
|||
sys.stderr.flush() |
|||
|
|||
|
|||
def usage(): |
|||
error(__doc__) |
|||
|
|||
|
|||
def toSubQueryValue(value): |
|||
''' |
|||
Convert the value to one that will fit in a |
|||
key+urlencoded(colon)+value string for GitHub queries. |
|||
|
|||
This function is copied to multiple scripts so they have no |
|||
dependencies: |
|||
- enissue.py |
|||
- enlynx.py |
|||
''' |
|||
if " " in value: |
|||
value = '"' + value.replace(" ", "+") + '"' |
|||
return value |
|||
|
|||
|
|||
def toSubQuery(key, value): |
|||
return key + enc[':'] + value |
|||
|
|||
|
|||
base_url = "https://github.com/poikilos/EnlivenMinetest" |
|||
query_url = base_url + "/issues" |
|||
open_q = "?q=" + toSubQuery("is", "issue") + '+' + toSubQuery("is", "open") |
|||
any_q = "?q=" + toSubQuery("is", "issue") |
|||
closed_q = "?q=" + toSubQuery("is", "issue") + '+' + toSubQuery("is", "closed") |
|||
|
|||
|
|||
if __name__ == "__main__": |
|||
prev_arg = None |
|||
findStrings = [] |
|||
base_q = open_q + "+" |
|||
page_param = "" |
|||
_closed = None |
|||
_open = None |
|||
labels_subqueries = "" |
|||
for arg in sys.argv[1:]: |
|||
# ^ skip arg 0 since it is self |
|||
# Erase prev_arg in each case except "else" to turn off |
|||
# context-sensitivity after the term after the command is found. |
|||
if prev_arg == "find": |
|||
findStrings.append(arg) |
|||
prev_arg = None |
|||
elif prev_arg == "page": |
|||
page_param="&page=2" |
|||
prev_arg = None |
|||
else: |
|||
if arg == "--closed": |
|||
_closed = True |
|||
elif arg == "--open": |
|||
_open = True |
|||
elif arg == "find": |
|||
prev_arg = arg |
|||
elif arg == "AND": |
|||
if len(findStrings) == 0: |
|||
usage() |
|||
error("Error: You can only use AND after find" |
|||
" and after another keyword. To literally" |
|||
" search for the word \"AND\" itself," |
|||
" say find before the word:\n" |
|||
" {} find CREEPS find AND find WEIRDOS\n" |
|||
"".format(me)) |
|||
exit(1) |
|||
prev_arg = arg |
|||
elif arg == "page": |
|||
prev_arg = arg |
|||
else: |
|||
encArg = toSubQueryValue(arg) |
|||
# if encArg != arg: |
|||
# debug("* encoding label as '{}'".format(encArg)) |
|||
# else: |
|||
debug("* adding label {}".format(encArg)) |
|||
|
|||
labels_subqueries += toSubQuery('label', encArg) + "+" |
|||
|
|||
# Ensure there aren't any dangling commands *after* the loop: |
|||
if prev_arg is not None: |
|||
usage() |
|||
error("Error: You must specify a search term after {}." |
|||
"".format(prev_arg)) |
|||
exit(1) |
|||
|
|||
if (_closed is True) and (_open is True): |
|||
base_q = any_q + '+' |
|||
elif _open is True: |
|||
base_q = open_q + '+' # This is the default |
|||
elif _closed is True: |
|||
base_q = closed_q + '+' |
|||
|
|||
|
|||
|
|||
for find_str in findStrings: |
|||
base_q += find_str + "+" |
|||
# else: (dangling '+' at the end when labels_subqueries=="" is ok) |
|||
|
|||
query = base_q + labels_subqueries + page_param |
|||
url = query_url + query |
|||
print("URL: {}".format(url)) |
|||
|
|||
subprocess.call([lynxCmd, '-session=' + sessionPath, url]) |
Loading…
Reference in new issue