From 889e66eb4923210aa95ba848fb030023ffde1800 Mon Sep 17 00:00:00 2001 From: Sergey Vilgelm Date: Wed, 8 Jul 2015 14:42:47 +0300 Subject: [PATCH] Switch to the oslo_utils.fileutils fileutils is graduated in the oslo.utils library. Remove the openstack.common package as well. Implements: blueprint graduate-fileutils[1] [1] https://blueprints.launchpad.net/oslo-incubator/+spec/graduate-fileutils Depends-On: I51ba9076e1fbc16145ee2311f47b7768c16dcb20 (requirements) Depends-On: I661dd222da6386a7dbcf854958a63e59b13e9ba4 (oslo.utils) Change-Id: I6ba8f492a257096d27cbe83bfd06e53b7aabfa5d --- .coveragerc | 2 +- ceilometer/hacking/checks.py | 4 - ceilometer/openstack/__init__.py | 0 ceilometer/openstack/common/__init__.py | 0 ceilometer/openstack/common/_i18n.py | 45 ------ ceilometer/openstack/common/fileutils.py | 149 ------------------- ceilometer/tests/agent/agentbase.py | 2 +- ceilometer/tests/meter/test_notifications.py | 2 +- ceilometer/tests/test_bin.py | 2 +- ceilometer/tests/test_hacking.py | 3 - ceilometer/tests/test_notification.py | 2 +- openstack-common.conf | 7 - requirements.txt | 2 +- tools/lintstack.py | 4 +- tox.ini | 2 +- 15 files changed, 8 insertions(+), 218 deletions(-) delete mode 100644 ceilometer/openstack/__init__.py delete mode 100644 ceilometer/openstack/common/__init__.py delete mode 100644 ceilometer/openstack/common/_i18n.py delete mode 100644 ceilometer/openstack/common/fileutils.py delete mode 100644 openstack-common.conf diff --git a/.coveragerc b/.coveragerc index 964f6679..780f06f5 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,7 +1,7 @@ [run] branch = True source = ceilometer -omit = ceilometer/tests/*, ceilometer/openstack/common/* +omit = ceilometer/tests/* [report] ignore-errors = True diff --git a/ceilometer/hacking/checks.py b/ceilometer/hacking/checks.py index d09bc9b9..d04058a3 100644 --- a/ceilometer/hacking/checks.py +++ b/ceilometer/hacking/checks.py @@ -36,10 +36,6 @@ oslo_namespace_imports = re.compile( def check_oslo_namespace_imports(logical_line, physical_line, filename): - # ignore openstack.common since they are not maintained by us - if 'ceilometer/openstack/common/' in filename: - return - if re.match(oslo_namespace_imports, logical_line): msg = ("C300: '%s' must be used instead of '%s'." % ( logical_line.replace('oslo.', 'oslo_'), diff --git a/ceilometer/openstack/__init__.py b/ceilometer/openstack/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ceilometer/openstack/common/__init__.py b/ceilometer/openstack/common/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ceilometer/openstack/common/_i18n.py b/ceilometer/openstack/common/_i18n.py deleted file mode 100644 index 09b1152b..00000000 --- a/ceilometer/openstack/common/_i18n.py +++ /dev/null @@ -1,45 +0,0 @@ -# Licensed 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. - -"""oslo.i18n integration module. - -See http://docs.openstack.org/developer/oslo.i18n/usage.html - -""" - -try: - import oslo_i18n - - # NOTE(dhellmann): This reference to o-s-l-o will be replaced by the - # application name when this module is synced into the separate - # repository. It is OK to have more than one translation function - # using the same domain, since there will still only be one message - # catalog. - _translators = oslo_i18n.TranslatorFactory(domain='ceilometer') - - # The primary translation function using the well-known name "_" - _ = _translators.primary - - # Translators for log levels. - # - # The abbreviated names are meant to reflect the usual use of a short - # name like '_'. The "L" is for "log" and the other letter comes from - # the level. - _LI = _translators.log_info - _LW = _translators.log_warning - _LE = _translators.log_error - _LC = _translators.log_critical -except ImportError: - # NOTE(dims): Support for cases where a project wants to use - # code from oslo-incubator, but is not ready to be internationalized - # (like tempest) - _ = _LI = _LW = _LE = _LC = lambda x: x diff --git a/ceilometer/openstack/common/fileutils.py b/ceilometer/openstack/common/fileutils.py deleted file mode 100644 index 9097c35d..00000000 --- a/ceilometer/openstack/common/fileutils.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright 2011 OpenStack Foundation. -# All Rights Reserved. -# -# Licensed 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. - -import contextlib -import errno -import logging -import os -import stat -import tempfile - -from oslo_utils import excutils - -LOG = logging.getLogger(__name__) - -_FILE_CACHE = {} -DEFAULT_MODE = stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO - - -def ensure_tree(path, mode=DEFAULT_MODE): - """Create a directory (and any ancestor directories required) - - :param path: Directory to create - :param mode: Directory creation permissions - """ - try: - os.makedirs(path, mode) - except OSError as exc: - if exc.errno == errno.EEXIST: - if not os.path.isdir(path): - raise - else: - raise - - -def read_cached_file(filename, force_reload=False): - """Read from a file if it has been modified. - - :param force_reload: Whether to reload the file. - :returns: A tuple with a boolean specifying if the data is fresh - or not. - """ - global _FILE_CACHE - - if force_reload: - delete_cached_file(filename) - - reloaded = False - mtime = os.path.getmtime(filename) - cache_info = _FILE_CACHE.setdefault(filename, {}) - - if not cache_info or mtime > cache_info.get('mtime', 0): - LOG.debug("Reloading cached file %s" % filename) - with open(filename) as fap: - cache_info['data'] = fap.read() - cache_info['mtime'] = mtime - reloaded = True - return (reloaded, cache_info['data']) - - -def delete_cached_file(filename): - """Delete cached file if present. - - :param filename: filename to delete - """ - global _FILE_CACHE - - if filename in _FILE_CACHE: - del _FILE_CACHE[filename] - - -def delete_if_exists(path, remove=os.unlink): - """Delete a file, but ignore file not found error. - - :param path: File to delete - :param remove: Optional function to remove passed path - """ - - try: - remove(path) - except OSError as e: - if e.errno != errno.ENOENT: - raise - - -@contextlib.contextmanager -def remove_path_on_error(path, remove=delete_if_exists): - """Protect code that wants to operate on PATH atomically. - Any exception will cause PATH to be removed. - - :param path: File to work with - :param remove: Optional function to remove passed path - """ - - try: - yield - except Exception: - with excutils.save_and_reraise_exception(): - remove(path) - - -def file_open(*args, **kwargs): - """Open file - - see built-in open() documentation for more details - - Note: The reason this is kept in a separate module is to easily - be able to provide a stub module that doesn't alter system - state at all (for unit tests) - """ - return open(*args, **kwargs) - - -def write_to_tempfile(content, path=None, suffix='', prefix='tmp'): - """Create temporary file or use existing file. - - This util is needed for creating temporary file with - specified content, suffix and prefix. If path is not None, - it will be used for writing content. If the path doesn't - exist it'll be created. - - :param content: content for temporary file. - :param path: same as parameter 'dir' for mkstemp - :param suffix: same as parameter 'suffix' for mkstemp - :param prefix: same as parameter 'prefix' for mkstemp - - For example: it can be used in database tests for creating - configuration files. - """ - if path: - ensure_tree(path) - - (fd, path) = tempfile.mkstemp(suffix=suffix, dir=path, prefix=prefix) - try: - os.write(fd, content) - finally: - os.close(fd) - return path diff --git a/ceilometer/tests/agent/agentbase.py b/ceilometer/tests/agent/agentbase.py index 26a92a65..f8840ecb 100644 --- a/ceilometer/tests/agent/agentbase.py +++ b/ceilometer/tests/agent/agentbase.py @@ -30,6 +30,7 @@ import eventlet import mock from oslo_config import fixture as fixture_config from oslo_service import service as os_service +from oslo_utils import fileutils from oslo_utils import timeutils from oslotest import mockpatch import six @@ -37,7 +38,6 @@ from stevedore import extension import yaml from ceilometer.agent import plugin_base -from ceilometer.openstack.common import fileutils from ceilometer import pipeline from ceilometer import publisher from ceilometer.publisher import test as test_publisher diff --git a/ceilometer/tests/meter/test_notifications.py b/ceilometer/tests/meter/test_notifications.py index a4f516e3..bffef641 100644 --- a/ceilometer/tests/meter/test_notifications.py +++ b/ceilometer/tests/meter/test_notifications.py @@ -17,9 +17,9 @@ import six import yaml from oslo_config import fixture as fixture_config +from oslo_utils import fileutils from ceilometer.meter import notifications -from ceilometer.openstack.common import fileutils from ceilometer.tests import base as test NOTIFICATION = { diff --git a/ceilometer/tests/test_bin.py b/ceilometer/tests/test_bin.py index 6cf1de06..817c0e52 100644 --- a/ceilometer/tests/test_bin.py +++ b/ceilometer/tests/test_bin.py @@ -22,9 +22,9 @@ import subprocess import time import httplib2 +from oslo_utils import fileutils import six -from ceilometer.openstack.common import fileutils from ceilometer.tests import base diff --git a/ceilometer/tests/test_hacking.py b/ceilometer/tests/test_hacking.py index dea08ca3..f009e68f 100644 --- a/ceilometer/tests/test_hacking.py +++ b/ceilometer/tests/test_hacking.py @@ -85,6 +85,3 @@ class HackingTestCase(testcase.TestCase): for code in codes: self._assert_has_errors(code, checks.check_oslo_namespace_imports, expected_errors=[(1, 0, "C300")]) - self._assert_has_errors( - code, checks.check_oslo_namespace_imports, - filename="ceilometer/openstack/common/xyz.py") diff --git a/ceilometer/tests/test_notification.py b/ceilometer/tests/test_notification.py index 3337d6ba..be3f4325 100644 --- a/ceilometer/tests/test_notification.py +++ b/ceilometer/tests/test_notification.py @@ -23,6 +23,7 @@ from oslo_context import context import oslo_messaging import oslo_messaging.conffixture import oslo_service.service +from oslo_utils import fileutils from oslo_utils import timeutils import six from stevedore import extension @@ -31,7 +32,6 @@ import yaml from ceilometer.compute.notifications import instance from ceilometer import messaging from ceilometer import notification -from ceilometer.openstack.common import fileutils from ceilometer.publisher import test as test_publisher from ceilometer.tests import base as tests_base diff --git a/openstack-common.conf b/openstack-common.conf deleted file mode 100644 index 56b4a26e..00000000 --- a/openstack-common.conf +++ /dev/null @@ -1,7 +0,0 @@ -[DEFAULT] - -# The list of modules to copy from oslo-incubator -module=fileutils - -# The base module to hold the copy of openstack.common -base=ceilometer diff --git a/requirements.txt b/requirements.txt index 14bf2ab7..087341c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,7 +27,7 @@ pecan>=0.8.0 oslo.messaging>=1.16.0 # Apache-2.0 oslo.middleware!=2.0.0,>=1.2.0 # Apache-2.0 oslo.serialization>=1.4.0 # Apache-2.0 -oslo.utils>=1.6.0 # Apache-2.0 +oslo.utils>=1.9.0 # Apache-2.0 pysnmp<5.0.0,>=4.2.1 python-ceilometerclient>=1.0.13 python-glanceclient>=0.18.0 diff --git a/tools/lintstack.py b/tools/lintstack.py index ddea7993..9ac6b439 100755 --- a/tools/lintstack.py +++ b/tools/lintstack.py @@ -29,9 +29,7 @@ from six.moves import cStringIO as StringIO # noqa # These variables will be useful if we will need to skip some pylint checks ignore_codes = [] ignore_messages = [] -# We ignore all errors in openstack.common because it should be checked -# elsewhere. -ignore_modules = ["ceilometer/openstack/common/"] +ignore_modules = [] KNOWN_PYLINT_EXCEPTIONS_FILE = "tools/pylint_exceptions" diff --git a/tox.ini b/tox.ini index d6b0c169..5a603879 100644 --- a/tox.ini +++ b/tox.ini @@ -150,7 +150,7 @@ commands = bash -x {toxinidir}/setup-test-env-elastic.sh oslo_debug_helper {posa [flake8] ignore = -exclude=.venv,.git,.tox,dist,doc,./ceilometer/openstack/common,*lib/python*,*egg,build +exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build show-source = True [hacking]