public inbox for [email protected]  
help / color / mirror / Atom feed
From: Dave Page <[email protected]>
To: Akshay Joshi <[email protected]>
Cc: pgadmin-hackers <[email protected]>
Subject: Re: [pgAdmin4][Patch] - RM 3780 pgAdmin4 lacks ability to specify NULL values in CSV export
Date: Fri, 21 Dec 2018 12:22:20 +0000
Message-ID: <CA+OCxowKR--3-Ar4HPU-22h12WJTGKQ+UEVdkxBcvNpbmK9cxQ@mail.gmail.com> (raw)
In-Reply-To: <CANxoLDfz2Mr6eD_N9sFPBsNMGv9ym_+N-hyAkuey=8k50Lf1=w@mail.gmail.com>
References: <CANxoLDdQr19YWNRgYU+ARs4BgnJGwNBu_51+g0AXWbCC6ZpNNA@mail.gmail.com>
	<CA+OCxoxno88VLcWxc5ybfDxg=yZNpUFdNCXmKgF4hk_sN50HUQ@mail.gmail.com>
	<CANxoLDfg0xmVoQQ8JU4OAaBmWOxuCWz0Z2eY-ZWPWHDBn2uJ7w@mail.gmail.com>
	<CANxoLDca1xaaS+T2oAgNhWxQVJf7N+KPm89KX4jzNiy8x2MrZg@mail.gmail.com>
	<CA+OCxoxbiW-aULQP4ftBw3eeAz+cgB6krHntGZBV_4MoxTV=bA@mail.gmail.com>
	<CANxoLDcoc3aXym5SZMO0ENKHmqNPWf4Kut9KupT5QCPzTtLfZg@mail.gmail.com>
	<CA+OCxozWwZE+QvR9FvOjTupzA=o240mftTE8Ao7kFyxf2qMR_A@mail.gmail.com>
	<CANxoLDfB5__1_dVUOUmuNMfG7UN5PFCiagyRe55J_bQPmcqJyg@mail.gmail.com>
	<CANxoLDeDkyT2sy372ixKOpTwDhrtzsA8DqE7Wyn2kk3dhLtK8A@mail.gmail.com>
	<CA+OCxozt1gmMhXPK7Nc8ssAbULjhT=LbvQDB9g0VvMri0g+g3w@mail.gmail.com>
	<CANxoLDfz2Mr6eD_N9sFPBsNMGv9ym_+N-hyAkuey=8k50Lf1=w@mail.gmail.com>

Sorry! Here is is.

On Fri, Dec 21, 2018 at 12:12 PM Akshay Joshi <[email protected]>
wrote:

