Linter updates to py version
This commit is contained in:
parent
1e9b9d9685
commit
6cf522966e
@ -11,11 +11,14 @@ from urllib.parse import urlparse
|
|||||||
|
|
||||||
|
|
||||||
class Intent(NamedTuple):
|
class Intent(NamedTuple):
|
||||||
|
"""Intent contains a url requested to be opened"""
|
||||||
url: str
|
url: str
|
||||||
|
# referrer isn't possible to be captured at this time
|
||||||
referrer: str
|
referrer: str
|
||||||
|
|
||||||
|
|
||||||
class BrowserRule(NamedTuple):
|
class BrowserRule(NamedTuple):
|
||||||
|
"""BrowserRule is matches a url and launches it in a browser"""
|
||||||
match_func: Callable[[Intent], bool]
|
match_func: Callable[[Intent], bool]
|
||||||
command: str
|
command: str
|
||||||
args: List[str] = []
|
args: List[str] = []
|
||||||
@ -26,9 +29,11 @@ class BrowserRule(NamedTuple):
|
|||||||
|
|
||||||
def launch(self, intent: Intent) -> None:
|
def launch(self, intent: Intent) -> None:
|
||||||
"""Launch the command"""
|
"""Launch the command"""
|
||||||
Popen(["nohup", self.command, *self.args, intent.url], shell=False)
|
with Popen(["nohup", self.command, *self.args, intent.url], shell=False):
|
||||||
|
pass
|
||||||
|
|
||||||
def maybe_launch(self, intent: Intent) -> bool:
|
def maybe_launch(self, intent: Intent) -> bool:
|
||||||
|
"""Launch URL in a browser if it matches the rules"""
|
||||||
if self.matched(intent):
|
if self.matched(intent):
|
||||||
self.launch(intent)
|
self.launch(intent)
|
||||||
return True
|
return True
|
||||||
@ -43,10 +48,7 @@ MatchFunc = Callable[[Intent], bool]
|
|||||||
def match_regex(rules: List[str]) -> MatchFunc:
|
def match_regex(rules: List[str]) -> MatchFunc:
|
||||||
"""Returns a function to handle urls and match them using regex"""
|
"""Returns a function to handle urls and match them using regex"""
|
||||||
def match_func(intent: Intent) -> bool:
|
def match_func(intent: Intent) -> bool:
|
||||||
for rule in rules:
|
return any(match(rule, intent.url) for rule in rules)
|
||||||
if match(rule, intent.url):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
return match_func
|
return match_func
|
||||||
|
|
||||||
@ -55,10 +57,10 @@ def match_host_regex(rules: List[str]) -> MatchFunc:
|
|||||||
"""Returns a function to handle urls and match them using regex"""
|
"""Returns a function to handle urls and match them using regex"""
|
||||||
def match_func(intent: Intent) -> bool:
|
def match_func(intent: Intent) -> bool:
|
||||||
url = urlparse(intent.url)
|
url = urlparse(intent.url)
|
||||||
for rule in rules:
|
if not url.hostname:
|
||||||
if match(rule, url.hostname):
|
return False
|
||||||
return True
|
|
||||||
return False
|
return any(match(rule, url.hostname) for rule in rules)
|
||||||
|
|
||||||
return match_func
|
return match_func
|
||||||
|
|
||||||
@ -76,18 +78,21 @@ def match_hostname(hostnames: List[str]) -> MatchFunc:
|
|||||||
|
|
||||||
|
|
||||||
def any_match(rules: Iterable[MatchFunc]) -> MatchFunc:
|
def any_match(rules: Iterable[MatchFunc]) -> MatchFunc:
|
||||||
|
"""Returns a functino that will check against any match rules
|
||||||
|
|
||||||
|
Equivalent to using `any(...)`"""
|
||||||
def match_func(intent: Intent) -> bool:
|
def match_func(intent: Intent) -> bool:
|
||||||
return any(r(intent) for r in rules)
|
return any(r(intent) for r in rules)
|
||||||
|
|
||||||
return match_func
|
return match_func
|
||||||
|
|
||||||
|
|
||||||
def default(x: Any) -> bool:
|
def default(_: Any) -> bool:
|
||||||
"""Always returns True"""
|
"""Always returns True"""
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def noop(x: Any) -> bool:
|
def noop(_: Any) -> bool:
|
||||||
"""Always returns False"""
|
"""Always returns False"""
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -183,11 +188,13 @@ browser_rules = [
|
|||||||
|
|
||||||
|
|
||||||
def open_url(url: str, referrer=None) -> bool:
|
def open_url(url: str, referrer=None) -> bool:
|
||||||
|
"""Open a given url based on rule set"""
|
||||||
intent = Intent(url, referrer)
|
intent = Intent(url, referrer)
|
||||||
return any(rule.maybe_launch(intent) for rule in browser_rules)
|
return any(rule.maybe_launch(intent) for rule in browser_rules)
|
||||||
|
|
||||||
|
|
||||||
def main(urls: List[str], referrer=None):
|
def main(urls: List[str]):
|
||||||
|
"""Recieves list of urls and opens them each with provided rule sets"""
|
||||||
failed_urls: List[str] = []
|
failed_urls: List[str] = []
|
||||||
for url in urls:
|
for url in urls:
|
||||||
if not open_url(url):
|
if not open_url(url):
|
||||||
|
Loading…
Reference in New Issue
Block a user