Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 703882 Details for
Bug 867958
Create Python 3 package
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[PATCH 3/5] Backport Python 3 bindings (v2)
0003-Backport-Python-3-bindings.patch (text/plain), 15.29 KB, created by
Kalev Lember
on 2013-02-28 11:29:36 UTC
(
hide
)
Description:
[PATCH 3/5] Backport Python 3 bindings (v2)
Filename:
MIME Type:
Creator:
Kalev Lember
Created:
2013-02-28 11:29:36 UTC
Size:
15.29 KB
patch
obsolete
>From 009320ec008782681cd2518c3ef8e4afb2f3e60e Mon Sep 17 00:00:00 2001 >From: Kalev Lember <kalevlember@gmail.com> >Date: Wed, 27 Feb 2013 13:00:07 +0100 >Subject: [PATCH 3/5] Backport Python 3 bindings > >Extracted from speech-dispatcher-0.8-beta1.tar.gz. It seems unlikely >that we get an updated speech-dispatcher package in time for F19, but we >need the Python 3 support for Orca. > >https://bugzilla.redhat.com/show_bug.cgi?id=867958 >--- > speech-dispatcher-python3.patch | 295 ++++++++++++++++++++++++++++++++++++++++ > speech-dispatcher.spec | 33 ++++- > 2 files changed, 326 insertions(+), 2 deletions(-) > create mode 100644 speech-dispatcher-python3.patch > >diff --git a/speech-dispatcher-python3.patch b/speech-dispatcher-python3.patch >new file mode 100644 >index 0000000..f20d7de >--- /dev/null >+++ b/speech-dispatcher-python3.patch >@@ -0,0 +1,295 @@ >+diff -urN speechd/client.py speechd/client.py >+--- speechd/client.py 2010-09-10 10:23:55.000000000 +0200 >++++ speechd/client.py 2012-07-11 11:05:05.000000000 +0200 >+@@ -32,7 +32,7 @@ >+ except: >+ import dummy_threading as threading >+ >+-import paths >++from . import paths >+ >+ class CallbackType(object): >+ """Constants describing the available types of callbacks""" >+@@ -151,9 +151,9 @@ >+ class _SSIP_Connection(object): >+ """Implemantation of low level SSIP communication.""" >+ >+- _NEWLINE = "\r\n" >+- _END_OF_DATA_MARKER = '.' >+- _END_OF_DATA_MARKER_ESCAPED = '..' >++ _NEWLINE = b"\r\n" >++ _END_OF_DATA_MARKER = b'.' >++ _END_OF_DATA_MARKER_ESCAPED = b'..' >+ _END_OF_DATA = _NEWLINE + _END_OF_DATA_MARKER + _NEWLINE >+ _END_OF_DATA_ESCAPED = _NEWLINE + _END_OF_DATA_MARKER_ESCAPED + _NEWLINE >+ # Constants representing \r\n. and \r\n.. >+@@ -187,12 +187,12 @@ >+ try: >+ self._socket = socket.socket(socket_family, socket.SOCK_STREAM) >+ self._socket.connect(socket_connect_args) >+- except socket.error, ex: >++ except socket.error as ex: >+ raise SSIPCommunicationError("Can't open socket using method " >+ + communication_method, >+ original_exception = ex) >+ >+- self._buffer = "" >++ self._buffer = b"" >+ self._com_buffer = [] >+ self._callback = None >+ self._ssip_reply_semaphore = threading.Semaphore(0) >+@@ -232,7 +232,7 @@ >+ except IOError: >+ # If the socket has been closed, exit the thread >+ sys.exit() >+- if code/100 != 7: >++ if code//100 != 7: >+ # This is not an index mark nor an event >+ self._com_buffer.append((code, msg, data)) >+ self._ssip_reply_semaphore.release() >+@@ -267,7 +267,7 @@ >+ pointer = self._buffer.find(self._NEWLINE) >+ line = self._buffer[:pointer] >+ self._buffer = self._buffer[pointer+len(self._NEWLINE):] >+- return line >++ return line.decode('utf-8') >+ >+ def _recv_message(self): >+ """Read server response or a callback >+@@ -321,11 +321,11 @@ >+ or isinstance(args[0], int) >+ cmd = ' '.join((command,) + tuple(map(str, args))) >+ try: >+- self._socket.send(cmd + self._NEWLINE) >++ self._socket.send(cmd.encode('utf-8') + self._NEWLINE) >+ except socket.error: >+ raise SSIPCommunicationError("Speech Dispatcher connection lost.") >+ code, msg, data = self._recv_response() >+- if code/100 != 2: >++ if code//100 != 2: >+ raise SSIPCommandError(code, msg, cmd) >+ return code, msg, data >+ >+@@ -340,6 +340,7 @@ >+ 'IOError' is raised when the socket was closed by the remote side. >+ >+ """ >++ data = data.encode('utf-8') >+ # Escape the end-of-data marker even if present at the beginning >+ # The start of the string is also the start of a line. >+ if data.startswith(self._END_OF_DATA_MARKER): >+@@ -357,7 +358,7 @@ >+ except socket.error: >+ raise SSIPCommunicationError("Speech Dispatcher connection lost.") >+ code, msg, response_data = self._recv_response() >+- if code/100 != 2: >++ if code//100 != 2: >+ raise SSIPDataError(code, msg, data) >+ return code, msg, response_data >+ >+@@ -576,14 +580,14 @@ >+ """Establish new connection (and/or autospawn server)""" >+ try: >+ self._conn = _SSIP_Connection(**connection_args) >+- except SSIPCommunicationError, ce: >++ except SSIPCommunicationError as ce: >+ # Suppose server might not be running, try the autospawn mechanism >+ if autospawn != False: >+ # Autospawn is however not guaranteed to start the server. The server >+ # will decide, based on it's configuration, whether to honor the request. >+ try: >+ self._server_spawn(connection_args) >+- except SpawnError, se: >++ except SpawnError as se: >+ ce.set_additional_exception(se) >+ raise ce >+ self._conn = _SSIP_Connection(**connection_args) >+@@ -737,8 +741,6 @@ >+ >+ """ >+ self._conn.send_command('SPEAK') >+- if isinstance(text, unicode): >+- text = text.encode('utf-8') >+ result = self._conn.send_data(text) >+ if callback: >+ msg_id = int(result[2][0]) >+@@ -759,8 +761,6 @@ >+ message is queued on the server and the method returns immediately. >+ >+ """ >+- if isinstance(char, unicode): >+- char = char.encode('utf-8') >+ self._conn.send_command('CHAR', char.replace(' ', 'space')) >+ >+ def key(self, key): >+diff -urN speechd/__init__.py speechd/__init__.py >+--- speechd/__init__.py 2010-09-10 10:21:48.000000000 +0200 >++++ speechd/__init__.py 2012-07-11 11:05:05.000000000 +0200 >+@@ -14,5 +14,5 @@ >+ # along with this program; if not, write to the Free Software >+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA >+ >+-from client import * >++from .client import * >+ >+diff -urN speechd/_test.py speechd/_test.py >+--- speechd/_test.py 2010-09-10 10:21:50.000000000 +0200 >++++ speechd/_test.py 2012-07-11 11:05:05.000000000 +0200 >+@@ -19,7 +19,7 @@ >+ import unittest >+ import time >+ >+-from client import PunctuationMode, CallbackType, SSIPClient, Scope, Speaker >++from .client import PunctuationMode, CallbackType, SSIPClient, Scope, Speaker >+ >+ >+ class _SSIPClientTest(unittest.TestCase): >+@@ -124,10 +124,10 @@ >+ c = self._client >+ for module in c.list_output_modules(): >+ c.set_output_module(module) >+- print "**", module >++ print("**", module) >+ c.speak(module +"using default voice") >+ for name, lang, dialect in c.list_synthesis_voices(): >+- print " -", module, name, lang, dialect >++ print(" -", module, name, lang, dialect) >+ c.set_synthesis_voice(name) >+ c.speak(module +" using voice "+ name) >+ >+diff -urN speechd_config/config.py speechd_config/config.py >+--- speechd_config/config.py 2010-09-10 16:38:39.000000000 +0200 >++++ speechd_config/config.py 2012-07-13 15:52:02.000000000 +0200 >+@@ -26,12 +26,12 @@ >+ from optparse import OptionParser >+ >+ # Configuration and sound data paths >+-import paths >++from . import paths >+ >+ def report(msg): >+ """Output information messages for the user on stdout >+ and if desired, by espeak synthesis""" >+- print msg >++ print(msg) >+ if options.use_espeak_synthesis: >+ os.system("espeak \"" + msg + "\"") >+ >+@@ -57,7 +58,7 @@ >+ input_audio_icon() >+ >+ if not options.dont_ask: >+- str_inp = raw_input(">") >++ str_inp = input(">") >+ >+ # On plain enter, return default >+ if options.dont_ask or (len(str_inp) == 0): >+@@ -213,17 +216,17 @@ >+ and problem diagnostics.""" >+ self.cmdline_parser = OptionParser(usage) >+ >+- for option, definition in self._conf_options.iteritems(): >++ for option, definition in self._conf_options.items(): >+ # Set object attributes to default values >+ def_val = definition.get('default', None) >+ setattr(self, option, def_val) >+ >+ # Fill in the cmdline_parser object >+- if definition.has_key('command_line'): >++ if 'command_line' in definition: >+ descr = definition.get('descr', None) >+ type = definition.get('type', None) >+ >+- if definition.has_key('arg_map'): >++ if 'arg_map' in definition: >+ type, map = definition['arg_map'] >+ if type == str: >+ type_str = 'string' >+@@ -248,10 +251,10 @@ >+ # Set options according to command line flags >+ (cmdline_options, args) = self.cmdline_parser.parse_args() >+ >+- for option, definition in self._conf_options.iteritems(): >++ for option, definition in self._conf_options.items(): >+ val = getattr(cmdline_options, option, None) >+ if val != None: >+- if definition.has_key('arg_map'): >++ if 'arg_map' in definition: >+ former_type, map = definition['arg_map'] >+ try: >+ val = map[val] >+@@ -298,7 +293,8 @@ >+ self.festival_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) >+ try: >+ self.festival_socket.connect((socket.gethostbyname(host), port)) >+- except socket.error, (num, reson): >++ except socket.error as e: >++ (num, reson) = e.args >+ report("""ERROR: It was not possible to connect to Festival on the >+ given host and port. Connection failed with error %d : %s .""" % (num, reson)) >+ report("""Hint: Most likely, your Festival server is not running now >+@@ -500,18 +496,18 @@ >+ report(""" >+ >+ Diagnostics results:""") >+- if results.has_key('spd_say_working'): >++ if 'spd_say_working' in results: >+ if results['spd_say_working']: >+ report("Speech Dispatcher is working") >+ else: >+ report("Speech Dispatcher not working through spd-say") >+- if results.has_key('synthesizers'): >++ if 'synthesizers' in results: >+ report("Synthesizers that were tested and seem to work: %s" % >+ str(results['synthesizers'])) >+- if results.has_key('audio'): >++ if 'audio' in results: >+ report("Audio systems that were tested and seem to work: %s" % >+ str(results['audio'])) >+- if results.has_key('python_speechd'): >++ if 'python_speechd' in results: >+ if(results['python_speechd']): >+ report("Python Speech Dispatcher module is importable") >+ else: >+@@ -562,7 +560,7 @@ >+ time.sleep(2) >+ >+ # All debugging files are written to TMPDIR/speech-dispatcher/ >+- if os.environ.has_key('TMPDIR'): >++ if 'TMPDIR' in os.environ: >+ tmpdir = os.environ['TMPDIR'] >+ else: >+ tmpdir = "/tmp/" >+@@ -639,7 +639,7 @@ >+ # Parse config file in-place and replace the desired options+values >+ for line in fileinput.input(configfile, inplace=True, backup=".bak"): >+ # Check if the current line contains any of the desired options >+- for opt, value in options.iteritems(): >++ for opt, value in options.items(): >+ if opt in line: >+ # Now count unknown words and try to judge if this is >+ # real configuration or just a comment >+@@ -671,11 +671,11 @@ >+ else: >+ spd_val = str(value) >+ >+- print opt + " " + spd_val >++ print(opt + " " + spd_val) >+ break >+ >+ else: >+- print line, >++ print(line, end=' ') >+ >+ def create_user_configuration(self): >+ """Create user configuration in the standard location""" >+diff -urN speechd_config/__init__.py speechd_config/__init__.py >+--- speechd_config/__init__.py 2010-09-01 15:30:12.000000000 +0200 >++++ speechd_config/__init__.py 2012-07-11 11:05:05.000000000 +0200 >+@@ -14,5 +14,5 @@ >+ # along with this program; if not, write to the Free Software >+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA >+ >+-from config import * >++from .config import * >+ >diff --git a/speech-dispatcher.spec b/speech-dispatcher.spec >index 595df23..f9ebc32 100644 >--- a/speech-dispatcher.spec >+++ b/speech-dispatcher.spec >@@ -19,10 +19,14 @@ Buildrequires: glib2-devel > Buildrequires: libao-devel > Buildrequires: pulseaudio-libs-devel > BuildRequires: python-setuptools-devel >+BuildRequires: python2-devel >+BuildRequires: python3-devel > BuildRequires: texinfo > BuildRequires: systemd-units > BuildRequires: automake libtool > Patch0: 0001-RPM-Cleanups.patch >+# Backported Python 3 suppor from speech-dispatcher-0.8-beta1.tar.gz >+Patch1: speech-dispatcher-python3.patch > > Requires(post): systemd-units > Requires(post): systemd-sysv >@@ -74,7 +78,7 @@ Requires(preun):/sbin/install-info > speechd documentation > > %package -n python-speechd >-Summary: Python Client API for speech-dispatcher >+Summary: Python 2 Client API for speech-dispatcher > License: GPLv2+ > Group: Development/Libraries > Requires: speech-dispatcher = %{version}-%{release} >@@ -82,7 +86,17 @@ Obsoletes: speech-dispatcher-python < 0.7.1-11 > Provides: speech-dispatcher-python = %{version}-%{release} > > %description -n python-speechd >-speechd python module >+Python 2 bindings for speech-dispatcher. >+ >+%package -n python3-speechd >+Summary: Python 3 Client API for speech-dispatcher >+License: GPLv2+ >+Group: Development/Libraries >+Requires: speech-dispatcher = %{version}-%{release} >+Requires: python3-pyxdg >+ >+%description -n python3-speechd >+Python 3 bindings for speech-dispatcher. > > %prep > %setup -q >@@ -103,6 +117,16 @@ for dir in \ > popd > done > >+# HACK: copy over and patch the Python 2 module for Python 3 support. >+# Proper Python 3 support is available in speech-dispatcher 0.8-beta1, and >+# this hack can be removed when the package gets updated. >+mkdir -p %{buildroot}%{python3_sitearch} >+cp -a %{buildroot}%{python_sitearch}/* %{buildroot}%{python3_sitearch}/ >+pushd %{buildroot}%{python3_sitearch} >+rm */*.pyc */*.pyo >+patch -p0 < %{PATCH1} >+popd >+ > mkdir -p %{buildroot}%{_unitdir} > install -p -m 0644 %SOURCE1 %{buildroot}%{_unitdir}/ > >@@ -200,10 +224,15 @@ fi > %files -n python-speechd > %{python_sitearch}/speechd* > >+%files -n python3-speechd >+%{python3_sitearch}/speechd* >+ > %changelog > * Wed Feb 27 2013 Kalev Lember <kalevlember@gmail.com> - 0.7.1-11 > - Rename the Python 2 package to python-speechd, for consistency with other > distros >+- Backport Python 3 bindings from 0.8-beta1 and install them in python3-speechd >+ subpackage (#867958) > > * Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.7.1-10 > - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild >-- >1.8.1.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 867958
:
703420
|
703421
|
703422
|
703424
|
703425
| 703882