> Hi Dave
>
> Can you please attached the updated patch with your changes. I'll try to
> fix the exception.
>
> On Fri, Dec 21, 2018 at 3:57 AM Dave Page <[email protected]> wrote:
>
>> Hi
>>
>> Here's an updated patch as I've tweaked some of the wording. The
>> screenshot probably isn't the right resolution, but as we're replacing them
>> anyway it doesn't seem overly important. Feel free to fix if you like :-)
>>
>> With quoting set to either All or Strings, everything looks good. With it
>> set to None, I still get an exception (below). The query I'm using is this:
>>
>> SELECT NULL::text, 1234::int, 'Foo bar'::text, E'Foo\nBar'::text
>>
>> Field separator: ,
>> Quote character: "
>> Replace null's with: NULL
>>
>> Steps:
>>
>> 1) Run pgAdmin in Desktop mode. I'm running from within PyuCharms, using
>> the venv detailed below.
>> 2) Open the Query Tool on a PostgreSQL 9.6.10 database, running on MacOS
>> 10.14.1
>> 3) Run the above query, wit quoting set to All and check the result in
>> the grid.
>> 4) Download the CSV file and check.
>> 5) Open Preferences and set quoting to Strings.
>> 6) Download the CSV file and check.
>> 7) Open Preferences and set quoting to None.
>> 8) Download the CSV file *exception occurs*.
>>
>>
>> System info:
>>
>> (pgadmin4) dpage@hal:*~/git/pgadmin4*$ python --version
>>
>> Python 3.6.7
>>
>> (pgadmin4) dpage@hal:*~/git/pgadmin4*$ pip freeze
>>
>> alabaster==0.7.11
>>
>> alembic==1.0.0
>>
>> asn1crypto==0.24.0
>>
>> Babel==2.6.0
>>
>> bcrypt==3.1.4
>>
>> blinker==1.4
>>
>> certifi==2018.8.24
>>
>> cffi==1.11.5
>>
>> chardet==3.0.4
>>
>> chromedriver-installer==0.0.6
>>
>> click==6.7
>>
>> cryptography==2.3
>>
>> docutils==0.14
>>
>> extras==1.0.0
>>
>> fixtures==3.0.0
>>
>> Flask==0.12.4
>>
>> Flask-BabelEx==0.9.3
>>
>> Flask-Gravatar==0.5.0
>>
>> Flask-HTMLmin==1.3.2
>>
>> Flask-Login==0.3.2
>>
>> Flask-Mail==0.9.1
>>
>> Flask-Migrate==2.1.1
>>
>> Flask-Paranoid==0.2.0
>>
>> Flask-Principal==0.4.0
>>
>> Flask-Security==3.0.0
>>
>> Flask-SQLAlchemy==2.3.2
>>
>> Flask-WTF==0.14.2
>>
>> html5lib==1.0.1
>>
>> htmlmin==0.1.12
>>
>> idna==2.7
>>
>> imagesize==1.1.0
>>
>> itsdangerous==0.24
>>
>> Jinja2==2.10
>>
>> linecache2==1.0.0
>>
>> Mako==1.0.7
>>
>> MarkupSafe==1.0
>>
>> packaging==18.0
>>
>> paramiko==2.4.1
>>
>> passlib==1.7.1
>>
>> pbr==3.1.1
>>
>> psutil==5.4.8
>>
>> psycopg2==2.7.5
>>
>> pyasn1==0.4.4
>>
>> pycodestyle==2.3.1
>>
>> pycparser==2.18
>>
>> pycrypto==2.6.1
>>
>> Pygments==2.2.0
>>
>> PyNaCl==1.2.1
>>
>> pyparsing==2.2.2
>>
>> pyperclip==1.6.4
>>
>> pyrsistent==0.14.2
>>
>> python-dateutil==2.7.3
>>
>> python-editor==1.0.3
>>
>> python-mimeparse==1.6.0
>>
>> pytz==2018.3
>>
>> requests==2.19.1
>>
>> selenium==3.14.1
>>
>> simplejson==3.13.2
>>
>> six==1.11.0
>>
>> snowballstemmer==1.2.1
>>
>> speaklater==1.3
>>
>> Sphinx==1.8.2
>>
>> sphinxcontrib-websupport==1.1.0
>>
>> SQLAlchemy==1.2.10
>>
>> sqlparse==0.2.4
>>
>> sshtunnel==0.1.4
>>
>> testscenarios==0.5.0
>>
>> testtools==2.3.0
>>
>> traceback2==1.4.0
>>
>> unittest2==1.1.0
>>
>> urllib3==1.23
>>
>> webencodings==0.5.1
>>
>> Werkzeug==0.14.1
>>
>> WTForms==2.1
>>
>> Exception:
>>
>> 2018-12-21 11:47:28,995: SQL pgadmin: Execute (with server cursor) for
>> server #2 - CONN:8760231 (Query-id: 8649354):
>> SELECT NULL::text, 1234::int, 'Foo bar'::text, E'Foo\nBar'::text
>> 2018-12-21 11:47:29,001: INFO werkzeug: 127.0.0.1 - - [21/Dec/2018
>> 11:47:29] "GET
>> /sqleditor/query_tool/download/2133388?query=SELECT%20NULL%3A%3Atext%2C%201234%3A%3Aint%2C%20%27Foo%20bar%27%3A%3Atext%2C%20E%27Foo%5CnBar%27%3A%3Atext&filename=data-1545392848979.csv
>> HTTP/1.1" 500 -
>> 2018-12-21 11:47:29,003: ERROR werkzeug: Error on request:
>> Traceback (most recent call last):
>>   File
>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python3.6/site-packages/werkzeug/serving.py",
>> line 270, in run_wsgi
>>     execute(self.server.app)
>>   File
>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python3.6/site-packages/werkzeug/serving.py",
>> line 260, in execute
>>     for data in application_iter:
>>   File
>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python3.6/site-packages/werkzeug/wsgi.py",
>> line 870, in __next__
>>     return self._next()
>>   File
>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python3.6/site-packages/werkzeug/wrappers.py",
>> line 82, in _iter_encoded
>>     for item in iterable:
>>   File
>> "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/connection.py",
>> line 848, in gen
>>     csv_writer.writerows(results)
>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line 761, in
>> writerows
>>     return self.writer.writerows(map(self._dict_to_list, rowdicts))
>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line 268, in
>> writerows
>>     self.writerow(row)
>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line 261, in
>> writerow
>>     row = [self.strategy.prepare(field, only=only) for field in row]
>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line 261, in
>> <listcomp>
>>     row = [self.strategy.prepare(field, only=only) for field in row]
>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line 142, in
>> prepare
>>     raise Error('No escapechar is set')
>> _csv.Error: No escapechar is set
>>
>> On Thu, Dec 20, 2018 at 1:05 PM Akshay Joshi <
>> [email protected]> wrote:
>>
>>> Hi Dave
>>>
>>> On Thu, Dec 20, 2018 at 5:12 PM Akshay Joshi <
>>> [email protected]> wrote:
>>>
>>>>
>>>>
>>>> On Thu, Dec 20, 2018 at 4:48 PM Dave Page <[email protected]> wrote:
>>>>
>>>>> Hi
>>>>>
>>>>> On Thu, Dec 20, 2018 at 10:09 AM Akshay Joshi <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi Dave
>>>>>>
>>>>>> On Thu, Dec 20, 2018 at 3:08 PM Dave Page <[email protected]> wrote:
>>>>>>
>>>>>>> Hi
>>>>>>>
>>>>>>> When testing with quoting set to None, quote = " and delimiter = , I
>>>>>>> get the following exception when I try to download:
>>>>>>>
>>>>>>> 2018-12-20 09:34:02,547: SQL pgadmin: Execute (with server cursor)
>>>>>>> for server #2 - CONN:354106 (Query-id: 4121147):
>>>>>>> SELECT NULL::text, 1234::int, 'Foo bar'::text, E'Foo\nBar'::text
>>>>>>> 2018-12-20 09:34:02,570: INFO werkzeug: 127.0.0.1 - - [20/Dec/2018
>>>>>>> 09:34:02] "GET
>>>>>>> /sqleditor/query_tool/download/5610522?query=SELECT%20NULL%3A%3Atext%2C%201234%3A%3Aint%2C%20%27Foo%20bar%27%3A%3Atext%2C%20E%27Foo%5CnBar%27%3A%3Atext&filename=data-1545298442530.csv
>>>>>>> HTTP/1.1" 500 -
>>>>>>> 2018-12-20 09:34:02,572: ERROR werkzeug: Error on request:
>>>>>>> Traceback (most recent call last):
>>>>>>>   File
>>>>>>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python3.6/site-packages/werkzeug/serving.py",
>>>>>>> line 270, in run_wsgi
>>>>>>>     execute(self.server.app)
>>>>>>>   File
>>>>>>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python3.6/site-packages/werkzeug/serving.py",
>>>>>>> line 260, in execute
>>>>>>>     for data in application_iter:
>>>>>>>   File
>>>>>>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python3.6/site-packages/werkzeug/wsgi.py",
>>>>>>> line 870, in __next__
>>>>>>>     return self._next()
>>>>>>>   File
>>>>>>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python3.6/site-packages/werkzeug/wrappers.py",
>>>>>>> line 82, in _iter_encoded
>>>>>>>     for item in iterable:
>>>>>>>   File
>>>>>>> "/Users/dpage/git/pgadmin4/web/pgadmin/utils/driver/psycopg2/connection.py",
>>>>>>> line 820, in gen
>>>>>>>     csv_writer.writerows(results)
>>>>>>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line
>>>>>>> 748, in writerows
>>>>>>>     return self.writer.writerows(map(self._dict_to_list, rowdicts))
>>>>>>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line
>>>>>>> 256, in writerows
>>>>>>>     self.writerow(row)
>>>>>>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line
>>>>>>> 249, in writerow
>>>>>>>     row = [self.strategy.prepare(field, only=only) for field in row]
>>>>>>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line
>>>>>>> 249, in <listcomp>
>>>>>>>     row = [self.strategy.prepare(field, only=only) for field in row]
>>>>>>>   File "/Users/dpage/git/pgadmin4/web/pgadmin/utils/csv.py", line
>>>>>>> 136, in prepare
>>>>>>>     raise Error('No escapechar is set')
>>>>>>> _csv.Error: No escapechar is set
>>>>>>>
>>>>>>
>>>>>>     Not able to reproduce the above issue. I have tested it with the
>>>>>> same setting as you mentioned. Please refer all the attached screenshots.
>>>>>> Please specify the steps if they are different.
>>>>>>
>>>>>>>
>>>>>>> When I have quoting set to All, the first column is returned as ""
>>>>>>>
>>>>>>> dpage@hal:*~/Downloads*$ more data-1545298598112.csv
>>>>>>>
>>>>>>> "text","int4","text-2","text-3"
>>>>>>>
>>>>>>> "","1234","Foo bar","Foo
>>>>>>>
>>>>>>> Bar"
>>>>>>>
>>>>>>> Isn't the point for it to be NULL?
>>>>>>>
>>>>>>
>>>>>>     while quoting is set to ALL, all the data types has been quoted,
>>>>>> so I thought null values should be replaced by "" instead of blank. But if
>>>>>> you think null values shouldn't be quoted even if user select quote ALL,
>>>>>> I'll fix it and resend the patch.
>>>>>>
>>>>>
>>>>> So how would you distinguish NULL from an empty string? Isn't that
>>>>> exactly what the bug is about?
>>>>>
>>>>> I still think we need a "Replace NULLs with" config option, and
>>>>> regardless of quoting settings we always replace NULL values with whatever
>>>>> that is set to  - for which the user could then choose options like:
>>>>>
>>>>> NULL
>>>>> "NULL"
>>>>> ""
>>>>> ''
>>>>> <empty string>
>>>>>
>>>>> We would never quote the NULL replacement value - if the user wanted
>>>>> it to be quoted, they would include the quotes in the configured string.
>>>>>
>>>>
>>>>
>>>>    OK, Will work on it and send the modified patch again.
>>>>
>>>
>>>       Attached is the modified patch as per your suggestion.
>>>
>>>>
>>>>>
>>>>>>
>>>>>>> On Tue, Dec 18, 2018 at 11:13 AM Akshay Joshi <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hi Dave
>>>>>>>>
>>>>>>>> Attached is the modified patch to fix review comments.
>>>>>>>>
>>>>>>>> On Tue, Dec 18, 2018 at 3:00 PM Akshay Joshi <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Dec 18, 2018 at 2:49 PM Dave Page <[email protected]>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi
>>>>>>>>>>
>>>>>>>>>> On Tue, Dec 18, 2018 at 3:45 AM Akshay Joshi <
>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi Hackers,
>>>>>>>>>>>
>>>>>>>>>>> Attached is the patch to fix RM #3780 pgAdmin4 lacks ability to
>>>>>>>>>>> specify NULL values in CSV export.
>>>>>>>>>>>
>>>>>>>>>>> Please review it.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> A few points;
>>>>>>>>>>
>>>>>>>>>> - You've included code from backports.csv, but per the licence
>>>>>>>>>> you need to include a description of the changes made.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>       Sure. In that case I'll copy the complete file and will do
>>>>>>>>> my changes which is of two lines only. With my patch I have remove all the
>>>>>>>>> unwanted code from backport.csv.
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> - Shouldn't backports.csv be removed from requirements.txt, or is
>>>>>>>>>> it used elsewhere?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>      Yes. Will do that.
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> - If the previous point is true, then I'm fairly sure there is
>>>>>>>>>> code in one or more of the many package build scripts that adds an
>>>>>>>>>> __init__.py file to backports.csv in the venv that's created.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>     I'll remove that code as well.
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Dave Page
>>>>>>>>>> Blog: http://pgsnake.blogspot.com
>>>>>>>>>> Twitter: @pgsnake
>>>>>>>>>>
>>>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> *Akshay Joshi*
>>>>>>>>>
>>>>>>>>> *Sr. Software Architect *
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246*
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> *Akshay Joshi*
>>>>>>>>
>>>>>>>> *Sr. Software Architect *
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246*
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Dave Page
>>>>>>> Blog: http://pgsnake.blogspot.com
>>>>>>> Twitter: @pgsnake
>>>>>>>
>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>>>> The Enterprise PostgreSQL Company
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *Akshay Joshi*
>>>>>>
>>>>>> *Sr. Software Architect *
>>>>>>
>>>>>>
>>>>>>
>>>>>> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246*
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Dave Page
>>>>> Blog: http://pgsnake.blogspot.com
>>>>> Twitter: @pgsnake
>>>>>
>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>> The Enterprise PostgreSQL Company
>>>>>
>>>>
>>>>
>>>> --
>>>> *Akshay Joshi*
>>>>
>>>> *Sr. Software Architect *
>>>>
>>>>
>>>>
>>>> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246*
>>>>
>>>
>>>
>>> --
>>> *Akshay Joshi*
>>>
>>> *Sr. Software Architect *
>>>
>>>
>>>
>>> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246*
>>>
>>
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EnterpriseDB UK: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>
>
> --
> *Akshay Joshi*
>
> *Sr. Software Architect *
>
>
>
> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246*
>


