On Wed, Jan 3, 2018 at 8:54 PM, Dave Page <dp...@pgadmin.org> wrote:

> Hi
>
> On Mon, Dec 25, 2017 at 11:03 AM, Khushboo Vashi <
> khushboo.va...@enterprisedb.com> wrote:
>
>> Hi,
>>
>> Please find the attached patch to fix RM #2963: Backup database, Restore
>> database and Maintenance Database failed for é object.
>>
>
> With the patch applied, I get:
>
> 2018-01-03 15:23:00,110: INFO pgadmin: Executing the process executor
> with the arguments: ['/Users/dpage/.virtualenvs/pgadmin4/bin/python',
> '/Users/dpage/git/pgadmin4/web/pgadmin/misc/bgprocess/process_executor.py',
> '/usr/local/pgsql/bin/pg_dump', u'--file', u'/Users/dpage/e.sql',
> u'--host', u'localhost', u'--port', '5432', u'--username', u'postgres',
> u'--no-password', u'--verbose', u'--format=c', u'--blobs', u'\xe9']
> 2018-01-03 15:23:00,117: INFO werkzeug: 127.0.0.1 - - [03/Jan/2018
> 15:23:00] "POST /backup/job/1/object HTTP/1.1" 200 -
> Exception in thread Thread-6:
> Traceback (most recent call last):
>   File 
> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py",
> line 810, in __bootstrap_inner
>     self.run()
>   File 
> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py",
> line 763, in run
>     self.__target(*self.__args, **self.__kwargs)
>   File "/System/Library/Frameworks/Python.framework/Versions/2.7/
> lib/python2.7/SocketServer.py", line 602, in process_request_thread
>     self.handle_error(request, client_address)
>   File "/System/Library/Frameworks/Python.framework/Versions/2.7/
> lib/python2.7/SocketServer.py", line 599, in process_request_thread
>     self.finish_request(request, client_address)
>   File "/System/Library/Frameworks/Python.framework/Versions/2.7/
> lib/python2.7/SocketServer.py", line 334, in finish_request
>     self.RequestHandlerClass(request, client_address, self)
>   File "/System/Library/Frameworks/Python.framework/Versions/2.7/
> lib/python2.7/SocketServer.py", line 655, in __init__
>     self.handle()
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werkzeug/serving.py",
> line 200, in handle
>     rv = BaseHTTPRequestHandler.handle(self)
>   File "/System/Library/Frameworks/Python.framework/Versions/2.7/
> lib/python2.7/BaseHTTPServer.py", line 340, in handle
>     self.handle_one_request()
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werkzeug/serving.py",
> line 235, in handle_one_request
>     return self.run_wsgi()
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werkzeug/serving.py",
> line 177, in run_wsgi
>     execute(self.server.app)
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werkzeug/serving.py",
> line 165, in execute
>     application_iter = app(environ, start_response)
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 2000, in __call__
>     return self.wsgi_app(environ, start_response)
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1991, in wsgi_app
>     response = self.make_response(self.handle_exception(e))
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1567, in handle_exception
>     reraise(exc_type, exc_value, tb)
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1988, in wsgi_app
>     response = self.full_dispatch_request()
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1641, in full_dispatch_request
>     rv = self.handle_user_exception(e)
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1544, in handle_user_exception
>     reraise(exc_type, exc_value, tb)
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1639, in full_dispatch_request
>     rv = self.dispatch_request()
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py",
> line 1625, in dispatch_request
>     return self.view_functions[rule.endpoint](**req.view_args)
>   File 
> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask_login.py",
> line 792, in decorated_view
>     return func(*args, **kwargs)
>   File "/Users/dpage/git/pgadmin4/web/pgadmin/misc/bgprocess/__init__.py",
> line 62, in index
>     return make_response(response=BatchProcess.list())
>   File "/Users/dpage/git/pgadmin4/web/pgadmin/misc/bgprocess/processes.py",
> line 512, in list
>     desc = loads(p.desc)
>   File 
> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py",
> line 1381, in loads
>     file = StringIO(str)
> UnicodeEncodeError: 'ascii' codec can't encode character u'\ufffd' in
> position 138: ordinal not in range(128)
>
> Fixed. Please find the attached updated patch.

> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
diff --git a/web/pgadmin/misc/bgprocess/processes.py b/web/pgadmin/misc/bgprocess/processes.py
index 39bb8e3..3f23a99 100644
--- a/web/pgadmin/misc/bgprocess/processes.py
+++ b/web/pgadmin/misc/bgprocess/processes.py
@@ -164,12 +164,13 @@ class BatchProcess(object):
             csv_writer.writerow(_args)
 
         args_val = args_csv_io.getvalue().strip(str('\r\n'))
+        desc_str = dumps(self.desc)
 
         j = Process(
             pid=int(id), command=_cmd,
-            arguments=args_val.decode('utf-8', 'replace') if IS_PY2 and hasattr(args_val, 'decode') \
-                else args_val,
-            logdir=log_dir, desc=dumps(self.desc), user_id=current_user.id
+            arguments=args_val.decode('utf-8', 'replace') if IS_PY2 and hasattr(args_val, 'decode') else args_val,
+            logdir=log_dir, desc=desc_str.decode('utf-8', 'ignore') if IS_PY2 and hasattr(desc_str, 'decode')
+            else desc_str, user_id=current_user.id
         )
         db.session.add(j)
         db.session.commit()
@@ -508,6 +509,7 @@ class BatchProcess(object):
             etime = parser.parse(p.end_time or get_current_time())
 
             execution_time = (etime - stime).total_seconds()
+            p.desc = p.desc.encode('utf-8', 'ignore') if IS_PY2 and hasattr(p.desc, 'decode') else p.desc
             desc = loads(p.desc)
             details = desc
 

Reply via email to