diff --git a/client/solo/commands/moo.py b/client/solo/commands/moo.py index c16bd3dad..a67295cdb 100644 --- a/client/solo/commands/moo.py +++ b/client/solo/commands/moo.py @@ -61,16 +61,16 @@ Moo at user. """ Reimplemented from SoloFunny. """ - t = """ - _____________ -< Entromoooo! > - ------------- - \ ^__^ - \ (oo)\_______ - (__)\ )\/\\ - ||----w | - || || -""" + t = ( + "\n _____________\n" + "< Entromoooo! >\n" + " -------------\n" + " \\ ^__^\n" + " \\ (oo)\\_______\n" + " (__)\\ )\\/\\\\\n" + " ||----w |\n" + " || ||\n" + ) return t @@ -93,16 +93,16 @@ Bow to the Highness. """ Reimplemented from SoloFunny. """ - t = """ - _________________________ -< Hail to the king, baby! > - ------------------------- - \ ^__^ - \ (oo)\_______ - (__)\ )\/\\ - ||----w | - || || -""" + t = ( + "\n _________________________\n" + "< Hail to the king, baby! >\n" + " -------------------------\n" + " \\ ^__^\n" + " \\ (oo)\\_______\n" + " (__)\\ )\\/\\\\\n" + " ||----w |\n" + " || ||\n" + ) return t diff --git a/lib/entropy/cache.py b/lib/entropy/cache.py index 57b6d8eec..ac8020865 100644 --- a/lib/entropy/cache.py +++ b/lib/entropy/cache.py @@ -255,7 +255,7 @@ class EntropyCacher(Singleton): self.__cache_writer.name = "EntropyCacheWriter" self.__cache_writer.set_delay_before(True) self.__cache_writer.start() - while not self.__cache_writer.isAlive(): + while not self.__cache_writer.is_alive(): continue self.__alive = True diff --git a/lib/entropy/client/misc.py b/lib/entropy/client/misc.py index 60c53c0ab..4f82f0e82 100644 --- a/lib/entropy/client/misc.py +++ b/lib/entropy/client/misc.py @@ -205,7 +205,7 @@ class ConfigurationFiles(dict): exit_st = subprocess.call( 'diff -Bbua "%s" "%s" | ' 'egrep \'^[+-]\' | ' - 'egrep -v \'^[+-][\t ]*#|^--- |^\+\+\+ \' | ' + 'egrep -v \'^[+-][\t ]*#|^--- |^\\+\\+\\+ \' | ' 'egrep -qv \'^[-+][\t ]*$\'' % ( source_unicode, destination_unicode,), shell = True) except (IOError, OSError,): diff --git a/lib/entropy/const.py b/lib/entropy/const.py index cfad504c5..1db4241a4 100644 --- a/lib/entropy/const.py +++ b/lib/entropy/const.py @@ -983,9 +983,13 @@ def const_setup_file(myfile, gid, chmod, uid = -1): it sets the uid to the file @type uid: int """ - cur_gid = os.stat(myfile)[stat.ST_GID] - if cur_gid != gid: - os.chown(myfile, uid, gid) + if gid is not None: + cur_gid = os.stat(myfile)[stat.ST_GID] + if cur_gid != gid: + try: + os.chown(myfile, uid, gid) + except PermissionError: + pass const_set_chmod(myfile, chmod) def const_setup_directory(dirpath): diff --git a/lib/entropy/core/__init__.py b/lib/entropy/core/__init__.py index 4a4e7edf8..38d4d2515 100644 --- a/lib/entropy/core/__init__.py +++ b/lib/entropy/core/__init__.py @@ -407,7 +407,7 @@ class BaseConfigParser(dict): param = value """ # Regular expression to match new configuration file sections. - _SECTION_RE = re.compile("^\[(.*)\]$") + _SECTION_RE = re.compile(r"^\[(.*)\]$") # Starting character that denotes an ignored line. _COMMENT_CHAR = "#" diff --git a/lib/entropy/dep.py b/lib/entropy/dep.py index e38b90b6a..731c1199e 100644 --- a/lib/entropy/dep.py +++ b/lib/entropy/dep.py @@ -41,7 +41,7 @@ suffix_regexp = re.compile("^(alpha|beta|rc|pre|p)(\\d*)$") suffix_value = {"pre": -2, "p": 0, "alpha": -4, "beta": -3, "rc": -1} endversion_keys = ["pre", "p", "alpha", "beta", "rc"] -valid_category = re.compile("^\w[\w-]*") +valid_category = re.compile(r"^\w[\w-]*") invalid_atom_chars_regexp = re.compile("[()|@]") digits_group = re.compile('([0-9]+)') diff --git a/lib/entropy/locks.py b/lib/entropy/locks.py index c534a7cb8..fa902bd01 100644 --- a/lib/entropy/locks.py +++ b/lib/entropy/locks.py @@ -178,8 +178,15 @@ class ResourceLock(object): path = mapped['path'] - acquired, flock_f = self._file_lock_create( - path, blocking=blocking, shared=shared) + try: + acquired, flock_f = self._file_lock_create( + path, blocking=blocking, shared=shared) + except Exception: + # Reset TLS state so future lock attempts are not poisoned. + mapped['recursed'] = False + if mapped['ref'] is None: + mapped['shared'] = None + raise if acquired: mapped['count'] += 1 diff --git a/lib/entropy/misc.py b/lib/entropy/misc.py index d216bd693..f6f87f8a4 100644 --- a/lib/entropy/misc.py +++ b/lib/entropy/misc.py @@ -1595,8 +1595,8 @@ class FastRSS(object): else: doc = self.__minidom.Document() rss = doc.createElement("rss") - rss.setAttribute("version", "2.0") rss.setAttribute("xmlns:atom", "http://www.w3.org/2005/Atom") + rss.setAttribute("version", "2.0") channel = doc.createElement("channel") # title title = doc.createElement("title") diff --git a/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py b/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py index d6d624fb0..5add1daa5 100644 --- a/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py +++ b/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py @@ -669,7 +669,7 @@ class PortagePlugin(SpmPlugin): dbapi.melt() dbapi._aux_cache.clear() - dbapi.clear_caches() + dbapi.flush_cache() tree.dbapi = portage.dbapi.porttree.portdbapi( mysettings=dbapi.settings) diff --git a/lib/entropy/tools.py b/lib/entropy/tools.py index 6be3473c6..ce25d2c61 100644 --- a/lib/entropy/tools.py +++ b/lib/entropy/tools.py @@ -496,12 +496,12 @@ def is_valid_email(email): "&'*+/=?^_{|}~-]+)*|\"(?:" + \ "[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]" + \ "|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9]" + \ - "(?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" + \ - "|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)" + \ + "(?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" + \ + "|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.)" + \ "{3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?" + \ "|[a-z0-9-]*[a-z0-9]:(?:" + \ "[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]" + \ - "|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])" + "|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\\])" evil = re.compile(monster) if evil.match(email): return True @@ -2492,7 +2492,7 @@ def expand_plain_database_mirror(mirror, product, repository_id, branch): etpConst['databaserelativepath_basedir'] + sep + \ etpConst['currentarch'] + sep + branch -_repo_re = re.compile("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", re.IGNORECASE) +_repo_re = re.compile(r"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", re.IGNORECASE) def validate_repository_id(repository_id): """ Validate Entropy repository identifier string. @@ -2506,7 +2506,7 @@ def validate_repository_id(repository_id): return True return False -_package_re = re.compile('[a-zA-Z_0-9/\-\.\+#~@]+$') +_package_re = re.compile(r'[a-zA-Z_0-9/\-\.\+#~@]+$') def validate_package_name(package_name): """ Validate Entropy package name string. @@ -2520,7 +2520,7 @@ def validate_package_name(package_name): return True return False -_branch_re = re.compile('[a-zA-Z_0-9\-\.+]+$') +_branch_re = re.compile(r'[a-zA-Z_0-9\-\.+]+$') def validate_branch_name(branch): """ Validate Entropy branch name string. @@ -2569,11 +2569,11 @@ def is_valid_string(string): return False return True -valid_path_regexp = re.compile("^([A-Za-z0-9/\.:\-_]+)$") +valid_path_regexp = re.compile(r"^([A-Za-z0-9/\.:\-_]+)$") def is_valid_path_string(path): """ Return whether given path is a valid path string (whitelisting valid - characters). Regexp is ^([A-Za-z0-9/\.:-]+)$ and only works with ASCII + characters). Regexp is ^([A-Za-z0-9/\\.:-]+)$ and only works with ASCII paths. @param path: path to test diff --git a/lib/entropy/transceivers/uri_handlers/plugins/interfaces/ssh_plugin.py b/lib/entropy/transceivers/uri_handlers/plugins/interfaces/ssh_plugin.py index b74ff2e49..d9bb91d8b 100644 --- a/lib/entropy/transceivers/uri_handlers/plugins/interfaces/ssh_plugin.py +++ b/lib/entropy/transceivers/uri_handlers/plugins/interfaces/ssh_plugin.py @@ -272,7 +272,7 @@ class EntropySshUriHandler(EntropyUriHandler): # atomic rename return self.rename(tmp_remote_path, remote_path) - valid_lock_path = re.compile("^([A-Za-z0-9/\.:\-_~]+)$") + valid_lock_path = re.compile(r"^([A-Za-z0-9/\.:\-_~]+)$") def lock(self, remote_path): # we trust dir but not remote_path, because we do diff --git a/lib/tests/db.py b/lib/tests/db.py index 56fee3528..7636fb651 100644 --- a/lib/tests/db.py +++ b/lib/tests/db.py @@ -1051,7 +1051,7 @@ class EntropyRepositoryTest(unittest.TestCase): test_db.release_shared(opaque) opaque_shared = test_db.try_acquire_shared() - self.assert_(opaque_shared is not None) + self.assertTrue(opaque_shared is not None) self.assertRaises(RuntimeError, test_db.try_acquire_exclusive) @@ -1059,28 +1059,28 @@ class EntropyRepositoryTest(unittest.TestCase): # test reentrancy opaque_exclusive = test_db.try_acquire_exclusive() - self.assert_(opaque_exclusive is not None) + self.assertTrue(opaque_exclusive is not None) opaque_exclusive2 = test_db.try_acquire_exclusive() - self.assert_(opaque_exclusive2 is not None) + self.assertTrue(opaque_exclusive2 is not None) - self.assert_(opaque_exclusive._file_lock_setup() is + self.assertTrue(opaque_exclusive._file_lock_setup() is opaque_exclusive2._file_lock_setup()) # test reference counting - self.assertEquals( + self.assertEqual( 2, opaque_exclusive._file_lock_setup()['count']) test_db.release_exclusive(opaque_exclusive) - self.assertEquals( + self.assertEqual( 1, opaque_exclusive._file_lock_setup()['count']) test_db.release_exclusive(opaque_exclusive2) - self.assertEquals( + self.assertEqual( 0, opaque_exclusive._file_lock_setup()['count']) @@ -1088,12 +1088,12 @@ class EntropyRepositoryTest(unittest.TestCase): self.assertRaises( RuntimeError, test_db.release_exclusive, opaque_exclusive) - self.assertEquals( + self.assertEqual( 0, opaque_exclusive._file_lock_setup()['count']) opaque_exclusive = test_db.try_acquire_exclusive() - self.assert_(opaque_exclusive is not None) + self.assertTrue(opaque_exclusive is not None) self.assertRaises(RuntimeError, test_db.release_shared, opaque_exclusive) @@ -1118,77 +1118,77 @@ class EntropyRepositoryTest(unittest.TestCase): os.remove(db_file) def test_locking_memory(self): - self.assert_(self.test_db._is_memory()) + self.assertTrue(self.test_db._is_memory()) return self._test_repository_locking(self.test_db) def test_direct_access(self): local = self.test_db._tls - self.assertEquals(self.test_db.directed(), False) + self.assertEqual(self.test_db.directed(), False) counter = getattr(local, "_EntropyRepositoryCacheCounter", "foo") - self.assertEquals(counter, "foo") + self.assertEqual(counter, "foo") with self.test_db.direct(): - self.assertEquals(self.test_db.directed(), True) + self.assertEqual(self.test_db.directed(), True) counter = local._EntropyRepositoryCacheCounter - self.assertEquals(counter, 0) + self.assertEqual(counter, 0) - self.assertEquals(self.test_db.directed(), False) + self.assertEqual(self.test_db.directed(), False) with self.test_db.direct(): counter = local._EntropyRepositoryCacheCounter - self.assertEquals(counter, 1) + self.assertEqual(counter, 1) with self.test_db.direct(): counter = local._EntropyRepositoryCacheCounter - self.assertEquals(counter, 2) + self.assertEqual(counter, 2) counter = local._EntropyRepositoryCacheCounter - self.assertEquals(counter, 1) + self.assertEqual(counter, 1) counter = local._EntropyRepositoryCacheCounter - self.assertEquals(counter, 0) + self.assertEqual(counter, 0) self.test_db._direct_enabled = True - self.assertEquals(self.test_db.directed(), True) + self.assertEqual(self.test_db.directed(), True) self.test_db._direct_enabled = False - self.assertEquals(self.test_db.directed(), False) + self.assertEqual(self.test_db.directed(), False) with self.test_db.direct(): opaque = self.test_db.try_acquire_exclusive() self.assertTrue(opaque is not None) - self.assertEquals(opaque.directed(), True) + self.assertEqual(opaque.directed(), True) opaque_shared = self.test_db.try_acquire_shared() self.assertTrue(opaque_shared is not None) - self.assertEquals(opaque_shared.directed(), True) + self.assertEqual(opaque_shared.directed(), True) opaque_exclusive = self.test_db.try_acquire_exclusive() self.assertTrue(opaque_exclusive is not None) - self.assertEquals(opaque_exclusive.directed(), True) - self.assertEquals(self.test_db.directed(), True) + self.assertEqual(opaque_exclusive.directed(), True) + self.assertEqual(self.test_db.directed(), True) self.assertRaises( RuntimeError, self.test_db.release_shared, opaque_exclusive) self.test_db.release_exclusive(opaque_exclusive) - self.assertEquals(self.test_db.directed(), True) + self.assertEqual(self.test_db.directed(), True) self.assertRaises( RuntimeError, self.test_db.release_exclusive, opaque_shared) self.test_db.release_shared(opaque_shared) - self.assertEquals(self.test_db.directed(), True) + self.assertEqual(self.test_db.directed(), True) self.assertRaises( RuntimeError, self.test_db.release_shared, opaque) self.test_db.release_exclusive(opaque) - self.assertEquals(self.test_db.directed(), True) + self.assertEqual(self.test_db.directed(), True) if __name__ == '__main__': diff --git a/lib/tests/dep.py b/lib/tests/dep.py index 2e50ca347..b4c38ebd4 100644 --- a/lib/tests/dep.py +++ b/lib/tests/dep.py @@ -458,14 +458,14 @@ class DependencyRewriterTests(unittest.TestCase, DepsRewriteTestsMixin): rule = "from-dep=x11-misc/lightdm to-dep=x11-misc/lightdm-qt4 haha=true" deps = ["x11-misc/lightdm"] - with self.assertRaisesRegexp(et.WrongRewriteRuleError, r"^Bad key 'haha'"): + with self.assertRaisesRegex(et.WrongRewriteRuleError, r"^Bad key 'haha'"): et.DependencyRewriter(deps, rule) def test_raises_on_missing_key(self): rule_parts = "from-dep=x11-misc/lightdm to-dep=x11-misc/lightdm-qt4".split() deps = [] for rule in rule_parts: - with self.assertRaisesRegexp(et.WrongRewriteRuleError, r"Incomplete rewrite rule"): + with self.assertRaisesRegex(et.WrongRewriteRuleError, r"Incomplete rewrite rule"): et.DependencyRewriter(deps, rule) def test_raises_on_key_with_no_assignment(self): @@ -473,7 +473,7 @@ class DependencyRewriterTests(unittest.TestCase, DepsRewriteTestsMixin): for value in wrong_values: rule = "from-dep=x11-misc/lightdm to-dep=x11-misc/lightdm-qt4 %s" % (value,) deps = ["x11-misc/lightdm"] - with self.assertRaisesRegexp(et.WrongRewriteRuleError, + with self.assertRaisesRegex(et.WrongRewriteRuleError, r"^Badly formatted line with '%s'" % (value,)): et.DependencyRewriter(deps, rule) diff --git a/lib/tests/locks.py b/lib/tests/locks.py index a41c7ab4d..eb70a1727 100644 --- a/lib/tests/locks.py +++ b/lib/tests/locks.py @@ -22,18 +22,18 @@ class EntropyLocksTest(unittest.TestCase): tmp_fd, tmp_path = const_mkstemp(prefix="test_simple_lock") lock_map = {} - self.assertEquals(True, sfl.acquire(tmp_path, lock_map)) + self.assertEqual(True, sfl.acquire(tmp_path, lock_map)) self.assertIn(tmp_path, lock_map) self.assertTrue(lock_map[tmp_path] is not None) lock_map_new = {} - self.assertEquals(False, sfl.acquire(tmp_path, lock_map_new)) + self.assertEqual(False, sfl.acquire(tmp_path, lock_map_new)) self.assertNotIn(tmp_path, lock_map_new) self.assertIn(tmp_path, lock_map) sfl.release(tmp_path, lock_map) - self.assertEquals(True, sfl.acquire(tmp_path, lock_map_new)) + self.assertEqual(True, sfl.acquire(tmp_path, lock_map_new)) self.assertIn(tmp_path, lock_map_new) self.assertTrue(lock_map_new[tmp_path] is not None) @@ -66,12 +66,12 @@ class EntropyLocksTest(unittest.TestCase): erl.path = lambda: tmp_path - self.assertEquals(tmp_path, erl.path()) + self.assertEqual(tmp_path, erl.path()) self.assertFalse(erl.is_already_acquired()) - self.assertEquals(True, erl.try_acquire_exclusive()) - self.assertEquals(1, counter_l[0]) + self.assertEqual(True, erl.try_acquire_exclusive()) + self.assertEqual(1, counter_l[0]) self.assertTrue(erl.is_already_acquired()) @@ -79,15 +79,15 @@ class EntropyLocksTest(unittest.TestCase): self.assertFalse(erl.is_already_acquired()) - self.assertEquals(True, erl.try_acquire_exclusive()) - self.assertEquals(2, counter_l[0]) + self.assertEqual(True, erl.try_acquire_exclusive()) + self.assertEqual(2, counter_l[0]) erl.release() self.assertFalse(erl.is_already_acquired()) - self.assertEquals(True, erl.try_acquire_shared()) - self.assertEquals(3, counter_l[0]) + self.assertEqual(True, erl.try_acquire_shared()) + self.assertEqual(3, counter_l[0]) self.assertTrue(erl.is_already_acquired()) @@ -105,8 +105,8 @@ class EntropyLocksTest(unittest.TestCase): self.assertFalse(erl.is_already_acquired()) - self.assertEquals(True, erl.try_acquire_shared()) - self.assertEquals(6, counter_l[0]) + self.assertEqual(True, erl.try_acquire_shared()) + self.assertEqual(6, counter_l[0]) self.assertTrue(erl.is_already_acquired()) @@ -114,8 +114,8 @@ class EntropyLocksTest(unittest.TestCase): self.assertTrue(erl.is_already_acquired()) - self.assertEquals(True, erl.try_acquire_shared()) - self.assertEquals(7, counter_l[0]) + self.assertEqual(True, erl.try_acquire_shared()) + self.assertEqual(7, counter_l[0]) erl.release() @@ -127,13 +127,13 @@ class EntropyLocksTest(unittest.TestCase): erl.release() - self.assertEquals(True, erl.try_acquire_exclusive()) + self.assertEqual(True, erl.try_acquire_exclusive()) erl.release() self.assertFalse(erl.is_already_acquired()) - self.assertEquals(True, erl.wait_exclusive()) + self.assertEqual(True, erl.wait_exclusive()) self.assertTrue(erl.is_already_acquired()) @@ -141,7 +141,7 @@ class EntropyLocksTest(unittest.TestCase): self.assertFalse(erl.is_already_acquired()) - self.assertEquals(True, erl.wait_shared()) + self.assertEqual(True, erl.wait_shared()) self.assertTrue(erl.is_already_acquired()) @@ -171,30 +171,30 @@ class EntropyLocksTest(unittest.TestCase): get_count = lambda: erl._file_lock_setup()['count'] - self.assertEquals(True, erl.try_acquire_shared()) + self.assertEqual(True, erl.try_acquire_shared()) self.assertRaises(RuntimeError, erl.try_acquire_exclusive) erl.release() - self.assertEquals(True, erl.try_acquire_exclusive()) + self.assertEqual(True, erl.try_acquire_exclusive()) - self.assertEquals(True, erl.try_acquire_shared()) - self.assertEquals(True, erl.try_acquire_shared()) - self.assertEquals(True, erl.try_acquire_shared()) + self.assertEqual(True, erl.try_acquire_shared()) + self.assertEqual(True, erl.try_acquire_shared()) + self.assertEqual(True, erl.try_acquire_shared()) - self.assertEquals(4, get_count()) + self.assertEqual(4, get_count()) erl.release() - self.assertEquals(3, get_count()) + self.assertEqual(3, get_count()) erl.release() - self.assertEquals(2, get_count()) + self.assertEqual(2, get_count()) erl.release() - self.assertEquals(1, get_count()) + self.assertEqual(1, get_count()) erl.release() - self.assertEquals(0, get_count()) + self.assertEqual(0, get_count()) self.assertRaises(RuntimeError, erl.release) @@ -229,24 +229,24 @@ class EntropyLocksTest(unittest.TestCase): other_thread_loop_count = [0] cond = threading.Condition() - self.assertEquals(True, erl.try_acquire_exclusive()) - self.assertEquals(1, get_count()) - self.assertNotEquals(None, get_ref()) - self.assertEquals(0, other_thread_count[0]) + self.assertEqual(True, erl.try_acquire_exclusive()) + self.assertEqual(1, get_count()) + self.assertNotEqual(None, get_ref()) + self.assertEqual(0, other_thread_count[0]) def try_acquire_thread(): milliseconds = 10 * 1000 acquired = False loop_n = 0 while milliseconds: - self.assertEquals(None, get_ref()) + self.assertEqual(None, get_ref()) acquired = erl.try_acquire_exclusive() if loop_n == 0: self.assertFalse(acquired) if acquired: - self.assertNotEquals(None, get_ref()) + self.assertNotEqual(None, get_ref()) other_thread_count[0] += 1 break @@ -269,7 +269,7 @@ class EntropyLocksTest(unittest.TestCase): erl.release() th.join() - self.assertEquals(1, other_thread_count[0]) + self.assertEqual(1, other_thread_count[0]) finally: if tmp_fd is not None: diff --git a/lib/tests/misc.py b/lib/tests/misc.py index 4841ee1df..c4714e475 100644 --- a/lib/tests/misc.py +++ b/lib/tests/misc.py @@ -163,7 +163,7 @@ class MiscTest(unittest.TestCase): expected_outcome = """ - + title http://url