Files
impala/tests/util/filesystem_base.py
Joe McDonnell 0c7c6a335e IMPALA-11977: Fix Python 3 broken imports and object model differences
Python 3 changed some object model methods:
 - __nonzero__ was removed in favor of __bool__
 - func_dict / func_name were removed in favor of __dict__ / __name__
 - The next() function was deprecated in favor of __next__
   (Code locations should use next(iter) rather than iter.next())
 - metaclasses are specified a different way
 - Locations that specify __eq__ should also specify __hash__

Python 3 also moved some packages around (urllib2, Queue, httplib,
etc), and this adapts the code to use the new locations (usually
handled on Python 2 via future). This also fixes the code to
avoid referencing exception variables outside the exception block
and variables outside of a comprehension. Several of these seem
like false positives, but it is better to avoid the warning.

This fixes these pylint warnings:
bad-python3-import
eq-without-hash
metaclass-assignment
next-method-called
nonzero-method
exception-escape
comprehension-escape

Testing:
 - Ran core tests
 - Ran release exhaustive tests

Change-Id: I988ae6c139142678b0d40f1f4170b892eabf25ee
Reviewed-on: http://gerrit.cloudera.org:8080/19592
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2023-03-09 17:17:57 +00:00

81 lines
2.8 KiB
Python

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Filsystem access abstraction
from __future__ import absolute_import, division, print_function
from abc import ABCMeta, abstractmethod
from future.utils import with_metaclass
class BaseFilesystem(with_metaclass(ABCMeta, object)):
@abstractmethod
def create_file(self, path, file_data, overwrite):
"""Create a file in 'path' and populate with the string 'file_data'. If overwrite is
True, the file is overwritten. Returns True if successful, False if the file already
exists and throws an exception otherwise"""
pass
@abstractmethod
def make_dir(self, path, permission):
"""Create a directory in 'path' with octal umask 'permission'.
Returns True if successful and throws an exception otherwise"""
pass
@abstractmethod
def copy(self, src, dst, overwrite):
"""Copy a file from 'src' to 'dst'. Throws an exception if unsuccessful."""
pass
@abstractmethod
def copy_from_local(self, src, dst):
"""Copies a file from 'src' file on the local filesystem to the 'dst', which can be
on any HDFS compatible filesystem. Fails if the src file is not on the local
filesystem. Throws an exception if unsuccessful."""
pass
@abstractmethod
def ls(self, path):
"""Return a list of all files/dirs/keys in path. Throws an exception if path
is invalid."""
pass
@abstractmethod
def exists(self, path):
"""Returns True if a particular path exists, else it returns False."""
pass
@abstractmethod
def delete_file_dir(self, path, recursive):
"""Delete all files/dirs/keys in a path. Returns True if successful or if the file
does not exist. Throws an exception otherwise."""
pass
@abstractmethod
def get_all_file_sizes(self, path):
"""Returns a list of integers which are all the file sizes of files found under
'path'."""
pass
@abstractmethod
def touch(self, paths):
"""Updates the access and modification times of the files specified by 'paths' to
the current time. If the files don't exist, zero length files will be created with
current time as the timestamp of them."""
pass