We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Use of KerberosClient with webhdfs
Currently webhdfs uses InsecureClient by default. However, the hdfs package also has an KerberosClient which can be used to do authenticated requests. 

Our hdfs system uses Kerberos and I would like it if KerberosClient is added as an option. 

The KerberosClient does not need any additional settings (as far as I can test). And thus only an additional parameter is needed: `use_kerberos_client`. 

Are you willing to accept a pull request for this? 

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `luigi/contrib/hdfs/webhdfs_client.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 #
3 # Copyright 2015 VNG Corporation
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #
17 
18 """
19 A luigi file system client that wraps around the hdfs-library (a webhdfs
20 client)
21 
22 This is a sensible fast alternative to snakebite. In particular for python3
23 users, where snakebite is not supported at the time of writing (dec 2015).
24 
25 Note. This wrapper client is not feature complete yet. As with most software
26 the authors only implement the features they need.  If you need to wrap more of
27 the file system operations, please do and contribute back.
28 """
29 
30 
31 from luigi.contrib.hdfs import config as hdfs_config
32 from luigi.contrib.hdfs import abstract_client as hdfs_abstract_client
33 import luigi.contrib.target
34 import logging
35 import os
36 import warnings
37 
38 logger = logging.getLogger('luigi-interface')
39 
40 
41 class webhdfs(luigi.Config):
42     port = luigi.IntParameter(default=50070,
43                               description='Port for webhdfs')
44     user = luigi.Parameter(default='', description='Defaults to $USER envvar',
45                            config_path=dict(section='hdfs', name='user'))
46 
47 
48 class WebHdfsClient(hdfs_abstract_client.HdfsFileSystem):
49     """
50     A webhdfs that tries to confirm to luigis interface for file existence.
51 
52     The library is using `this api
53     <https://hdfscli.readthedocs.io/en/latest/api.html>`__.
54     """
55 
56     def __init__(self, host=None, port=None, user=None):
57         self.host = host or hdfs_config.hdfs().namenode_host
58         self.port = port or webhdfs().port
59         self.user = user or webhdfs().user or os.environ['USER']
60 
61     @property
62     def url(self):
63         # the hdfs package allows it to specify multiple namenodes by passing a string containing
64         # multiple namenodes separated by ';'
65         hosts = self.host.split(";")
66         urls = ['http://' + host + ':' + str(self.port) for host in hosts]
67         return ";".join(urls)
68 
69     @property
70     def client(self):
71         # A naive benchmark showed that 1000 existence checks took 2.5 secs
72         # when not recreating the client, and 4.0 secs when recreating it. So
73         # not urgent to memoize it. Note that it *might* be issues with process
74         # forking and whatnot (as the one in the snakebite client) if we
75         # memoize it too trivially.
76         import hdfs
77         return hdfs.InsecureClient(url=self.url, user=self.user)
78 
79     def walk(self, path, depth=1):
80         return self.client.walk(path, depth=depth)
81 
82     def exists(self, path):
83         """
84         Returns true if the path exists and false otherwise.
85         """
86         import hdfs
87         try:
88             self.client.status(path)
89             return True
90         except hdfs.util.HdfsError as e:
91             if str(e).startswith('File does not exist: '):
92                 return False
93             else:
94                 raise e
95 
96     def upload(self, hdfs_path, local_path, overwrite=False):
97         return self.client.upload(hdfs_path, local_path, overwrite=overwrite)
98 
99     def download(self, hdfs_path, local_path, overwrite=False, n_threads=-1):
100         return self.client.download(hdfs_path, local_path, overwrite=overwrite,
101                                     n_threads=n_threads)
102 
103     def remove(self, hdfs_path, recursive=True, skip_trash=False):
104         assert skip_trash  # Yes, you need to explicitly say skip_trash=True
105         return self.client.delete(hdfs_path, recursive=recursive)
106 
107     def read(self, hdfs_path, offset=0, length=None, buffer_size=None,
108              chunk_size=1024, buffer_char=None):
109         return self.client.read(hdfs_path, offset=offset, length=length,
110                                 buffer_size=buffer_size, chunk_size=chunk_size,
111                                 buffer_char=buffer_char)
112 
113     def move(self, path, dest):
114         parts = dest.rstrip('/').split('/')
115         if len(parts) > 1:
116             dir_path = '/'.join(parts[0:-1])
117             if not self.exists(dir_path):
118                 self.mkdir(dir_path, parents=True)
119         self.client.rename(path, dest)
120 
121     def mkdir(self, path, parents=True, mode=0o755, raise_if_exists=False):
122         """
123         Has no returnvalue (just like WebHDFS)
124         """
125         if not parents or raise_if_exists:
126             warnings.warn('webhdfs mkdir: parents/raise_if_exists not implemented')
127         permission = int(oct(mode)[2:])  # Convert from int(decimal) to int(octal)
128         self.client.makedirs(path, permission=permission)
129 
130     def chmod(self, path, permissions, recursive=False):
131         """
132         Raise a NotImplementedError exception.
133         """
134         raise NotImplementedError("Webhdfs in luigi doesn't implement chmod")
135 
136     def chown(self, path, owner, group, recursive=False):
137         """
138         Raise a NotImplementedError exception.
139         """
140         raise NotImplementedError("Webhdfs in luigi doesn't implement chown")
141 
142     def count(self, path):
143         """
144         Raise a NotImplementedError exception.
145         """
146         raise NotImplementedError("Webhdfs in luigi doesn't implement count")
147 
148     def copy(self, path, destination):
149         """
150         Raise a NotImplementedError exception.
151         """
152         raise NotImplementedError("Webhdfs in luigi doesn't implement copy")
153 
154     def put(self, local_path, destination):
155         """
156         Restricted version of upload
157         """
158         self.upload(local_path, destination)
159 
160     def get(self, path, local_destination):
161         """
162         Restricted version of download
163         """
164         self.download(path, local_destination)
165 
166     def listdir(self, path, ignore_directories=False, ignore_files=False,
167                 include_size=False, include_type=False, include_time=False,
168                 recursive=False):
169         assert not recursive
170         return self.client.list(path, status=False)
171 
172     def touchz(self, path):
173         """
174         To touchz using the web hdfs "write" cmd.
175         """
176         self.client.write(path, data='', overwrite=False)
177
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/luigi/contrib/hdfs/webhdfs_client.py b/luigi/contrib/hdfs/webhdfs_client.py
--- a/luigi/contrib/hdfs/webhdfs_client.py
+++ b/luigi/contrib/hdfs/webhdfs_client.py
@@ -43,6 +43,8 @@
                               description='Port for webhdfs')
     user = luigi.Parameter(default='', description='Defaults to $USER envvar',
                            config_path=dict(section='hdfs', name='user'))
+    client_type = luigi.ChoiceParameter(var_type=str, choices=['insecure', 'kerberos'],
+                                        default='insecure', description='Type of hdfs client to use.')
 
 
 class WebHdfsClient(hdfs_abstract_client.HdfsFileSystem):
@@ -53,10 +55,11 @@
     <https://hdfscli.readthedocs.io/en/latest/api.html>`__.
     """
 