-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Attachments:

  [application/octet-stream] RM_3780_v4.patch (112.6K, 3-RM_3780_v4.patch)
  download | inline diff:
Index: pkg/pip/setup_pip.py
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- pkg/pip/setup_pip.py	(revision a000dc6f60cc4bcf527ecab264ca9261e5c8172f)
+++ pkg/pip/setup_pip.py	(date 1545392222000)
@@ -96,7 +96,6 @@
             "Flask-BabelEx==0.9.3"
         ],
         ":python_version<='2.7'": [
-            "backports.csv==1.0.5",
             "importlib==1.0.3"
         ],
         ":python_version>='2.7'": [
Index: web/pgadmin/utils/csv.py
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- web/pgadmin/utils/csv.py	(date 1545392222000)
+++ web/pgadmin/utils/csv.py	(date 1545392222000)
@@ -0,0 +1,761 @@
+"""
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF hereby
+grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
+analyze, test, perform and/or display publicly, prepare derivative works,
+distribute, and otherwise use Python alone or in any derivative version,
+provided, however, that PSF's License Agreement and PSF's notice of copyright,
+i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,2010
+2011, 2012, 2013, 2014, 2015, 2016, 2017 Python Software Foundation; All Rights
+Reserved" are retained in Python alone or in any derivative version prepared by
+Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+
+4. PSF is making Python available to Licensee on an "AS IS"
+basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee.  This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+"""
+
+############################################################################
+# Changes:
+# Added new parameter in dialect 'replace_nulls_with' to compare it against
+# the value to be quoted or not.
+# Handle the null value if value is None or equal to
+# 'replace_nulls_with' then it represents the null value, so no need to
+# quote it.
+############################################################################
+
+from __future__ import unicode_literals, absolute_import
+
+__all__ = ["QUOTE_MINIMAL", "QUOTE_ALL", "QUOTE_NONNUMERIC", "QUOTE_NONE",
+           "Error", "Dialect", "__doc__", "excel", "excel_tab",
+           "field_size_limit", "reader", "writer", "register_dialect",
+           "get_dialect", "list_dialects", "unregister_dialect",
+           "__version__", "DictReader", "DictWriter"]
+
+import re
+import numbers
+from io import StringIO
+from csv import (
+    QUOTE_MINIMAL, QUOTE_ALL, QUOTE_NONNUMERIC, QUOTE_NONE,
+    __version__, __doc__, Error, field_size_limit,
+)
+
+# Stuff needed from six
+import sys
+PY3 = sys.version_info[0] == 3
+if PY3:
+    string_types = str
+    text_type = str
+    binary_type = bytes
+    unichr = chr
+else:
+    string_types = basestring
+    text_type = unicode
+    binary_type = str
+
+
+class QuoteStrategy(object):
+    quoting = None
+
+    def __init__(self, dialect):
+        if self.quoting is not None:
+            assert dialect.quoting == self.quoting
+        self.dialect = dialect
+        self.setup()
+
+        escape_pattern_quoted = r'({quotechar})'.format(
+            quotechar=re.escape(self.dialect.quotechar or '"'))
+        escape_pattern_unquoted = r'([{specialchars}])'.format(
+            specialchars=re.escape(self.specialchars))
+
+        self.escape_re_quoted = re.compile(escape_pattern_quoted)
+        self.escape_re_unquoted = re.compile(escape_pattern_unquoted)
+
+    def setup(self):
+        """Optional method for strategy-wide optimizations."""
+
+    def quoted(self, field=None, raw_field=None, only=None):
+        """Determine whether this field should be quoted."""
+        raise NotImplementedError(
+            'quoted must be implemented by a subclass')
+
+    @property
+    def specialchars(self):
+        """The special characters that need to be escaped."""
+        raise NotImplementedError(
+            'specialchars must be implemented by a subclass')
+
+    def escape_re(self, quoted=None):
+        if quoted:
+            return self.escape_re_quoted
+        return self.escape_re_unquoted
+
+    def escapechar(self, quoted=None):
+        if quoted and self.dialect.doublequote:
+            return self.dialect.quotechar
+        return self.dialect.escapechar
+
+    def prepare(self, raw_field, only=None):
+        field = text_type(raw_field if raw_field is not None else '')
+        quoted = self.quoted(field=field, raw_field=raw_field, only=only)
+
+        escape_re = self.escape_re(quoted=quoted)
+        escapechar = self.escapechar(quoted=quoted)
+
+        if escape_re.search(field):
+            escapechar = '\\\\' if escapechar == '\\' else escapechar
+            if not escapechar:
+                raise Error('No escapechar is set')
+            escape_replace = r'{escapechar}\1'.format(escapechar=escapechar)
+            field = escape_re.sub(escape_replace, field)
+
+        if quoted:
+            field = '{quotechar}{field}{quotechar}'.format(
+                quotechar=self.dialect.quotechar, field=field)
+
+        return field
+
+
+class QuoteMinimalStrategy(QuoteStrategy):
+    quoting = QUOTE_MINIMAL
+
+    def setup(self):
+        self.quoted_re = re.compile(r'[{specialchars}]'.format(
+            specialchars=re.escape(self.specialchars)))
+
+    @property
+    def specialchars(self):
+        return (
+            self.dialect.lineterminator +
+            self.dialect.quotechar +
+            self.dialect.delimiter +
+            (self.dialect.escapechar or '')
+        )
+
+    def quoted(self, field, only, **kwargs):
+        if field == self.dialect.quotechar and not self.dialect.doublequote:
+            # If the only character in the field is the quotechar, and
+            # doublequote is false, then just escape without outer quotes.
+            return False
+        return field == '' and only or bool(self.quoted_re.search(field))
+
+
+class QuoteAllStrategy(QuoteStrategy):
+    quoting = QUOTE_ALL
+
+    @property
+    def specialchars(self):
+        return self.dialect.quotechar
+
+    def quoted(self, raw_field, **kwargs):
+        # Handle the null value if raw_field is None or equal to
+        # replace_nulls_with then it represents the null value, so no need to
+        # quote it.
+        if raw_field is None or raw_field == self.dialect.replace_nulls_with:
+            return False
+        return True
+
+
+class QuoteNonnumericStrategy(QuoteStrategy):
+    quoting = QUOTE_NONNUMERIC
+
+    @property
+    def specialchars(self):
+        return (
+            self.dialect.lineterminator +
+            self.dialect.quotechar +
+            self.dialect.delimiter +
+            (self.dialect.escapechar or '')
+        )
+
+    def quoted(self, raw_field, **kwargs):
+        # Handle the null value if raw_field is None or equal to
+        # replace_nulls_with then it represents the null value, so no need to
+        # quote it.
+        if raw_field is None or raw_field == self.dialect.replace_nulls_with:
+            return False
+        return not isinstance(raw_field, numbers.Number)
+
+
+class QuoteNoneStrategy(QuoteStrategy):
+    quoting = QUOTE_NONE
+
+    @property
+    def specialchars(self):
+        return (
+            self.dialect.lineterminator +
+            (self.dialect.quotechar or '') +
+            self.dialect.delimiter +
+            (self.dialect.escapechar or '')
+        )
+
+    def quoted(self, field, only, **kwargs):
+        if field == '' and only:
+            raise Error('single empty field record must be quoted')
+        return False
+
+
+class writer(object):
+    def __init__(self, fileobj, dialect='excel', **fmtparams):
+        if fileobj is None:
+            raise TypeError('fileobj must be file-like, not None')
+
+        self.fileobj = fileobj
+
+        if isinstance(dialect, text_type):
+            dialect = get_dialect(dialect)
+
+        try:
+            self.dialect = Dialect.combine(dialect, fmtparams)
+        except Error as e:
+            raise TypeError(*e.args)
+
+        strategies = {
+            QUOTE_MINIMAL: QuoteMinimalStrategy,
+            QUOTE_ALL: QuoteAllStrategy,
+            QUOTE_NONNUMERIC: QuoteNonnumericStrategy,
+            QUOTE_NONE: QuoteNoneStrategy,
+        }
+        self.strategy = strategies[self.dialect.quoting](self.dialect)
+
+    def writerow(self, row):
+        if row is None:
+            raise Error('row must be an iterable')
+
+        row = list(row)
+        only = len(row) == 1
+        row = [self.strategy.prepare(field, only=only) for field in row]
+
+        line = self.dialect.delimiter.join(row) + self.dialect.lineterminator
+        return self.fileobj.write(line)
+
+    def writerows(self, rows):
+        for row in rows:
+            self.writerow(row)
+
+
+START_RECORD = 0
+START_FIELD = 1
+ESCAPED_CHAR = 2
+IN_FIELD = 3
+IN_QUOTED_FIELD = 4
+ESCAPE_IN_QUOTED_FIELD = 5
+QUOTE_IN_QUOTED_FIELD = 6
+EAT_CRNL = 7
+AFTER_ESCAPED_CRNL = 8
+
+
+class reader(object):
+    def __init__(self, fileobj, dialect='excel', **fmtparams):
+        self.input_iter = iter(fileobj)
+
+        if isinstance(dialect, text_type):
+            dialect = get_dialect(dialect)
+
+        try:
+            self.dialect = Dialect.combine(dialect, fmtparams)
+        except Error as e:
+            raise TypeError(*e.args)
+
+        self.fields = None
+        self.field = None
+        self.line_num = 0
+
+    def parse_reset(self):
+        self.fields = []
+        self.field = []
+        self.state = START_RECORD
+        self.numeric_field = False
+
+    def parse_save_field(self):
+        field = ''.join(self.field)
+        self.field = []
+        if self.numeric_field:
+            field = float(field)
+            self.numeric_field = False
+        self.fields.append(field)
+
+    def parse_add_char(self, c):
+        if len(self.field) >= field_size_limit():
+            raise Error('field size limit exceeded')
+        self.field.append(c)
+
+    def parse_process_char(self, c):
+        switch = {
+            START_RECORD: self._parse_start_record,
+            START_FIELD: self._parse_start_field,
+            ESCAPED_CHAR: self._parse_escaped_char,
+            AFTER_ESCAPED_CRNL: self._parse_after_escaped_crnl,
+            IN_FIELD: self._parse_in_field,
+            IN_QUOTED_FIELD: self._parse_in_quoted_field,
+            ESCAPE_IN_QUOTED_FIELD: self._parse_escape_in_quoted_field,
+            QUOTE_IN_QUOTED_FIELD: self._parse_quote_in_quoted_field,
+            EAT_CRNL: self._parse_eat_crnl,
+        }
+        return switch[self.state](c)
+
+    def _parse_start_record(self, c):
+        if c == '\0':
+            return
+        elif c == '\n' or c == '\r':
+            self.state = EAT_CRNL
+            return
+
+        self.state = START_FIELD
+        return self._parse_start_field(c)
+
+    def _parse_start_field(self, c):
+        if c == '\n' or c == '\r' or c == '\0':
+            self.parse_save_field()
+            self.state = START_RECORD if c == '\0' else EAT_CRNL
+        elif (c == self.dialect.quotechar and
+              self.dialect.quoting != QUOTE_NONE):
+            self.state = IN_QUOTED_FIELD
+        elif c == self.dialect.escapechar:
+            self.state = ESCAPED_CHAR
+        elif c == ' ' and self.dialect.skipinitialspace:
+            pass  # Ignore space at start of field
+        elif c == self.dialect.delimiter:
+            # Save empty field
+            self.parse_save_field()
+        else:
+            # Begin new unquoted field
+            if self.dialect.quoting == QUOTE_NONNUMERIC:
+                self.numeric_field = True
+            self.parse_add_char(c)
+            self.state = IN_FIELD
+
+    def _parse_escaped_char(self, c):
+        if c == '\n' or c == '\r':
+            self.parse_add_char(c)
+            self.state = AFTER_ESCAPED_CRNL
+            return
+        if c == '\0':
+            c = '\n'
+        self.parse_add_char(c)
+        self.state = IN_FIELD
+
+    def _parse_after_escaped_crnl(self, c):
+        if c == '\0':
+            return
+        return self._parse_in_field(c)
+
+    def _parse_in_field(self, c):
+        # In unquoted field
+        if c == '\n' or c == '\r' or c == '\0':
+            # End of line - return [fields]
+            self.parse_save_field()
+            self.state = START_RECORD if c == '\0' else EAT_CRNL
+        elif c == self.dialect.escapechar:
+            self.state = ESCAPED_CHAR
+        elif c == self.dialect.delimiter:
+            self.parse_save_field()
+            self.state = START_FIELD
+        else:
+            # Normal character - save in field
+            self.parse_add_char(c)
+
+    def _parse_in_quoted_field(self, c):
+        if c == '\0':
+            pass
+        elif c == self.dialect.escapechar:
+            self.state = ESCAPE_IN_QUOTED_FIELD
+        elif (c == self.dialect.quotechar and
+              self.dialect.quoting != QUOTE_NONE):
+            if self.dialect.doublequote:
+                self.state = QUOTE_IN_QUOTED_FIELD
+            else:
+                self.state = IN_FIELD
+        else:
+            self.parse_add_char(c)
+
+    def _parse_escape_in_quoted_field(self, c):
+        if c == '\0':
+            c = '\n'
+
+        self.parse_add_char(c)
+        self.state = IN_QUOTED_FIELD
+
+    def _parse_quote_in_quoted_field(self, c):
+        if (self.dialect.quoting != QUOTE_NONE and
+                c == self.dialect.quotechar):
+            # save "" as "
+            self.parse_add_char(c)
+            self.state = IN_QUOTED_FIELD
+        elif c == self.dialect.delimiter:
+            self.parse_save_field()
+            self.state = START_FIELD
+        elif c == '\n' or c == '\r' or c == '\0':
+            # End of line = return [fields]
+            self.parse_save_field()
+            self.state = START_RECORD if c == '\0' else EAT_CRNL
+        elif not self.dialect.strict:
+            self.parse_add_char(c)
+            self.state = IN_FIELD
+        else:
+            # illegal
+            raise Error("{delimiter}' expected after '{quotechar}".format(
+                delimiter=self.dialect.delimiter,
+                quotechar=self.dialect.quotechar,
+            ))
+
+    def _parse_eat_crnl(self, c):
+        if c == '\n' or c == '\r':
+            pass
+        elif c == '\0':
+            self.state = START_RECORD
+        else:
+            raise Error('new-line character seen in unquoted field - do you '
+                        'need to open the file in universal-newline mode?')
+
+    def __iter__(self):
+        return self
+
+    def __next__(self):
+        self.parse_reset()
+
+        while True:
+            try:
+                lineobj = next(self.input_iter)
+            except StopIteration:
+                if len(self.field) != 0 or self.state == IN_QUOTED_FIELD:
+                    if self.dialect.strict:
+                        raise Error('unexpected end of data')
+                    self.parse_save_field()
+                if self.fields:
+                    break
+                raise
+
+            if not isinstance(lineobj, text_type):
+                typ = type(lineobj)
+                typ_name = 'bytes' if typ == bytes else typ.__name__
+                err_str = ('iterator should return strings, not {0}'
+                           ' (did you open the file in text mode?)')
+                raise Error(err_str.format(typ_name))
+
+            self.line_num += 1
+            for c in lineobj:
+                if c == '\0':
+                    raise Error('line contains NULL byte')
+                self.parse_process_char(c)
+
+            self.parse_process_char('\0')
+
+            if self.state == START_RECORD:
+                break
+
+        fields = self.fields
+        self.fields = None
+        return fields
+
+    next = __next__
+
+
+_dialect_registry = {}
+
+
+def register_dialect(name, dialect='excel', **fmtparams):
+    if not isinstance(name, text_type):
+        raise TypeError('"name" must be a string')
+
+    dialect = Dialect.extend(dialect, fmtparams)
+
+    try:
+        Dialect.validate(dialect)
+    except Exception as e:
+        raise TypeError('dialect is invalid')
+
+    assert name not in _dialect_registry
+    _dialect_registry[name] = dialect
+
+
+def unregister_dialect(name):
+    try:
+        _dialect_registry.pop(name)
+    except KeyError:
+        raise Error('"{name}" not a registered dialect'.format(name=name))
+
+
+def get_dialect(name):
+    try:
+        return _dialect_registry[name]
+    except KeyError:
+        raise Error('Could not find dialect {0}'.format(name))
+
+
+def list_dialects():
+    return list(_dialect_registry)
+
+
+class Dialect(object):
+    """Describe a CSV dialect.
+    This must be subclassed (see csv.excel).  Valid attributes are:
+    delimiter, quotechar, escapechar, doublequote, skipinitialspace,
+    lineterminator, quoting, strict.
+    """
+    _name = ""
+    _valid = False
+    # placeholders
+    delimiter = None
+    quotechar = None
+    escapechar = None
+    doublequote = None
+    skipinitialspace = None
+    lineterminator = None
+    quoting = None
+    strict = None
+
+    def __init__(self):
+        self.validate(self)
+        if self.__class__ != Dialect:
+            self._valid = True
+
+    @classmethod
+    def validate(cls, dialect):
+        dialect = cls.extend(dialect)
+
+        if not isinstance(dialect.quoting, int):
+            raise Error('"quoting" must be an integer')
+
+        if dialect.delimiter is None:
+            raise Error('delimiter must be set')
+        cls.validate_text(dialect, 'delimiter')
+
+        if dialect.lineterminator is None:
+            raise Error('lineterminator must be set')
+        if not isinstance(dialect.lineterminator, text_type):
+            raise Error('"lineterminator" must be a string')
+
+        if dialect.quoting not in [
+                QUOTE_NONE, QUOTE_MINIMAL, QUOTE_NONNUMERIC, QUOTE_ALL]:
+            raise Error('Invalid quoting specified')
+
+        if dialect.quoting != QUOTE_NONE:
+            if dialect.quotechar is None and dialect.escapechar is None:
+                raise Error('quotechar must be set if quoting enabled')
+            if dialect.quotechar is not None:
+                cls.validate_text(dialect, 'quotechar')
+
+    @staticmethod
+    def validate_text(dialect, attr):
+        val = getattr(dialect, attr)
+        if not isinstance(val, text_type):
+            if type(val) == bytes:
+                raise Error('"{0}" must be string, not bytes'.format(attr))
+            raise Error('"{0}" must be string, not {1}'.format(
+                attr, type(val).__name__))
+
+        if len(val) != 1:
+            raise Error('"{0}" must be a 1-character string'.format(attr))
+
+    @staticmethod
+    def defaults():
+        return {
+            'delimiter': ',',
+            'doublequote': True,
+            'escapechar': None,
+            'lineterminator': '\r\n',
+            'quotechar': '"',
+            'quoting': QUOTE_MINIMAL,
+            'skipinitialspace': False,
+            'strict': False,
+            'replace_nulls_with': None
+        }
+
+    @classmethod
+    def extend(cls, dialect, fmtparams=None):
+        if isinstance(dialect, string_types):
+            dialect = get_dialect(dialect)
+
+        if fmtparams is None:
+            return dialect
+
+        defaults = cls.defaults()
+
+        if any(param not in defaults for param in fmtparams):
+            raise TypeError('Invalid fmtparam')
+
+        specified = dict(
+            (attr, getattr(dialect, attr, None))
+            for attr in cls.defaults()
+        )
+
+        specified.update(fmtparams)
+        return type(str('ExtendedDialect'), (cls,), specified)
+
+    @classmethod
+    def combine(cls, dialect, fmtparams):
+        """Create a new dialect with defaults and added parameters."""
+        dialect = cls.extend(dialect, fmtparams)
+        defaults = cls.defaults()
+        specified = dict(
+            (attr, getattr(dialect, attr, None))
+            for attr in defaults
+            if getattr(dialect, attr, None) is not None or
+            attr in ['quotechar', 'delimiter', 'lineterminator', 'quoting']
+        )
+
+        defaults.update(specified)
+        dialect = type(str('CombinedDialect'), (cls,), defaults)
+        cls.validate(dialect)
+        return dialect()
+
+    def __delattr__(self, attr):
+        if self._valid:
+            raise AttributeError('dialect is immutable.')
+        super(Dialect, self).__delattr__(attr)
+
+    def __setattr__(self, attr, value):
+        if self._valid:
+            raise AttributeError('dialect is immutable.')
+        super(Dialect, self).__setattr__(attr, value)
+
+
+class excel(Dialect):
+    """Describe the usual properties of Excel-generated CSV files."""
+    delimiter = ','
+    quotechar = '"'
+    doublequote = True
+    skipinitialspace = False
+    lineterminator = '\r\n'
+    quoting = QUOTE_MINIMAL
+
+
+register_dialect("excel", excel)
+
+
+class excel_tab(excel):
+    """Describe the usual properties of Excel-generated TAB-delimited files."""
+    delimiter = '\t'
+
+
+register_dialect("excel-tab", excel_tab)
+
+
+class unix_dialect(Dialect):
+    """Describe the usual properties of Unix-generated CSV files."""
+    delimiter = ','
+    quotechar = '"'
+    doublequote = True
+    skipinitialspace = False
+    lineterminator = '\n'
+    quoting = QUOTE_ALL
+
+
+register_dialect("unix", unix_dialect)
+
+
+class DictReader(object):
+    def __init__(self, f, fieldnames=None, restkey=None, restval=None,
+                 dialect="excel", *args, **kwds):
+        self._fieldnames = fieldnames   # list of keys for the dict
+        self.restkey = restkey          # key to catch long rows
+        self.restval = restval          # default value for short rows
+        self.reader = reader(f, dialect, *args, **kwds)
+        self.dialect = dialect
+        self.line_num = 0
+
+    def __iter__(self):
+        return self
+
+    @property
+    def fieldnames(self):
+        if self._fieldnames is None:
+            try:
+                self._fieldnames = next(self.reader)
+            except StopIteration:
+                pass
+        self.line_num = self.reader.line_num
+        return self._fieldnames
+
+    @fieldnames.setter
+    def fieldnames(self, value):
+        self._fieldnames = value
+
+    def __next__(self):
+        if self.line_num == 0:
+            # Used only for its side effect.
+            self.fieldnames
+        row = next(self.reader)
+        self.line_num = self.reader.line_num
+
+        # unlike the basic reader, we prefer not to return blanks,
+        # because we will typically wind up with a dict full of None
+        # values
+        while row == []:
+            row = next(self.reader)
+        d = dict(zip(self.fieldnames, row))
+        lf = len(self.fieldnames)
+        lr = len(row)
+        if lf < lr:
+            d[self.restkey] = row[lf:]
+        elif lf > lr:
+            for key in self.fieldnames[lr:]:
+                d[key] = self.restval
+        return d
+
+    next = __next__
+
+
+class DictWriter(object):
+    def __init__(self, f, fieldnames, restval="", extrasaction="raise",
+                 dialect="excel", *args, **kwds):
+        self.fieldnames = fieldnames    # list of keys for the dict
+        self.restval = restval          # for writing short dicts
+        if extrasaction.lower() not in ("raise", "ignore"):
+            raise ValueError("extrasaction (%s) must be 'raise' or 'ignore'"
+                             % extrasaction)
+        self.extrasaction = extrasaction
+        self.writer = writer(f, dialect, *args, **kwds)
+
+    def writeheader(self):
+        header = dict(zip(self.fieldnames, self.fieldnames))
+        self.writerow(header)
+
+    def _dict_to_list(self, rowdict):
+        if self.extrasaction == "raise":
+            wrong_fields = [k for k in rowdict if k not in self.fieldnames]
+            if wrong_fields:
+                raise ValueError("dict contains fields not in fieldnames: " +
+                                 ", ".join([repr(x) for x in wrong_fields]))
+        return (rowdict.get(key, self.restval) for key in self.fieldnames)
+
+    def writerow(self, rowdict):
+        return self.writer.writerow(self._dict_to_list(rowdict))
+
+    def writerows(self, rowdicts):
+        return self.writer.writerows(map(self._dict_to_list, rowdicts))
Index: pkg/mac/build.sh
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- pkg/mac/build.sh	(revision a000dc6f60cc4bcf527ecab264ca9261e5c8172f)
+++ pkg/mac/build.sh	(date 1545392222000)
@@ -144,11 +144,6 @@
     if test -d $DIR_PYMODULES_PATH; then
         ln -s $(basename $DIR_PYMODULES_PATH) $DIR_PYMODULES_PATH/../python
     fi
-
-    # Fix the backports module which will have no __init__.py file
-    if [ "$PYTHON_VERSION" -lt "30" ]; then
-        touch $BUILDROOT/$VIRTUALENV/lib/python/site-packages/backports/__init__.py
-    fi
 }
 
 _build_runtime() {
Index: web/pgadmin/utils/driver/psycopg2/connection.py
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- web/pgadmin/utils/driver/psycopg2/connection.py	(revision a000dc6f60cc4bcf527ecab264ca9261e5c8172f)
+++ web/pgadmin/utils/driver/psycopg2/connection.py	(date 1545392222000)
@@ -37,16 +37,13 @@
     register_string_typecasters, register_binary_typecasters, \
     register_array_to_string_typecasters, ALL_JSON_TYPES
 from .encoding import getEncoding
+from pgadmin.utils import csv
 
 if sys.version_info < (3,):
-    # Python2 in-built csv module do not handle unicode
-    # backports.csv module ported from PY3 csv module for unicode handling
-    from backports import csv
     from StringIO import StringIO
     IS_PY2 = True
 else:
     from io import StringIO
-    import csv
     IS_PY2 = False
 
 _ = gettext
@@ -765,7 +762,31 @@
                 )
             return new_results
 
