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