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
This commit is contained in:
Sergey Vilgelm 2015-07-08 14:42:47 +03:00
parent ef7623e2ac
commit 889e66eb49
15 changed files with 8 additions and 218 deletions

View File

@ -1,7 +1,7 @@
[run]
branch = True
source = ceilometer
omit = ceilometer/tests/*, ceilometer/openstack/common/*
omit = ceilometer/tests/*
[report]
ignore-errors = True

View File

@ -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_'),

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 = {

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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]