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,