[PATCHES] Miscellaneous Python fixes
Douglas Bagnall
douglas.bagnall at catalyst.net.nz
Thu Oct 25 09:47:53 UTC 2018
These are mainly for Python 3 compatibility.
CI: https://gitlab.com/samba-team/devel/samba/pipelines/34246431
but again I have edited the series since that, because I noticed
I had sent one of the patches in an earlier batch.
Douglas
-------------- next part --------------
From d1b8d16cb16403ada32a62355daedd93888162ef Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 12:38:27 +1300
Subject: [PATCH 01/13] samba-tool gpo: replace file() with open() for py3
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
python/samba/netcmd/gpo.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/python/samba/netcmd/gpo.py b/python/samba/netcmd/gpo.py
index 6a7efe8add8..07c31f3a043 100644
--- a/python/samba/netcmd/gpo.py
+++ b/python/samba/netcmd/gpo.py
@@ -295,7 +295,7 @@ def backup_directory_remote_to_local(conn, remotedir, localdir):
os.mkdir(l_name)
else:
data = conn.loadfile(r_name)
- with file(l_name + SUFFIX, 'w') as f:
+ with open(l_name + SUFFIX, 'w') as f:
f.write(data)
parser = find_parser(e['name'])
--
2.11.0
From 920ac2250c2b421c316376240ed904eaf12ff10f Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 13:21:53 +1300
Subject: [PATCH 02/13] python/gp_parse/gp_csv: use compat.text_type instead of
unicode (PY3)
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
python/samba/gp_parse/gp_csv.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/python/samba/gp_parse/gp_csv.py b/python/samba/gp_parse/gp_csv.py
index b19f84c56f7..d5cbcdc41af 100644
--- a/python/samba/gp_parse/gp_csv.py
+++ b/python/samba/gp_parse/gp_csv.py
@@ -25,6 +25,7 @@ from io import BytesIO
from xml.etree.ElementTree import Element, SubElement
from samba.gp_parse import GPParser
+from samba.compat import text_type
# [MS-GPAC] Group Policy Audit Configuration
class GPAuditCsvParser(GPParser):
@@ -135,7 +136,7 @@ class UnicodeReader:
def next(self):
row = next(self.reader)
- return [unicode(s, "utf-8") for s in row]
+ return [text_type(s, "utf-8") for s in row]
def __iter__(self):
return self
--
2.11.0
From 9f0451a1f37b024aea0ffa3dd260c90c2c420bb5 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 17:22:48 +1300
Subject: [PATCH 03/13] s4/dsdb/pytest/sam: use compat.text_type, not unicode
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
source4/dsdb/tests/python/sam.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/source4/dsdb/tests/python/sam.py b/source4/dsdb/tests/python/sam.py
index 9a5e2535096..7bd477dc0e8 100755
--- a/source4/dsdb/tests/python/sam.py
+++ b/source4/dsdb/tests/python/sam.py
@@ -10,6 +10,7 @@ import time
sys.path.insert(0, "bin/python")
import samba
+from samba.compat import text_type
from samba.tests.subunitrun import SubunitOptions, TestProgram
import samba.getopt as options
@@ -1740,7 +1741,7 @@ class SamTests(samba.tests.TestCase):
username = "ldaptestuser"
password = "thatsAcomplPASS2"
- utf16pw = unicode('"' + password.encode('utf-8') + '"', 'utf-8').encode('utf-16-le')
+ utf16pw = text_type('"' + password.encode('utf-8') + '"', 'utf-8').encode('utf-16-le')
ldb.add({
"dn": "cn=ldaptestuser,cn=users," + self.base_dn,
--
2.11.0
From 9a2ebc78c0cdaaeaca35887d9ea932b0ff015b3c Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 12:40:09 +1300
Subject: [PATCH 04/13] samba-tool ldapcmp: use ValueError, not obsolete
StandardError
The error is in the value, and StandardError is not in Python 3
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
python/samba/netcmd/ldapcmp.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/python/samba/netcmd/ldapcmp.py b/python/samba/netcmd/ldapcmp.py
index 6508a8fe5db..312c8ecba0a 100644
--- a/python/samba/netcmd/ldapcmp.py
+++ b/python/samba/netcmd/ldapcmp.py
@@ -854,7 +854,7 @@ class LDAPBundel(object):
elif self.search_scope == "ONE":
self.search_scope = SCOPE_ONELEVEL
else:
- raise StandardError("Wrong 'scope' given. Choose from: SUB, ONE, BASE")
+ raise ValueError("Wrong 'scope' given. Choose from: SUB, ONE, BASE")
try:
res = self.con.ldb.search(base=self.search_base, scope=self.search_scope, attrs=["dn"])
except LdbError as e3:
--
2.11.0
From 8996627b5d85228f4d567894800e024345da5cc1 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 12:52:09 +1300
Subject: [PATCH 05/13] python/samba/common: py3 compat raw_input
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
python/samba/common.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/python/samba/common.py b/python/samba/common.py
index fabbcea13df..76d00e35fb5 100644
--- a/python/samba/common.py
+++ b/python/samba/common.py
@@ -31,6 +31,8 @@ if PY3:
def cmp(a, b):
return (a > b) - (a < b)
+ raw_input = input
+
def confirm(msg, forced=False, allow_all=False):
"""confirm an action with the user
--
2.11.0
From 26211ad5a66c5cf23bfab589c5a5b2285585e123 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 13:07:30 +1300
Subject: [PATCH 06/13] python/remove_dc: use a local variable in
offline_remove_server
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
python/samba/remove_dc.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/python/samba/remove_dc.py b/python/samba/remove_dc.py
index a6062703f24..e6b1b7bdc04 100644
--- a/python/samba/remove_dc.py
+++ b/python/samba/remove_dc.py
@@ -229,15 +229,15 @@ def offline_remove_server(samdb, logger,
scope=ldb.SCOPE_BASE,
expression="(objectClass=server)")
msg = msgs[0]
- dc_name = str(msgs[0]["cn"][0])
+ dc_name = str(msg["cn"][0])
try:
- computer_dn = ldb.Dn(samdb, msgs[0]["serverReference"][0].decode('utf8'))
+ computer_dn = ldb.Dn(samdb, msg["serverReference"][0].decode('utf8'))
except KeyError:
computer_dn = None
try:
- dnsHostName = str(msgs[0]["dnsHostName"][0])
+ dnsHostName = str(msg["dnsHostName"][0])
except KeyError:
dnsHostName = None
@@ -267,8 +267,8 @@ def offline_remove_server(samdb, logger,
logger.info("Removing computer account: %s (and any child objects)" % computer_dn)
samdb.delete(computer_dn, ["tree_delete:0"])
- if "dnsHostName" in msgs[0]:
- dnsHostName = str(msgs[0]["dnsHostName"][0])
+ if "dnsHostName" in msg:
+ dnsHostName = str(msg["dnsHostName"][0])
if remove_dns_account:
res = samdb.search(expression="(&(objectclass=user)(cn=dns-%s)(servicePrincipalName=DNS/%s))" %
--
2.11.0
From 826b1a7c58e0d404428062b726d31b8d648f45f1 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 13:37:28 +1300
Subject: [PATCH 07/13] python/kcc: use compat.cmp_fn (PY3)
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
python/samba/kcc/__init__.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/python/samba/kcc/__init__.py b/python/samba/kcc/__init__.py
index 5e1762d5b6f..6c6c202fa2c 100644
--- a/python/samba/kcc/__init__.py
+++ b/python/samba/kcc/__init__.py
@@ -44,7 +44,7 @@ from samba.kcc.graph import Vertex
from samba.kcc.debug import DEBUG, DEBUG_FN, logger
from samba.kcc import debug
-from samba.compat import text_type
+from samba.compat import cmp_fn
def sort_dsa_by_gc_and_guid(dsa1, dsa2):
@@ -61,7 +61,7 @@ def sort_dsa_by_gc_and_guid(dsa1, dsa2):
return -1
if not dsa1.is_gc() and dsa2.is_gc():
return +1
- return cmp(ndr_pack(dsa1.dsa_guid), ndr_pack(dsa2.dsa_guid))
+ return cmp_fn(ndr_pack(dsa1.dsa_guid), ndr_pack(dsa2.dsa_guid))
def is_smtp_replication_available():
--
2.11.0
From 7fb6476904d9e2a98520abebe5d045188efcb057 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 16:04:38 +1300
Subject: [PATCH 08/13] script/show_test_time: approach python 3 compatibility
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
script/show_test_time | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/script/show_test_time b/script/show_test_time
index 81bb7932a4a..a35e2154275 100755
--- a/script/show_test_time
+++ b/script/show_test_time
@@ -1,5 +1,5 @@
#!/usr/bin/python
-
+from __future__ import print_function
import optparse
import os.path
import subprocess
@@ -23,10 +23,10 @@ for l in p.stdout:
durations[name] = float(duration)
if opts.limit:
- print "Top %d tests by run time:" % opts.limit
+ print("Top %d tests by run time:" % opts.limit)
for i, (name, length) in enumerate(sorted(
durations.items(), cmp=lambda (k1,v1), (k2, v2): cmp(v1, v2), reverse=True)):
if opts.limit and i == opts.limit:
break
- print "%d: %s -> %ds" % (i+1, name, length)
+ print("%d: %s -> %ds" % (i+1, name, length))
--
2.11.0
From c90629f7ab93cea74c083cc279dd284448e59438 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 16:52:14 +1300
Subject: [PATCH 09/13] s4/dsdb/pytests: Py3 compatitble except clauses
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
source4/dsdb/tests/python/ad_dc_medley_performance.py | 3 ++-
source4/dsdb/tests/python/passwords.py | 9 ++++++---
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/source4/dsdb/tests/python/ad_dc_medley_performance.py b/source4/dsdb/tests/python/ad_dc_medley_performance.py
index f484cae9e08..1101ca0e160 100644
--- a/source4/dsdb/tests/python/ad_dc_medley_performance.py
+++ b/source4/dsdb/tests/python/ad_dc_medley_performance.py
@@ -234,7 +234,8 @@ class UserTests(samba.tests.TestCase):
self.ldb.search(pattern % i,
scope=SCOPE_BASE,
attrs=['cn'])
- except LdbError as (num, msg):
+ except LdbError as e:
+ (num, msg) = e
if num != ERR_NO_SUCH_OBJECT:
raise
diff --git a/source4/dsdb/tests/python/passwords.py b/source4/dsdb/tests/python/passwords.py
index 0f73cf31928..b68637242be 100755
--- a/source4/dsdb/tests/python/passwords.py
+++ b/source4/dsdb/tests/python/passwords.py
@@ -1088,7 +1088,8 @@ delete: userPassword
add: userPassword
userPassword: thatsAcomplPASS1
""")
- except LdbError, (num, msg):
+ except LdbError as e:
+ (num, msg) = e
self.assertEquals(num, ERR_CONSTRAINT_VIOLATION)
else:
self.fail()
@@ -1104,7 +1105,8 @@ delete: clearTextPassword
add: clearTextPassword
clearTextPassword: thatsAcomplPASS2
""")
- except LdbError, (num, msg):
+ except LdbError as e:
+ (num, msg) = e
self.assertTrue(num == ERR_CONSTRAINT_VIOLATION or
num == ERR_NO_SUCH_ATTRIBUTE) # for Windows
else:
@@ -1121,7 +1123,8 @@ delete: unicodePwd
add: unicodePwd
unicodePwd:: """ + base64.b64encode("\"thatsAcomplPASS3\"".encode('utf-16-le')).decode('utf8') + """
""")
- except LdbError, (num, msg):
+ except LdbError as e:
+ (num, msg) = e
self.assertEquals(num, ERR_CONSTRAINT_VIOLATION)
else:
self.fail()
--
2.11.0
From 5ce34e3786aa9129fd2f8a81b2821e2e382fab93 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 17:06:32 +1300
Subject: [PATCH 10/13] s4/dsdb/pytest/ad_dc_medley: do not use xrange
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
source4/dsdb/tests/python/ad_dc_medley_performance.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source4/dsdb/tests/python/ad_dc_medley_performance.py b/source4/dsdb/tests/python/ad_dc_medley_performance.py
index 1101ca0e160..0636210d1e3 100644
--- a/source4/dsdb/tests/python/ad_dc_medley_performance.py
+++ b/source4/dsdb/tests/python/ad_dc_medley_performance.py
@@ -422,7 +422,7 @@ class UserTests(samba.tests.TestCase):
lines = ["dn: CN=g%d,%s" % (g, self.ou_groups),
"objectclass: group"]
- for i in xrange(self.state.next_user_id):
+ for i in range(self.state.next_user_id):
if random.random() <= link_chance:
lines.append("member: cn=u%d,%s" % (i, self.ou_users))
self.state.active_links.add((i, g))
--
2.11.0
From 3398a9d3d0bdc48a39bd0352796cc794258eb1d9 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 17:23:54 +1300
Subject: [PATCH 11/13] s4/dsdb/pytest/sort: use compat.cmp_fn instead of cmp
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
source4/dsdb/tests/python/sort.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/source4/dsdb/tests/python/sort.py b/source4/dsdb/tests/python/sort.py
index f1247be9e1f..ac989bd4356 100644
--- a/source4/dsdb/tests/python/sort.py
+++ b/source4/dsdb/tests/python/sort.py
@@ -14,7 +14,7 @@ import re
sys.path.insert(0, "bin/python")
import samba
from samba.tests.subunitrun import SubunitOptions, TestProgram
-
+from samba.compat import cmp_fn
import samba.getopt as options
from samba.auth import system_session
@@ -286,10 +286,10 @@ class BaseSortTests(samba.tests.TestCase):
return locale.strcoll(a[0], b[0])
def cmp_binary(a, b):
- return cmp(a[0], b[0])
+ return cmp_fn(a[0], b[0])
def cmp_numeric(a, b):
- return cmp(int(a[0]), int(b[0]))
+ return cmp_fn(int(a[0]), int(b[0]))
# For testing simplicity, the attributes in here need to be
# unique for each user. Otherwise there are multiple possible
--
2.11.0
From a3e7f0311e188589032a5362c5c4385a76048428 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 18:32:52 +1300
Subject: [PATCH 12/13] s4/scripting: py3 style 0o123 octal, not 0123
this works with py2.6+ too.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
source4/scripting/devel/config_base | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source4/scripting/devel/config_base b/source4/scripting/devel/config_base
index e48d3a6ce14..0d495c5091b 100755
--- a/source4/scripting/devel/config_base
+++ b/source4/scripting/devel/config_base
@@ -26,7 +26,7 @@ config_dir = prefix + "/etc"
config_file = config_dir + "/smb.conf"
if not os.path.isdir(config_dir):
- os.makedirs(config_dir, mode=0755)
+ os.makedirs(config_dir, mode=0o755)
if not os.path.isfile(config_file):
open(config_file, mode='w').close()
--
2.11.0
From b85f93902d26598e28fc575063d4aca00d914345 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu, 11 Oct 2018 18:33:48 +1300
Subject: [PATCH 13/13] s4/scripting/demodirsync: fix syntax error
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
source4/scripting/devel/demodirsync.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source4/scripting/devel/demodirsync.py b/source4/scripting/devel/demodirsync.py
index 248cfec7101..260104cc198 100755
--- a/source4/scripting/devel/demodirsync.py
+++ b/source4/scripting/devel/demodirsync.py
@@ -138,7 +138,7 @@ cookie.blob.highwatermark.tmp_highest_usn = usn - 2
if cookie.blob.extra_length > 0:
cookie.blob.extra.ctr.cursors[0].source_dsa_invocation_id = misc.GUID("128a99bf-e2df-4832-ac0a-1fb625e530db")
cookie.blob.extra.ctr.cursors[0].highest_usn = bigusn - 1
-controls = ["dirsync:1:1:50:%s" % base64.b64encode(ndr_pack(cookie)).decode('utf8'))
+controls = ["dirsync:1:1:50:%s" % base64.b64encode(ndr_pack(cookie)).decode('utf8')]
(msgs, ctrls) = remote_ldb.searchex(expression="(objectclass=*)", base=base, controls=controls)
if (len(ctrls)):
for ctl in ctrls:
--
2.11.0
More information about the samba-technical
mailing list