-        def gen(quote='strings', quote_char="'", field_separator=','):
+        def handle_null_values(results, replace_nulls_with):
+            """
+            This function is used to replace null values with the given string
+
+            :param results:
+            :param replace_nulls_with: null values will be replaced by this
+            string.
+            :return: modified result
+            """
+
+            temp_results = []
+            for row in results:
+                res = dict()
+                for k, v in row.items():
+                    if v is None:
+                        res[k] = replace_nulls_with
+                    else:
+                        res[k] = v
+                temp_results.append(res)
+            results = temp_results
+
+            return results
+
+        def gen(quote='strings', quote_char="'", field_separator=',',
+                replace_nulls_with=None):
 
             results = cur.fetchmany(records)
             if not results:
@@ -815,11 +836,15 @@
             csv_writer = csv.DictWriter(
                 res_io, fieldnames=header, delimiter=field_separator,
                 quoting=quote,
-                quotechar=quote_char
+                quotechar=quote_char,
+                replace_nulls_with=replace_nulls_with
             )
 
             csv_writer.writeheader()
             results = handle_json_data(json_columns, results)
+            # Replace the null values with given string if configured.
+            if replace_nulls_with is not None:
+                results = handle_null_values(results, replace_nulls_with)
             csv_writer.writerows(results)
 
             yield res_io.getvalue()
