From be64726539c600da512ab2e00ec1e462b4371b4b Mon Sep 17 00:00:00 2001 From: forcecore Date: Tue, 18 Oct 2022 08:08:04 +0000 Subject: [PATCH 1/2] Fix for Python 3.9 --- .travis.yml | 2 +- keyctl/key.py | 2 +- keyctl/keyctlwrapper.py | 10 ++++++---- setup.py | 4 ++-- tests/test_keyctlwrapper.py | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6d3f082..3182559 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: python -python: 2.7 +python: 3.9 sudo: required diff --git a/keyctl/key.py b/keyctl/key.py index 1f5f28a..ec465e4 100644 --- a/keyctl/key.py +++ b/keyctl/key.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -from keyctlwrapper import KeyctlWrapper +from .keyctlwrapper import KeyctlWrapper # ------------------------------------------------------------------- diff --git a/keyctl/keyctlwrapper.py b/keyctl/keyctlwrapper.py index c7c41ac..0b5ff53 100644 --- a/keyctl/keyctlwrapper.py +++ b/keyctl/keyctlwrapper.py @@ -50,21 +50,23 @@ class KeyctlWrapper(object): default_keyring = '@u' default_keytype = 'user' - def __init__(self, keyring=default_keyring, keytype=default_keytype): + def __init__(self, keyring: str=default_keyring, keytype: str=default_keytype): self.keyring = keyring self.keytype = keytype # --------------------------------------------------------------- @staticmethod - def _system(args, data=None, check=True): + def _system(args, data: str=None, check=True): + try: p = subprocess.Popen( args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, - bufsize=4096 + bufsize=4096, + text=True, ) except OSError as e: raise OSError('Command \'{}\' execution failed. ErrMsg:{}'.format(' '.join(args), e)) @@ -78,7 +80,7 @@ def _system(args, data=None, check=True): if not check: return ret, out, err - elif ret is 0: + elif ret == 0: return out else: raise KeyctlOperationError(errmsg='({}){} {}'.format(ret, err, out)) diff --git a/setup.py b/setup.py index 346b097..8ffe496 100755 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ readme = readme.replace('\r', '') except ImportError: readme = 'see README.md' - print 'NO README CREATED' + print('NO README CREATED') setup( @@ -40,7 +40,7 @@ 'Intended Audience :: Developers', 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', 'Programming Language :: Python', - 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.9', 'Environment :: X11 Applications :: Qt', 'Topic :: Utilities', ] diff --git a/tests/test_keyctlwrapper.py b/tests/test_keyctlwrapper.py index 16cbea1..37f292e 100644 --- a/tests/test_keyctlwrapper.py +++ b/tests/test_keyctlwrapper.py @@ -111,7 +111,7 @@ def test_get_data_from_id(self, empty_keyring): # hex mode data = keyctl.get_data_from_id(keyid, 'hEx') - assert data == content.encode('hex') + assert data == content.encode("utf8").hex() # --------------------------------------------------------------- From 6d69bb2b119653b5cdbb47b3145d4e7e33cdce93 Mon Sep 17 00:00:00 2001 From: forcecore Date: Tue, 18 Oct 2022 08:34:51 +0000 Subject: [PATCH 2/2] Add type annotations --- keyctl/key.py | 9 +++++---- keyctl/keyctlwrapper.py | 15 ++++++++------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/keyctl/key.py b/keyctl/key.py index ec465e4..041d59a 100644 --- a/keyctl/key.py +++ b/keyctl/key.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- +from typing import List from .keyctlwrapper import KeyctlWrapper @@ -22,7 +23,7 @@ def __init__(self, keyid=None, keyring=None, keytype=None): # --------------------------------------------------------------- @staticmethod - def _init_keyctl(keyring=None, keytype=None): + def _init_keyctl(keyring=None, keytype=None) -> KeyctlWrapper: if keyring is not None and keytype is not None: keyctl = KeyctlWrapper(keyring=keyring, keytype=keytype) elif keyring is not None: @@ -45,7 +46,7 @@ def _load_key(self, keyid): # --------------------------------------------------------------- @classmethod - def list(cls, keyring=None, keytype=None): + def list(cls, keyring=None, keytype=None) -> List["Key"]: keyctl = cls._init_keyctl(keyring, keytype) keyids = keyctl.get_all_key_ids() @@ -59,7 +60,7 @@ def list(cls, keyring=None, keytype=None): # --------------------------------------------------------------- @classmethod - def search(cls, name, keyring=None, keytype=None): + def search(cls, name, keyring=None, keytype=None) -> "Key": key = cls(keyring, keytype) key.id = key._keyctl.get_id_from_name(name) @@ -72,7 +73,7 @@ def search(cls, name, keyring=None, keytype=None): # --------------------------------------------------------------- @classmethod - def add(cls, name, data, keyring=None, keytype=None): + def add(cls, name, data, keyring=None, keytype=None) -> "Key": keyctl = cls._init_keyctl(keyring, keytype) keyid = keyctl.add_key(name, data) diff --git a/keyctl/keyctlwrapper.py b/keyctl/keyctlwrapper.py index 0b5ff53..3e929c1 100644 --- a/keyctl/keyctlwrapper.py +++ b/keyctl/keyctlwrapper.py @@ -2,6 +2,7 @@ # -*- coding: utf-8 -*- import subprocess +from typing import List # ------------------------------------------------------------------- @@ -87,7 +88,7 @@ def _system(args, data: str=None, check=True): # --------------------------------------------------------------- - def get_all_key_ids(self): + def get_all_key_ids(self) -> List[int]: out = self._system(['keyctl', 'rlist', self.keyring]) l = out.split() l = [int(x) for x in l] @@ -95,7 +96,7 @@ def get_all_key_ids(self): # --------------------------------------------------------------- - def get_id_from_name(self, name): + def get_id_from_name(self, name: str) -> int: # ret, out, err = self._system(['keyctl', 'request', self.keytype, name], check=False) ret, out, err = self._system(['keyctl', 'search', self.keyring, self.keytype, name], check=False) @@ -108,7 +109,7 @@ def get_id_from_name(self, name): # --------------------------------------------------------------- - def get_name_from_id(self, keyid): + def get_name_from_id(self, keyid: int) -> str: ret, out, err = self._system(['keyctl', 'rdescribe', str(keyid)], check=False) if ret != 0: @@ -120,7 +121,7 @@ def get_name_from_id(self, keyid): # --------------------------------------------------------------- - def get_data_from_id(self, keyid, mode='raw'): + def get_data_from_id(self, keyid: int, mode='raw'): if mode.lower() == 'raw': kmode = 'pipe' elif mode.lower() == 'hex': @@ -143,7 +144,7 @@ def get_data_from_id(self, keyid, mode='raw'): # --------------------------------------------------------------- - def add_key(self, name, data): + def add_key(self, name: str, data) -> int: try: keyid = self.get_id_from_name(name) raise KeyAlreadyExistError(keyid=keyid, keyname=name) @@ -157,7 +158,7 @@ def add_key(self, name, data): # --------------------------------------------------------------- - def update_key(self, keyid, data): + def update_key(self, keyid: int, data): ret, out, err = self._system(['keyctl', 'pupdate', str(keyid)], data, check=False) if ret == 1: @@ -167,7 +168,7 @@ def update_key(self, keyid, data): # --------------------------------------------------------------- - def remove_key(self, keyid): + def remove_key(self, keyid: int): # revoke first, because unlinking is slow ret, out, err = self._system(['keyctl', 'revoke', str(keyid)], check=False) if ret == 1: