diff --git a/.travis.yml b/.travis.yml index 6151656c..88065642 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ deploy: on: tags: true distributions: sdist bdist_wheel - repo: wjhpeters/tmp + repo: eduvpn/python-eduvpn-client notifications: email: on_fail: always diff --git a/README.md b/README.md index 8f4cab3a..0f8d9aa4 100644 --- a/README.md +++ b/README.md @@ -29,4 +29,4 @@ You can find the documentation on [http://python-eduvpn-client.readthedocs.io](h Development =========== -[![Build Status](https://travis-ci.org/wjhpeters/tmp.svg?branch=master)](https://travis-ci.org/wjhpeters/tmp) +[![Build Status](https://travis-ci.org/eduvpn/python-eduvpn-client.svg?branch=master)](https://travis-ci.org/eduvpn/python-eduvpn-client) diff --git a/eduvpn/actions/activate.py b/eduvpn/actions/activate.py index c32c862d..8c0679d8 100644 --- a/eduvpn/actions/activate.py +++ b/eduvpn/actions/activate.py @@ -5,6 +5,7 @@ import logging import gi +gi.require_version('Gtk', '3.0') from gi.repository import GLib, Gtk from eduvpn.util import error_helper, thread_helper from eduvpn.oauth2 import oauth_from_token @@ -20,8 +21,6 @@ from eduvpn.metadata import Metadata from typing import Any, Union, List - -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) diff --git a/eduvpn/actions/add.py b/eduvpn/actions/add.py index c5855b02..cdd99394 100644 --- a/eduvpn/actions/add.py +++ b/eduvpn/actions/add.py @@ -8,10 +8,10 @@ from eduvpn.steps.instance import fetch_instance_step from eduvpn.steps.custom_url import custom_url import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) diff --git a/eduvpn/actions/delete.py b/eduvpn/actions/delete.py index 4c0eecc0..aa3600d7 100644 --- a/eduvpn/actions/delete.py +++ b/eduvpn/actions/delete.py @@ -5,6 +5,7 @@ import logging import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GLib from eduvpn.manager import delete_provider from eduvpn.notify import notify, init_notify @@ -12,7 +13,6 @@ from eduvpn.steps.start import refresh_start -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) diff --git a/eduvpn/actions/select.py b/eduvpn/actions/select.py index 8c43408f..a4cf6add 100644 --- a/eduvpn/actions/select.py +++ b/eduvpn/actions/select.py @@ -11,11 +11,12 @@ from eduvpn.steps.messages import fetch_messages from eduvpn.brand import get_brand import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk from eduvpn.metadata import Metadata from typing import Optional -gi.require_version('Gtk', '3.0') + logger = logging.getLogger(__name__) diff --git a/eduvpn/actions/switch.py b/eduvpn/actions/switch.py index dc69995e..9fb34862 100644 --- a/eduvpn/actions/switch.py +++ b/eduvpn/actions/switch.py @@ -5,6 +5,7 @@ import logging import gi +gi.require_version('Gtk', '3.0') from gi.repository import GLib, Gtk from eduvpn.notify import notify, init_notify from eduvpn.actions.activate import activate_connection @@ -13,7 +14,6 @@ from eduvpn.metadata import Metadata -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) diff --git a/eduvpn/actions/vpn_status.py b/eduvpn/actions/vpn_status.py index 3b4c59ff..e05bc1e4 100644 --- a/eduvpn/actions/vpn_status.py +++ b/eduvpn/actions/vpn_status.py @@ -5,13 +5,14 @@ import logging import gi +gi.require_version('Gtk', '3.0') from gi.repository import GLib, Gtk from eduvpn.notify import notify, init_notify from eduvpn.manager import list_active from eduvpn.util import metadata_of_selected from typing import Optional -gi.require_version('Gtk', '3.0') + logger = logging.getLogger(__name__) diff --git a/eduvpn/brand.py b/eduvpn/brand.py index 05df1317..df4f29e7 100644 --- a/eduvpn/brand.py +++ b/eduvpn/brand.py @@ -12,7 +12,12 @@ def get_brand(lets_connect): # type: (bool) -> Tuple[str, str] - """Returns the name for the app currently in use.""" + """ + args: + lets_connect (bool): Let's connect mode? + returns: + (str, str): logo, name + """ if lets_connect: return lets_connect_main_logo, lets_connect_name else: diff --git a/eduvpn/main.py b/eduvpn/main.py index fb888bdf..88848bb1 100644 --- a/eduvpn/main.py +++ b/eduvpn/main.py @@ -5,6 +5,7 @@ import logging import gi +gi.require_version('Gtk', '3.0') from os import geteuid from sys import exit from gi.repository import GObject, Gtk @@ -14,7 +15,6 @@ from eduvpn import config from typing import Tuple from eduvpn.ui import EduVpnApp -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) log_format = format_ = '%(asctime)s - %(levelname)s - %(name)s - %(message)s' @@ -23,18 +23,13 @@ def parse_args(): # type: () -> Tuple[int, str, str, str, bool] """ Parses command line arguments: returns: - (logging level (int), secure internet uri (str), - institute access uri (str), verify key (str)) + (logging level (int), secure internet uri (str), institute access uri (str), verify key (str)) """ parser = ArgumentParser() - parser.add_argument('-d', '--debug', action='store_true', - help="enable debug logging") - parser.add_argument('-v', '--version', action='store_true', - help="print version and exit") - parser.add_argument('-t', '--test', action='store_true', - help="use test discovery servers") - parser.add_argument('-l', '--lets_connect', action='store_true', - help="Enable 'Let's Connect!' mode") + parser.add_argument('-d', '--debug', action='store_true', help="enable debug logging") + parser.add_argument('-v', '--version', action='store_true', help="print version and exit") + parser.add_argument('-t', '--test', action='store_true', help="use test discovery servers") + parser.add_argument('-l', '--lets_connect', action='store_true', help="Enable 'Let's Connect!' mode") args = parser.parse_args() if args.version: @@ -50,23 +45,16 @@ def parse_args(): # type: () -> Tuple[int, str, str, str, bool] if args.test: logger.warning("using test discovery URLs") - return (level, config.secure_internet_uri_dev, - config.institute_access_uri_dev, - config.verify_key_dev, - args.lets_connect) + return (level, config.secure_internet_uri_dev, config.institute_access_uri_dev, + config.verify_key_dev, args.lets_connect) else: logger.debug("using production discovery URLs") - return (level, config.secure_internet_uri, - config.institute_access_uri, - config.verify_key, - args.lets_connect) + return (level, config.secure_internet_uri, config.institute_access_uri, + config.verify_key, args.lets_connect) -def init(lets_connect): - # type: (bool) -> EduVpnApp - (level, secure_internet_uri, - institute_access_uri, verify_key, - lets_connect_arg) = parse_args() +def init(lets_connect): # type: (bool) -> EduVpnApp + (level, secure_internet_uri, institute_access_uri, verify_key, lets_connect_arg) = parse_args() lets_connect = lets_connect or lets_connect_arg if geteuid() == 0: logger.error("Running eduVPN client as root is not supported (yet)") diff --git a/eduvpn/manager.py b/eduvpn/manager.py index f58108c7..e21aaf2e 100644 --- a/eduvpn/manager.py +++ b/eduvpn/manager.py @@ -249,8 +249,8 @@ def update_config_provider(meta, config_dict): # type: (Metadata, dict) -> None if have_dbus(): connection = NetworkManager.Settings.GetConnectionByUuid(meta.uuid) # type: ignore old_settings = connection.GetSettings() - nm_config['vpn']['data'].update({'cert': (old_settings['vpn']['data']['cert']), - 'key': (old_settings['vpn']['data']['key'])}) # type: ignore + nm_config['vpn']['data'].update({'cert': old_settings['vpn']['data']['cert'], + 'key': old_settings['vpn']['data']['key']}) # type: ignore connection.Update(nm_config) diff --git a/eduvpn/metadata.py b/eduvpn/metadata.py index 822871b6..03ff6707 100644 --- a/eduvpn/metadata.py +++ b/eduvpn/metadata.py @@ -17,8 +17,7 @@ distibuted_tokens_path = os.path.join(others_path, 'distributed.json') -def get_distributed_tokens(): - # type: () -> Any +def get_distributed_tokens(): # type: () -> Any json_path = distibuted_tokens_path try: with open(json_path, 'r') as f: @@ -51,8 +50,7 @@ def __init__(self): self.profile_display_name = "Unknown" # type: str @staticmethod - def from_uuid(uuid, display_name=None): - # type: (str, str) -> Metadata + def from_uuid(uuid, display_name=None): # type: (str, str) -> Metadata metadata_path = os.path.join(providers_path, uuid + '.json') metadata = Metadata() try: @@ -72,8 +70,7 @@ def from_uuid(uuid, display_name=None): metadata.display_name = uuid return metadata - def write(self): - # type: () -> None + def write(self): # type: () -> None if not self.uuid: # raise EduvpnException('uuid field not set') logger.warning("uuid field not yet set") @@ -90,8 +87,7 @@ def write(self): if self.authorization_type == 'distributed': self.write_distributed_token() - def write_distributed_token(self): - # type: () -> None + def write_distributed_token(self): # type: () -> None tokens = get_distributed_tokens() if self.discovery_uri in tokens: tokens[self.discovery_uri]['token'] = self.token @@ -106,13 +102,11 @@ def write_distributed_token(self): distibuted_tokens_path)) f.write(serialized) - def update_token(self, token): - # type: (dict) -> None + def update_token(self, token): # type: (dict) -> None self.token = token self.write() - def refresh_token(self): - # type: () -> None + def refresh_token(self): # type: () -> None if self.authorization_type == 'distributed': tokens = get_distributed_tokens() if self.discovery_uri in tokens: @@ -121,16 +115,14 @@ def refresh_token(self): self.token_endpoint = tokens[self.discovery_uri]['token_endpoint'] -def get_all_metadata(): - # type: () -> List[Metadata] +def get_all_metadata(): # type: () -> List[Metadata] if not os.access(providers_path, os.X_OK): return [] metadatas = [Metadata.from_uuid(i[:-5]) for i in os.listdir(providers_path) if i.endswith('.json')] return metadatas -def reuse_token_from_base_uri(instance_base_uri): - # type: (str) -> Optional[dict] +def reuse_token_from_base_uri(instance_base_uri): # type: (str) -> Optional[dict] for metadata in get_all_metadata(): if metadata.connection_type in (u'Institute Access', u'Custom Instance') and \ metadata.instance_base_uri == instance_base_uri: diff --git a/eduvpn/notify.py b/eduvpn/notify.py index 5e590b3c..df3c1155 100644 --- a/eduvpn/notify.py +++ b/eduvpn/notify.py @@ -5,6 +5,8 @@ from os import path import gi +gi.require_version('Notify', '0.7') +gi.require_version('Gtk', '3.0') from gi.repository import Notify, GdkPixbuf from repoze.lru import lru_cache from eduvpn.util import have_dbus @@ -13,13 +15,8 @@ from gi.repository import Notify -gi.require_version('Notify', '0.7') -gi.require_version('Gtk', '3.0') - - @lru_cache(maxsize=1) -def init_notify(lets_connect): - # type: (bool) -> Notify +def init_notify(lets_connect): # type: (bool) -> Notify icon, name = get_brand(lets_connect) Notify.init(name + " client") image_path = path.join(icon) @@ -30,8 +27,7 @@ def init_notify(lets_connect): return notification -def notify(notification, msg, small_msg=None): - # type: (Notify, str, Optional[Any]) -> None +def notify(notification, msg, small_msg=None): # type: (Notify, str, Optional[Any]) -> None notification.update(msg, small_msg) if have_dbus(): notification.show() diff --git a/eduvpn/oauth2.py b/eduvpn/oauth2.py index 37a34313..44828ebe 100644 --- a/eduvpn/oauth2.py +++ b/eduvpn/oauth2.py @@ -53,7 +53,12 @@ def get_open_port(): # type: () -> int - """Find an unused local port.""" + """ + Find an unused local port. + + returns: + int: an unused port number + """ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("", 0)) s.listen(1) @@ -99,8 +104,7 @@ def do_GET(self): return parse_qs(parsed.query) -def stringify_image(logo): - # type: (str) -> str +def stringify_image(logo): # type: (str) -> str import base64 return base64.b64encode(open(logo, 'rb').read()).decode('ascii') diff --git a/eduvpn/openvpn.py b/eduvpn/openvpn.py index fbfa45db..1ea6a5f3 100644 --- a/eduvpn/openvpn.py +++ b/eduvpn/openvpn.py @@ -36,8 +36,7 @@ def parse_ovpn(configtext): # type: (str) -> dict """ config = {} - def configurator(text): - # type: (str) -> Any + def configurator(text): # type: (str) -> Any for line in text.split('\n'): split = line.split('#')[0].strip().split() if len(split) == 0: diff --git a/eduvpn/steps/fetching.py b/eduvpn/steps/fetching.py index 7279a8f2..a2146b1f 100644 --- a/eduvpn/steps/fetching.py +++ b/eduvpn/steps/fetching.py @@ -2,7 +2,6 @@ # # Copyright: 2017, The Commons Conservancy eduVPN Programme # SPDX-License-Identifier: GPL-3.0+ - import logging from eduvpn.brand import get_brand import gi diff --git a/eduvpn/steps/reauth.py b/eduvpn/steps/reauth.py index 0696b32b..5fd39798 100644 --- a/eduvpn/steps/reauth.py +++ b/eduvpn/steps/reauth.py @@ -5,13 +5,13 @@ import logging import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk from eduvpn.steps.browser import browser_step from eduvpn.metadata import Metadata from typing import Dict -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) diff --git a/eduvpn/steps/start.py b/eduvpn/steps/start.py index 558cd140..97c3289b 100644 --- a/eduvpn/steps/start.py +++ b/eduvpn/steps/start.py @@ -6,13 +6,13 @@ import base64 import logging import gi +gi.require_version('Gtk', '3.0') from eduvpn.manager import list_providers from eduvpn.util import bytes2pixbuf, get_pixbuf from eduvpn.brand import get_brand from gi.repository import Gtk -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) diff --git a/eduvpn/steps/totp_enroll.py b/eduvpn/steps/totp_enroll.py index e987c2a2..59966328 100644 --- a/eduvpn/steps/totp_enroll.py +++ b/eduvpn/steps/totp_enroll.py @@ -8,6 +8,7 @@ from future.moves.urllib.parse import urlparse import qrcode import gi +gi.require_version('Gtk', '3.0') from gi.repository import GLib, Gdk, Gtk from eduvpn.util import pil2pixbuf from eduvpn.remote import two_factor_enroll_totp @@ -18,7 +19,6 @@ from typing import Any, Optional -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) diff --git a/eduvpn/ui.py b/eduvpn/ui.py index 8ea6438a..c5f66432 100644 --- a/eduvpn/ui.py +++ b/eduvpn/ui.py @@ -6,6 +6,7 @@ import logging import os import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk from eduvpn.util import get_prefix from eduvpn.crypto import make_verifier @@ -19,7 +20,6 @@ from typing import Any, Iterable -gi.require_version('Gtk', '3.0') logger = logging.getLogger(__name__) builder_files = ( 'window.ui', diff --git a/eduvpn/util.py b/eduvpn/util.py index 0f525325..b6e8b810 100644 --- a/eduvpn/util.py +++ b/eduvpn/util.py @@ -9,22 +9,21 @@ import os from os import path from future.standard_library import install_aliases +install_aliases() from repoze.lru import lru_cache import gi +gi.require_version('Gtk', '3.0') +gi.require_version('GdkPixbuf', '2.0') from gi.repository import Gtk, GdkPixbuf, GLib from eduvpn.config import icon_size from eduvpn.metadata import Metadata from eduvpn.exceptions import EduvpnException from typing import Any, Optional, Tuple -install_aliases() -gi.require_version('Gtk', '3.0') -gi.require_version('GdkPixbuf', '2.0') logger = logging.getLogger(__name__) -def make_unique_id(): - # type: () -> str +def make_unique_id(): # type: () -> str return str(uuid.uuid4())