@@ -836,13 +861,17 @@
                 csv_writer = csv.DictWriter(
                     res_io, fieldnames=header, delimiter=field_separator,
                     quoting=quote,
-                    quotechar=quote_char
+                    quotechar=quote_char,
+                    replace_nulls_with=replace_nulls_with
                 )
 
                 if IS_PY2:
                     results = convert_keys_to_unicode(results, conn_encoding)
 
                 results = handle_json_data(json_columns, results)
+                # Replace the null values with given string if configured.
+                if replace_nulls_with is not None:
+                    results = handle_null_values(results, replace_nulls_with)
                 csv_writer.writerows(results)
                 yield res_io.getvalue()
 
Index: Make.bat
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- Make.bat	(revision a000dc6f60cc4bcf527ecab264ca9261e5c8172f)
+++ Make.bat	(date 1545392222000)
@@ -255,11 +255,6 @@
     ECHO Removing Sphinx
     CALL pip uninstall -y sphinx Pygments alabaster colorama docutils imagesize requests snowballstemmer
 
-    IF %PYTHON_MAJOR% == 2 (
-        ECHO Fixing backports.csv for Python 2 by adding missing __init__.py
-        type nul >> "%PGBUILDPATH%\%VIRTUALENV%\Lib\site-packages\backports\__init__.py"
-    )
-    
     IF %PYTHON_MAJOR% == 3 (
         ECHO Fixing PyCrypto module for Python 3...
         CALL "%PYTHON_HOME%\python" "%WD%\pkg\win32\replace.py" "-i" "%PGBUILDPATH%\%VIRTUALENV%\Lib\site-packages\Crypto\Random\OSRNG\nt.py" "-o" "%PGBUILDPATH%\%VIRTUALENV%\Lib\site-packages\Crypto\Random\OSRNG\nt.py.new" "-s" "import winrandom" -r "from . import winrandom"
Index: requirements.txt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- requirements.txt	(revision a000dc6f60cc4bcf527ecab264ca9261e5c8172f)
+++ requirements.txt	(date 1545392222000)
@@ -44,7 +44,6 @@
 ###############################################################
 # Modules specifically required for Python2.7 or lesser version
 ###############################################################
-backports.csv==1.0.5;           python_version <= '2.7'
 importlib==1.0.3;               python_version <= '2.7'
 
 ###############################################################
Index: docs/en_US/preferences.rst
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- docs/en_US/preferences.rst	(revision a000dc6f60cc4bcf527ecab264ca9261e5c8172f)
+++ docs/en_US/preferences.rst	(date 1545392477000)
@@ -146,6 +146,7 @@
 * Use the *CSV field separator* drop-down listbox to specify the separator character that will be used in CSV output.
 * Use the *CSV quote character* drop-down listbox to specify the quote character that will be used in CSV output.
 * Use the *CSV quoting* drop-down listbox to select the fields that will be quoted in the CSV output; select *Strings*, *All*, or *None*.
+* Use the *Replace null values with* option to replace null values with specified string in the output file. Default is set to 'NULL'.
 
 .. image:: images/preferences_sql_display.png
     :alt: Preferences dialog sqleditor display options
Index: web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py	(revision a000dc6f60cc4bcf527ecab264ca9261e5c8172f)
+++ web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py	(date 1545392477000)
@@ -198,6 +198,16 @@
         }
     )
 
