<p>Corey Farrell has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/8646">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">core: Begin work on python3 compatability.<br><br>* Consistently use spaces in rest-api-templates/asterisk_processor.py.<br>* Exclude third-party from docs/full-en_US.xml.<br>* Add docs/full-en_US.xml to .gitignore.<br>* Use list() to convert python3 view.<br>* Use python3 print function.<br>* Replace cmp() with equivalent equation.<br>* Replace reference to out of scope subtype variable with name<br>  parameter.<br><br>'make ari-stubs' still does not work when 'python --version' is 3.x.<br>Systems that still use python2 by default can be tested by setting<br>PYTHON=/usr/bin/python3 in ./makeopts.<br><br>I have not tested voicemailpwcheck.py, only the print syntax has<br>been fixed.<br><br>Change-Id: If5c5b556a2800d41a3e2cfef080ac2e151178c33<br>---<br>M Makefile<br>M contrib/scripts/refcounter.py<br>M contrib/scripts/voicemailpwcheck.py<br>M doc/.gitignore<br>M rest-api-templates/asterisk_processor.py<br>M rest-api-templates/make_ari_stubs.py<br>M rest-api-templates/swagger_model.py<br>M rest-api-templates/transform.py<br>8 files changed, 32 insertions(+), 28 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/46/8646/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/Makefile b/Makefile<br>index ff38fa8..0dbc4aa 100644<br>--- a/Makefile<br>+++ b/Makefile<br>@@ -512,7 +512,7 @@<br>       @echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@<br>       @echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" >> $@<br>         @echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@<br>-    @for x in $(MOD_SUBDIRS); do \<br>+       @for x in $(filter-out third-party,$(MOD_SUBDIRS)); do \<br>              printf "$$x " ; \<br>           for i in `find $$x -name '*.c'`; do \<br>                         $(PYTHON) build_tools/get_documentation.py < $$i >> $@ ; \<br>diff --git a/contrib/scripts/refcounter.py b/contrib/scripts/refcounter.py<br>index 1a97e90..f13d8e4 100755<br>--- a/contrib/scripts/refcounter.py<br>+++ b/contrib/scripts/refcounter.py<br>@@ -18,6 +18,7 @@<br>  Matt Jordan <mjordan@digium.com><br> """<br> <br>+from __future__ import print_function<br> import sys<br> import os<br> <br>@@ -35,8 +36,8 @@<br>     """<br>     tokens = line.strip().split(',', 7)<br>     if len(tokens) < 8:<br>-        print "ERROR: ref debug line '%s' contains fewer tokens than " \<br>-              "expected: %d" % (line.strip(), len(tokens))<br>+        print("ERROR: ref debug line '%s' contains fewer tokens than "<br>+              "expected: %d" % (line.strip(), len(tokens)))<br>         return None<br> <br>     processed_line = {'addr': tokens[0],<br>@@ -142,7 +143,7 @@<br>                 del current_objects[obj]<br> <br>     if options.leaks:<br>-        for key, lines in current_objects.iteritems():<br>+        for (key, lines) in current_objects.items():<br>             leaked_objects.append((key, lines))<br>     return (finished_objects, invalid_objects, leaked_objects, skewed_objects)<br> <br>@@ -156,13 +157,13 @@<br>             this object<br>     """<br> <br>-    print "======== %s Objects ========" % prefix<br>-    print "\n"<br>+    print("======== %s Objects ========" % prefix)<br>+    print("\n")<br>     for obj in objects:<br>-        print "==== %s Object %s history ====" % (prefix, obj[0])<br>+        print("==== %s Object %s history ====" % (prefix, obj[0]))<br>         for line in obj[1]['log']:<br>-            print line<br>-        print "\n"<br>+            print(line)<br>+        print("\n")<br> <br> <br> def main(argv=None):<br>@@ -198,11 +199,11 @@<br> <br>     if not options.invalid and not options.leaks and not options.normal \<br>             and not options.skewed:<br>-        print >>sys.stderr, "All options disabled"<br>+        print("All options disabled", file=sys.stderr)<br>         return -1<br> <br>     if not os.path.isfile(options.filepath):<br>-        print >>sys.stderr, "File not found: %s" % options.filepath<br>+        print("File not found: %s" % options.filepath, file=sys.stderr)<br>         return -1<br> <br>     try:<br>@@ -227,7 +228,7 @@<br>             print_objects(finished_objects, "Finalized")<br> <br>     except (KeyboardInterrupt, SystemExit, IOError):<br>-        print >>sys.stderr, "File processing cancelled"<br>+        print("File processing cancelled", file=sys.stderr)<br>         return -1<br> <br>     return ret_code<br>diff --git a/contrib/scripts/voicemailpwcheck.py b/contrib/scripts/voicemailpwcheck.py<br>index d7a66d4..452255c 100755<br>--- a/contrib/scripts/voicemailpwcheck.py<br>+++ b/contrib/scripts/voicemailpwcheck.py<br>@@ -46,20 +46,20 @@<br> <br> # Enforce a password length of at least 6 characters<br> if len(new_pw) < REQUIRED_LENGTH:<br>-    print "INVALID: Password is too short (%d) - must be at least %d" % \<br>-            (len(new_pw), REQUIRED_LENGTH)<br>+    print("INVALID: Password is too short (%d) - must be at least %d" % \<br>+            (len(new_pw), REQUIRED_LENGTH))<br>     sys.exit(0)<br> <br> for regex, error in REGEX_BLACKLIST:<br>     if re.search(regex, new_pw):<br>-        print "INVALID: %s" % error<br>+        print("INVALID: %s" % error)<br>         sys.exit(0)<br> <br> for pw in PW_BLACKLIST:<br>     if new_pw.find(pw) != -1:<br>-        print "INVALID: %s is forbidden in a password" % pw<br>+        print("INVALID: %s is forbidden in a password" % pw)<br>         sys.exit(0)<br> <br>-print "VALID"<br>+print("VALID")<br> <br> sys.exit(0)<br>diff --git a/doc/.gitignore b/doc/.gitignore<br>index 3461c58..49bfe42 100644<br>--- a/doc/.gitignore<br>+++ b/doc/.gitignore<br>@@ -1,4 +1,5 @@<br> core-en_US.xml<br>+full-en_US.xml<br> rest-api<br> api<br> asterisk-ng-doxygen<br>diff --git a/rest-api-templates/asterisk_processor.py b/rest-api-templates/asterisk_processor.py<br>index 68a6799..6c6fbbe 100644<br>--- a/rest-api-templates/asterisk_processor.py<br>+++ b/rest-api-templates/asterisk_processor.py<br>@@ -182,7 +182,7 @@<br>                 raise SwaggerError(<br>                     "Should not mix resources in one API declaration", context)<br>             # root_path isn't needed any more<br>-            resource_api.root_path = resource_api.root_path.children()[0]<br>+            resource_api.root_path = list(resource_api.root_path.children())[0]<br>             if resource_api.name != resource_api.root_path.name:<br>                 raise SwaggerError(<br>                     "API declaration name should match", context)<br>@@ -205,10 +205,10 @@<br> <br>     def process_parameter(self, parameter, context):<br>         if parameter.param_type == 'body':<br>-     parameter.is_body_parameter = True;<br>+            parameter.is_body_parameter = True;<br>             parameter.c_data_type = 'struct ast_json *'<br>         else:<br>-      parameter.is_body_parameter = False;<br>+            parameter.is_body_parameter = False;<br>             if not parameter.data_type in self.type_mapping:<br>                 raise SwaggerError(<br>                     "Invalid parameter type %s" % parameter.data_type, context)<br>diff --git a/rest-api-templates/make_ari_stubs.py b/rest-api-templates/make_ari_stubs.py<br>index 4e02cdd..a6cafab 100755<br>--- a/rest-api-templates/make_ari_stubs.py<br>+++ b/rest-api-templates/make_ari_stubs.py<br>@@ -16,12 +16,13 @@<br> # at the top of the source tree.<br> #<br> <br>+from __future__ import print_function<br> import sys<br> <br> try:<br>     import pystache<br> except ImportError:<br>-    print >> sys.stderr, "Pystache required. Please sudo pip install pystache."<br>+    print("Pystache required. Please sudo pip install pystache.", file=sys.stderr)<br>     sys.exit(1)<br> <br> import os.path<br>diff --git a/rest-api-templates/swagger_model.py b/rest-api-templates/swagger_model.py<br>index e0eda01..2855e81 100644<br>--- a/rest-api-templates/swagger_model.py<br>+++ b/rest-api-templates/swagger_model.py<br>@@ -26,6 +26,7 @@<br> See https://github.com/wordnik/swagger-core/wiki/API-Declaration for the spec.<br> """<br> <br>+from __future__ import print_function<br> import json<br> import os.path<br> import pprint<br>@@ -75,7 +76,7 @@<br>     '''<br>     lhs = [int(v) for v in lhs.split('.')]<br>     rhs = [int(v) for v in rhs.split('.')]<br>-    return cmp(lhs, rhs)<br>+    return (lhs > rhs) - (lhs < rhs)<br> <br> <br> class ParsingContext(object):<br>@@ -608,7 +609,7 @@<br>         except SwaggerError:<br>             raise<br>         except Exception as e:<br>-            print >> sys.stderr, "Error: ", traceback.format_exc()<br>+            print("Error: ", traceback.format_exc(), file=sys.stderr)<br>             raise SwaggerError(<br>                 "Error loading %s" % api_declaration_file, context, e)<br> <br>@@ -621,8 +622,8 @@<br>             .replace(".json", ".{format}")<br> <br>         if self.resource_path != expected_resource_path:<br>-            print >> sys.stderr, \<br>-                "%s != %s" % (self.resource_path, expected_resource_path)<br>+            print("%s != %s" % (self.resource_path, expected_resource_path),<br>+                file=sys.stderr)<br>             raise SwaggerError("resourcePath has incorrect value", context)<br> <br>         return self<br>@@ -662,7 +663,7 @@<br>         model_dict = dict((m.id, m) for m in self.models)<br>         for m in self.models:<br>             def link_subtype(name):<br>-                res = model_dict.get(subtype)<br>+                res = model_dict.get(name)<br>                 if not res:<br>                     raise SwaggerError("%s has non-existing subtype %s",<br>                                        m.id, name)<br>@@ -721,7 +722,7 @@<br>         except SwaggerError:<br>             raise<br>         except Exception as e:<br>-            print >> sys.stderr, "Error: ", traceback.format_exc()<br>+            print("Error: ", traceback.format_exc(), file=sys.stderr)<br>             raise SwaggerError(<br>                 "Error loading %s" % resource_file, context, e)<br> <br>diff --git a/rest-api-templates/transform.py b/rest-api-templates/transform.py<br>index fc12efe..3391528 100644<br>--- a/rest-api-templates/transform.py<br>+++ b/rest-api-templates/transform.py<br>@@ -58,5 +58,5 @@<br>             out.flush()<br> <br>             if not dest_exists or not filecmp.cmp(out.name, dest_file):<br>-                print "Writing %s" % dest_file<br>+                print("Writing %s" % dest_file)<br>                 shutil.copyfile(out.name, dest_file)<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/8646">change 8646</a>. To unsubscribe, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/8646"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: If5c5b556a2800d41a3e2cfef080ac2e151178c33 </div>
<div style="display:none"> Gerrit-Change-Number: 8646 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Corey Farrell <git@cfware.com> </div>