Hi Dave,

Please find the attached patch.

Thanks,
Khushboo

On Mon, Nov 20, 2017 at 8:59 PM, Dave Page <dp...@pgadmin.org> wrote:

> Hi
>
> Thanks, but I'm still getting the same error.
>
>
On Mon, Nov 20, 2017 at 3:23 PM, Khushboo Vashi <
> khushboo.va...@enterprisedb.com> wrote:
>
>> Hi Dave,
>>
>> Please find the attached patch to fix the issue.
>> I have fixed the issue looking at the error you got as I can not
>> reproduce the issue on Python 2.7 or Python 3.5.
>>
>> Thanks,
>> Khushboo
>>
>>
>>
>> On Mon, Nov 20, 2017 at 8:05 PM, Dave Page <dp...@pgadmin.org> wrote:
>>
>>>
>>>
>>> On Mon, Nov 20, 2017 at 2:20 PM, Khushboo Vashi <
>>> khushboo.va...@enterprisedb.com> wrote:
>>>
>>>>
>>>>
>>>> On 20 Nov 2017 19:45, "Dave Page" <dp...@pgadmin.org> wrote:
>>>>
>>>> Though whilst it worked fine when I was testing, I now get the
>>>> following. Khushboo - can you investigate please?
>>>>
>>>> Exception in thread Thread-96:
>>>>
>>>> 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/li
>>>> b/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 167, in execute
>>>>
>>>> for data in application_iter:
>>>>
>>>> File 
>>>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werkzeug/wsgi.py",
>>>> line 691, in __next__
>>>>
>>>> return self._next()
>>>>
>>>> File 
>>>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/werkzeug/wrappers.py",
>>>> line 81, in _iter_encoded
>>>>
>>>> for item in iterable:
>>>>
>>>> File 
>>>> "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/__init__.py",
>>>> line 828, in gen
>>>>
>>>> quotechar=quote_char
>>>>
>>>> File 
>>>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/backports/csv.py",
>>>> line 670, in __init__
>>>>
>>>> self.writer = writer(f, dialect, *args, **kwds)
>>>>
>>>> File 
>>>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/backports/csv.py",
>>>> line 185, in __init__
>>>>
>>>> raise TypeError(*e.args)
>>>>
>>>> TypeError: "delimiter" must be string, not bytes
>>>>
>>>> Please share your CSV Output settings.
>>>>
>>>
>>> Screenshot attached.
>>>
>>>
>>>
>>>>
>>>> On Mon, Nov 20, 2017 at 1:51 PM, Dave Page <dp...@pgadmin.org> wrote:
>>>>
>>>>> Thanks, applied.
>>>>>
>>>>> On Mon, Nov 20, 2017 at 5:18 AM, Khushboo Vashi <
>>>>> khushboo.va...@enterprisedb.com> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Please find the attached updated patch.
>>>>>>
>>>>>>
>>>>>> On Thu, Nov 16, 2017 at 7:42 PM, Dave Page <dp...@pgadmin.org> wrote:
>>>>>>
>>>>>>> Hi
>>>>>>>
>>>>>>> On Thu, Nov 16, 2017 at 10:01 AM, Khushboo Vashi <
>>>>>>> khushboo.va...@enterprisedb.com> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Please find the attached patch for RM #2781 : New option to set the
>>>>>>>> quotation mark for copying to clipboard.
>>>>>>>>
>>>>>>>> This patch includes:
>>>>>>>>
>>>>>>>> - Provide options in preferences to control the CSV output which
>>>>>>>> includes copy to clipboard and download as CSV features in Query Tool
>>>>>>>> - Modified related jasmine tests
>>>>>>>> - Modified related feature tests
>>>>>>>>
>>>>>>>
>>>>>>> Thanks. At first glance, I see a few issues with this patch:
>>>>>>>
>>>>>>> - I can type into the combo boxes in the preferences, but only to
>>>>>>> search. That means (for example) that the only quote character I can 
>>>>>>> use is
>>>>>>> ". I can't use anything else as a might want. The same applies to the 
>>>>>>> field
>>>>>>> separator.
>>>>>>>
>>>>>>
>>>>>>>
>>>>>> Provided provision to add user defined field separator and quote
>>>>>> character.
>>>>>>
>>>>>> - I can click the x to clear the options in the combo boxes, but then
>>>>>>> the settings can be accepted and stored. For the separator and quote 
>>>>>>> char,
>>>>>>> I assume they just become blank, however the quoting method makes no 
>>>>>>> sense
>>>>>>> to be unspecified.
>>>>>>>
>>>>>>> Fixed. User can not clear the combo-boxes.
>>>>>>
>>>>>> - There don't seem to be any documentation updates.
>>>>>>>
>>>>>> The documents of SQL Editor and Preferences are updated.
>>>>>>
>>>>>>>
>>>>>>> - The CSV Quoting options appear to apply to copying from the grid,
>>>>>>> but they should apply to saving results as CSV.
>>>>>>>
>>>>>>> - The Result Copy quoting options (which should apply to copied
>>>>>>> data) are missing altogether.
>>>>>>>
>>>>>>> To be clear, there should be 6 new config options, 3 of which apply
>>>>>>> to data when copied from the grid, and the other 3 which apply when 
>>>>>>> saving
>>>>>>> data as CSV. Please see the original RM case in which I detailed what 
>>>>>>> the
>>>>>>> settings should be and what they should do.
>>>>>>>
>>>>>>
>>>>>> Provided 2 set of options (one set consists of 3 options);  one for
>>>>>> CSV output and another for Results grid.
>>>>>>
>>>>>>
>>>>>>>
>>>>>> Thanks.
>>>>>>>
>>>>>>> --
>>>>>>> Dave Page
>>>>>>> Blog: http://pgsnake.blogspot.com
>>>>>>> Twitter: @pgsnake
>>>>>>>
>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Khushboo
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Dave Page
>>>>> Blog: http://pgsnake.blogspot.com
>>>>> Twitter: @pgsnake
>>>>>
>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>> The Enterprise PostgreSQL Company
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Dave Page
>>>> Blog: http://pgsnake.blogspot.com
>>>> Twitter: @pgsnake
>>>>
>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>> The Enterprise PostgreSQL Company
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Dave Page
>>> Blog: http://pgsnake.blogspot.com
>>> Twitter: @pgsnake
>>>
>>> EnterpriseDB UK: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>>
>>
>>
>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py
index da44738..86e9739 100644
--- a/web/pgadmin/utils/driver/psycopg2/__init__.py
+++ b/web/pgadmin/utils/driver/psycopg2/__init__.py
@@ -822,6 +822,20 @@ WHERE
             else:
                 quote = csv.QUOTE_NONE
 
+            if hasattr(str, 'decode'):
+                # Decode the field_separator
+                if type(field_separator) != str:
+                    try:
+                        field_separator = field_separator.decode('utf-8')
+                    except:
+                        pass
+                # Decode the quote_char
+                if type(quote_char) != str:
+                    try:
+                        quote_char = quote_char.decode('utf-8')
+                    except:
+                        pass
+
             csv_writer = csv.DictWriter(
                 res_io, fieldnames=header, delimiter=field_separator,
                 quoting=quote,

Reply via email to