+    self.replace_nulls_with = self.preference.register(
+        'CSV_output', 'csv_replace_nulls_with',
+        gettext("Replace null values with"), 'text', 'NULL',
+        category_label=gettext('CSV output'),
+        help_str=gettext('Specifies the string that represents a null value '
+                         'while downloading query results as CSV. You can '
+                         'specify any arbitrary string to represent a '
+                         'null value, with quotes if desired.')
+    )
+
     self.results_grid_quoting = self.preference.register(
         'Results_grid', 'results_grid_quoting',
         gettext("Result copy quoting"), 'options', 'strings',
Index: web/pgadmin/tools/sqleditor/__init__.py
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- web/pgadmin/tools/sqleditor/__init__.py	(revision a000dc6f60cc4bcf527ecab264ca9261e5c8172f)
+++ web/pgadmin/tools/sqleditor/__init__.py	(date 1545392222000)
@@ -1434,7 +1434,8 @@
                     gen(
                         quote=blueprint.csv_quoting.get(),
                         quote_char=blueprint.csv_quote_char.get(),
-                        field_separator=blueprint.csv_field_separator.get()
+                        field_separator=blueprint.csv_field_separator.get(),
+                        replace_nulls_with=blueprint.replace_nulls_with.get()
                     ),
                     mimetype='text/csv'
                 )
diff --git docs/en_US/images/preferences_sql_csv_output.png docs/en_US/images/preferences_sql_csv_output.png
index 48dee9c62a87640af5085cefad9dbd400912c867..ee3475d57ce9865cfe1552f3ebe09fac96767519
GIT binary patch
literal 71521
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



view thread (20+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: [pgAdmin4][Patch] - RM 3780 pgAdmin4 lacks ability to specify NULL values in CSV export
  In-Reply-To: <CA+OCxowKR--3-Ar4HPU-22h12WJTGKQ+UEVdkxBcvNpbmK9cxQ@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox