3b7e69c972
- Add PEP8 section to tox.ini - Add hacking to requirements to enforce OpenStack style requirements - Fix formatting issues flagged by flake8 check - Add copyright notices to all remaining files - Update .gitignore file Change-Id: I7e9a0203ddf2002c08ac96800fe30c1c46ebba88
97 lines
2.8 KiB
Python
97 lines
2.8 KiB
Python
# Copyright (c) 2014 Dark Secret Software Inc.
|
|
#
|
|
# 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 os
|
|
import os.path
|
|
import shutil
|
|
|
|
import simport
|
|
|
|
|
|
class MissingArgument(Exception):
|
|
pass
|
|
|
|
|
|
class ArchiveCallback(object):
|
|
def __init__(self, **kwargs):
|
|
pass
|
|
|
|
def on_open(self, filename):
|
|
"""Called when an Archive is opened."""
|
|
pass
|
|
|
|
def on_close(self, filename):
|
|
"""Called when an Archive is closed.
|
|
|
|
If you move/change the file/name return the
|
|
new location so subsequent callbacks will
|
|
have the right location.
|
|
"""
|
|
return filename
|
|
|
|
|
|
class CallbackList(ArchiveCallback):
|
|
def __init__(self, **kwargs):
|
|
super(CallbackList, self).__init__(**kwargs)
|
|
self.callbacks = []
|
|
self.config = kwargs
|
|
callback_str = self.config.get('callback_list', "")
|
|
callback_str_list = [x.strip() for x in callback_str.split(",")]
|
|
self.callbacks = [simport.load(c)(**self.config)
|
|
for c in callback_str_list]
|
|
|
|
# TODO(Sandy): Need some exception handling around these.
|
|
# The failure of one shouldn't stop processing.
|
|
|
|
def on_open(self, filename):
|
|
for c in self.callbacks:
|
|
c.on_open(filename)
|
|
|
|
def on_close(self, filename):
|
|
for c in self.callbacks:
|
|
filename = c.on_close(filename)
|
|
|
|
|
|
class ChangeExtensionCallback(ArchiveCallback):
|
|
"""filename.dat becomes filename.dat.done"""
|
|
|
|
def __init__(self, **kwargs):
|
|
super(ChangeExtensionCallback, self).__init__(**kwargs)
|
|
self.new_extension = kwargs.get('new_extension', '.done')
|
|
|
|
def on_close(self, filename):
|
|
new = "%s.%s" % (filename, self.new_extension)
|
|
os.rename(filename, new)
|
|
return new
|
|
|
|
|
|
class MoveFileCallback(ArchiveCallback):
|
|
def __init__(self, **kwargs):
|
|
super(MoveFileCallback, self).__init__(**kwargs)
|
|
self.destination_folder = kwargs.get('destination_folder', '.')
|
|
|
|
def on_close(self, filename):
|
|
"""Move this file to destination folder."""
|
|
shutil.move(filename, self.destination_folder)
|
|
path, fn = os.path.split(filename)
|
|
return os.path.join(self.destination_folder, fn)
|
|
|
|
|
|
class DeleteFileCallback(ArchiveCallback):
|
|
def on_close(self, filename):
|
|
"""Delete this file."""
|
|
os.remove(filename)
|
|
return None
|