-    def __init__(self, host=None, port=None, user=None):
+    def __init__(self, host=None, port=None, user=None, client_type=None):
         self.host = host or hdfs_config.hdfs().namenode_host
         self.port = port or webhdfs().port
         self.user = user or webhdfs().user or os.environ['USER']
+        self.client_type = client_type or webhdfs().client_type
 
     @property
     def url(self):
@@ -73,8 +76,12 @@
         # not urgent to memoize it. Note that it *might* be issues with process
         # forking and whatnot (as the one in the snakebite client) if we
         # memoize it too trivially.
-        import hdfs
-        return hdfs.InsecureClient(url=self.url, user=self.user)
+        if self.client_type == 'kerberos':
+            from hdfs.ext.kerberos import KerberosClient
+            return KerberosClient(url=self.url)
+        else:
+            import hdfs
+            return hdfs.InsecureClient(url=self.url, user=self.user)
 
     def walk(self, path, depth=1):
         return self.client.walk(path, depth=depth)

{"golden_diff": "diff --git a/luigi/contrib/hdfs/webhdfs_client.py b/luigi/contrib/hdfs/webhdfs_client.py\n--- a/luigi/contrib/hdfs/webhdfs_client.py\n+++ b/luigi/contrib/hdfs/webhdfs_client.py\n@@ -43,6 +43,8 @@\n                               description='Port for webhdfs')\n     user = luigi.Parameter(default='', description='Defaults to $USER envvar',\n                            config_path=dict(section='hdfs', name='user'))\n+    client_type = luigi.ChoiceParameter(var_type=str, choices=['insecure', 'kerberos'],\n+                                        default='insecure', description='Type of hdfs client to use.')\n \n \n class WebHdfsClient(hdfs_abstract_client.HdfsFileSystem):\n@@ -53,10 +55,11 @@\n     <https://hdfscli.readthedocs.io/en/latest/api.html>`__.\n     \"\"\"\n \n-    def __init__(self, host=None, port=None, user=None):\n+    def __init__(self, host=None, port=None, user=None, client_type=None):\n         self.host = host or hdfs_config.hdfs().namenode_host\n         self.port = port or webhdfs().port\n         self.user = user or webhdfs().user or os.environ['USER']\n+        self.client_type = client_type or webhdfs().client_type\n \n     @property\n     def url(self):\n@@ -73,8 +76,12 @@\n         # not urgent to memoize it. Note that it *might* be issues with process\n         # forking and whatnot (as the one in the snakebite client) if we\n         # memoize it too trivially.\n-        import hdfs\n-        return hdfs.InsecureClient(url=self.url, user=self.user)\n+        if self.client_type == 'kerberos':\n+            from hdfs.ext.kerberos import KerberosClient\n+            return KerberosClient(url=self.url)\n+        else:\n+            import hdfs\n+            return hdfs.InsecureClient(url=self.url, user=self.user)\n \n     def walk(self, path, depth=1):\n         return self.client.walk(path, depth=depth)\n", "issue": "Use of KerberosClient with webhdfs\nCurrently webhdfs uses InsecureClient by default. However, the hdfs package also has an KerberosClient which can be used to do authenticated requests. \r\n\r\nOur hdfs system uses Kerberos and I would like it if KerberosClient is added as an option. \r\n\r\nThe KerberosClient does not need any additional settings (as far as I can test). And thus only an additional parameter is needed: `use_kerberos_client`. \r\n\r\nAre you willing to accept a pull request for this? \n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n#\n# Copyright 2015 VNG Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n\"\"\"\nA luigi file system client that wraps around the hdfs-library (a webhdfs\nclient)\n\nThis is a sensible fast alternative to snakebite. In particular for python3\nusers, where snakebite is not supported at the time of writing (dec 2015).\n\nNote. This wrapper client is not feature complete yet. As with most software\nthe authors only implement the features they need.  If you need to wrap more of\nthe file system operations, please do and contribute back.\n\"\"\"\n\n\nfrom luigi.contrib.hdfs import config as hdfs_config\nfrom luigi.contrib.hdfs import abstract_client as hdfs_abstract_client\nimport luigi.contrib.target\nimport logging\nimport os\nimport warnings\n\nlogger = logging.getLogger('luigi-interface')\n\n\nclass webhdfs(luigi.Config):\n    port = luigi.IntParameter(default=50070,\n                              description='Port for webhdfs')\n    user = luigi.Parameter(default='', description='Defaults to $USER envvar',\n                           config_path=dict(section='hdfs', name='user'))\n\n\nclass WebHdfsClient(hdfs_abstract_client.HdfsFileSystem):\n    \"\"\"\n    A webhdfs that tries to confirm to luigis interface for file existence.\n\n    The library is using `this api\n    <https://hdfscli.readthedocs.io/en/latest/api.html>`__.\n    \"\"\"\n\n    def __init__(self, host=None, port=None, user=None):\n        self.host = host or hdfs_config.hdfs().namenode_host\n        self.port = port or webhdfs().port\n        self.user = user or webhdfs().user or os.environ['USER']\n\n    @property\n    def url(self):\n        # the hdfs package allows it to specify multiple namenodes by passing a string containing\n        # multiple namenodes separated by ';'\n        hosts = self.host.split(\";\")\n        urls = ['http://' + host + ':' + str(self.port) for host in hosts]\n        return \";\".join(urls)\n\n    @property\n    def client(self):\n        # A naive benchmark showed that 1000 existence checks took 2.5 secs\n        # when not recreating the client, and 4.0 secs when recreating it. So\n        # not urgent to memoize it. Note that it *might* be issues with process\n        # forking and whatnot (as the one in the snakebite client) if we\n        # memoize it too trivially.\n        import hdfs\n        return hdfs.InsecureClient(url=self.url, user=self.user)\n\n    def walk(self, path, depth=1):\n        return self.client.walk(path, depth=depth)\n\n    def exists(self, path):\n        \"\"\"\n        Returns true if the path exists and false otherwise.\n        \"\"\"\n        import hdfs\n        try:\n            self.client.status(path)\n            return True\n        except hdfs.util.HdfsError as e:\n            if str(e).startswith('File does not exist: '):\n                return False\n            else:\n                raise e\n\n    def upload(self, hdfs_path, local_path, overwrite=False):\n        return self.client.upload(hdfs_path, local_path, overwrite=overwrite)\n\n    def download(self, hdfs_path, local_path, overwrite=False, n_threads=-1):\n        return self.client.download(hdfs_path, local_path, overwrite=overwrite,\n                                    n_threads=n_threads)\n\n    def remove(self, hdfs_path, recursive=True, skip_trash=False):\n        assert skip_trash  # Yes, you need to explicitly say skip_trash=True\n        return self.client.delete(hdfs_path, recursive=recursive)\n\n    def read(self, hdfs_path, offset=0, length=None, buffer_size=None,\n             chunk_size=1024, buffer_char=None):\n        return self.client.read(hdfs_path, offset=offset, length=length,\n                                buffer_size=buffer_size, chunk_size=chunk_size,\n                                buffer_char=buffer_char)\n\n    def move(self, path, dest):\n        parts = dest.rstrip('/').split('/')\n        if len(parts) > 1:\n            dir_path = '/'.join(parts[0:-1])\n            if not self.exists(dir_path):\n                self.mkdir(dir_path, parents=True)\n        self.client.rename(path, dest)\n\n    def mkdir(self, path, parents=True, mode=0o755, raise_if_exists=False):\n        \"\"\"\n        Has no returnvalue (just like WebHDFS)\n        \"\"\"\n        if not parents or raise_if_exists:\n            warnings.warn('webhdfs mkdir: parents/raise_if_exists not implemented')\n        permission = int(oct(mode)[2:])  # Convert from int(decimal) to int(octal)\n        self.client.makedirs(path, permission=permission)\n\n    def chmod(self, path, permissions, recursive=False):\n        \"\"\"\n        Raise a NotImplementedError exception.\n        \"\"\"\n        raise NotImplementedError(\"Webhdfs in luigi doesn't implement chmod\")\n\n    def chown(self, path, owner, group, recursive=False):\n        \"\"\"\n        Raise a NotImplementedError exception.\n        \"\"\"\n        raise NotImplementedError(\"Webhdfs in luigi doesn't implement chown\")\n\n    def count(self, path):\n        \"\"\"\n        Raise a NotImplementedError exception.\n        \"\"\"\n        raise NotImplementedError(\"Webhdfs in luigi doesn't implement count\")\n\n    def copy(self, path, destination):\n        \"\"\"\n        Raise a NotImplementedError exception.\n        \"\"\"\n        raise NotImplementedError(\"Webhdfs in luigi doesn't implement copy\")\n\n    def put(self, local_path, destination):\n        \"\"\"\n        Restricted version of upload\n        \"\"\"\n        self.upload(local_path, destination)\n\n    def get(self, path, local_destination):\n        \"\"\"\n        Restricted version of download\n        \"\"\"\n        self.download(path, local_destination)\n\n    def listdir(self, path, ignore_directories=False, ignore_files=False,\n                include_size=False, include_type=False, include_time=False,\n                recursive=False):\n        assert not recursive\n        return self.client.list(path, status=False)\n\n    def touchz(self, path):\n        \"\"\"\n        To touchz using the web hdfs \"write\" cmd.\n        \"\"\"\n        self.client.write(path, data='', overwrite=False)\n", "path": "luigi/contrib/hdfs/webhdfs_client.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n#\n# Copyright 2015 VNG Corporation\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n\"\"\"\nA luigi file system client that wraps around the hdfs-library (a webhdfs\nclient)\n\nThis is a sensible fast alternative to snakebite. In particular for python3\nusers, where snakebite is not supported at the time of writing (dec 2015).\n\nNote. This wrapper client is not feature complete yet. As with most software\nthe authors only implement the features they need.  If you need to wrap more of\nthe file system operations, please do and contribute back.\n\"\"\"\n\n\nfrom luigi.contrib.hdfs import config as hdfs_config\nfrom luigi.contrib.hdfs import abstract_client as hdfs_abstract_client\nimport luigi.contrib.target\nimport logging\nimport os\nimport warnings\n\nlogger = logging.getLogger('luigi-interface')\n\n\nclass webhdfs(luigi.Config):\n    port = luigi.IntParameter(default=50070,\n                              description='Port for webhdfs')\n    user = luigi.Parameter(default='', description='Defaults to $USER envvar',\n                           config_path=dict(section='hdfs', name='user'))\n    client_type = luigi.ChoiceParameter(var_type=str, choices=['insecure', 'kerberos'],\n                                        default='insecure', description='Type of hdfs client to use.')\n\n\nclass WebHdfsClient(hdfs_abstract_client.HdfsFileSystem):\n    \"\"\"\n    A webhdfs that tries to confirm to luigis interface for file existence.\n\n    The library is using `this api\n    <https://hdfscli.readthedocs.io/en/latest/api.html>`__.\n    \"\"\"\n\n    def __init__(self, host=None, port=None, user=None, client_type=None):\n        self.host = host or hdfs_config.hdfs().namenode_host\n        self.port = port or webhdfs().port\n        self.user = user or webhdfs().user or os.environ['USER']\n        self.client_type = client_type or webhdfs().client_type\n\n    @property\n    def url(self):\n        # the hdfs package allows it to specify multiple namenodes by passing a string containing\n        # multiple namenodes separated by ';'\n        hosts = self.host.split(\";\")\n        urls = ['http://' + host + ':' + str(self.port) for host in hosts]\n        return \";\".join(urls)\n\n    @property\n    def client(self):\n        # A naive benchmark showed that 1000 existence checks took 2.5 secs\n        # when not recreating the client, and 4.0 secs when recreating it. So\n        # not urgent to memoize it. Note that it *might* be issues with process\n        # forking and whatnot (as the one in the snakebite client) if we\n        # memoize it too trivially.\n        if self.client_type == 'kerberos':\n            from hdfs.ext.kerberos import KerberosClient\n            return KerberosClient(url=self.url)\n        else:\n            import hdfs\n            return hdfs.InsecureClient(url=self.url, user=self.user)\n\n    def walk(self, path, depth=1):\n        return self.client.walk(path, depth=depth)\n\n    def exists(self, path):\n        \"\"\"\n        Returns true if the path exists and false otherwise.\n        \"\"\"\n        import hdfs\n        try:\n            self.client.status(path)\n            return True\n        except hdfs.util.HdfsError as e:\n            if str(e).startswith('File does not exist: '):\n                return False\n            else:\n                raise e\n\n    def upload(self, hdfs_path, local_path, overwrite=False):\n        return self.client.upload(hdfs_path, local_path, overwrite=overwrite)\n\n    def download(self, hdfs_path, local_path, overwrite=False, n_threads=-1):\n        return self.client.download(hdfs_path, local_path, overwrite=overwrite,\n                                    n_threads=n_threads)\n\n    def remove(self, hdfs_path, recursive=True, skip_trash=False):\n        assert skip_trash  # Yes, you need to explicitly say skip_trash=True\n        return self.client.delete(hdfs_path, recursive=recursive)\n\n    def read(self, hdfs_path, offset=0, length=None, buffer_size=None,\n             chunk_size=1024, buffer_char=None):\n        return self.client.read(hdfs_path, offset=offset, length=length,\n                                buffer_size=buffer_size, chunk_size=chunk_size,\n                                buffer_char=buffer_char)\n\n    def move(self, path, dest):\n        parts = dest.rstrip('/').split('/')\n        if len(parts) > 1:\n            dir_path = '/'.join(parts[0:-1])\n            if not self.exists(dir_path):\n                self.mkdir(dir_path, parents=True)\n        self.client.rename(path, dest)\n\n    def mkdir(self, path, parents=True, mode=0o755, raise_if_exists=False):\n        \"\"\"\n        Has no returnvalue (just like WebHDFS)\n        \"\"\"\n        if not parents or raise_if_exists:\n            warnings.warn('webhdfs mkdir: parents/raise_if_exists not implemented')\n        permission = int(oct(mode)[2:])  # Convert from int(decimal) to int(octal)\n        self.client.makedirs(path, permission=permission)\n\n    def chmod(self, path, permissions, recursive=False):\n        \"\"\"\n        Raise a NotImplementedError exception.\n        \"\"\"\n        raise NotImplementedError(\"Webhdfs in luigi doesn't implement chmod\")\n\n    def chown(self, path, owner, group, recursive=False):\n        \"\"\"\n        Raise a NotImplementedError exception.\n        \"\"\"\n        raise NotImplementedError(\"Webhdfs in luigi doesn't implement chown\")\n\n    def count(self, path):\n        \"\"\"\n        Raise a NotImplementedError exception.\n        \"\"\"\n        raise NotImplementedError(\"Webhdfs in luigi doesn't implement count\")\n\n    def copy(self, path, destination):\n        \"\"\"\n        Raise a NotImplementedError exception.\n        \"\"\"\n        raise NotImplementedError(\"Webhdfs in luigi doesn't implement copy\")\n\n    def put(self, local_path, destination):\n        \"\"\"\n        Restricted version of upload\n        \"\"\"\n        self.upload(local_path, destination)\n\n    def get(self, path, local_destination):\n        \"\"\"\n        Restricted version of download\n        \"\"\"\n        self.download(path, local_destination)\n\n    def listdir(self, path, ignore_directories=False, ignore_files=False,\n                include_size=False, include_type=False, include_time=False,\n                recursive=False):\n        assert not recursive\n        return self.client.list(path, status=False)\n\n    def touchz(self, path):\n        \"\"\"\n        To touchz using the web hdfs \"write\" cmd.\n        \"\"\"\n        self.client.write(path, data='', overwrite=False)\n", "path": "luigi/contrib/hdfs/webhdfs_client.py"}]}