58f8fd6d96
Old style classes has been deprecated and should not be used anymore https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes Change-Id: I8f85f5a63af7c6500d6efcde5efe8a1fd1456ff0 Closes-Bug: #1378021
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
# Copyright (c) 2014 Mirantis, 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 re
|
|
|
|
from sahara.utils import general
|
|
|
|
|
|
class VersionFactory(object):
|
|
versions = None
|
|
modules = None
|
|
initialized = False
|
|
|
|
@staticmethod
|
|
def get_instance():
|
|
if not VersionFactory.initialized:
|
|
src_dir = os.path.join(os.path.dirname(__file__), '')
|
|
versions = (
|
|
[name[1:].replace('_', '.')
|
|
for name in os.listdir(src_dir)
|
|
if (os.path.isdir(os.path.join(src_dir, name))
|
|
and re.match(r'^v\d+_\d+_\d+$', name))])
|
|
versions.sort(key=general.natural_sort_key)
|
|
VersionFactory.versions = versions
|
|
|
|
VersionFactory.modules = {}
|
|
for version in VersionFactory.versions:
|
|
module_name = 'sahara.plugins.vanilla.v%s.versionhandler' % (
|
|
version.replace('.', '_'))
|
|
module_class = getattr(
|
|
__import__(module_name, fromlist=['sahara']),
|
|
'VersionHandler')
|
|
module = module_class()
|
|
key = version.replace('_', '.')
|
|
VersionFactory.modules[key] = module
|
|
|
|
VersionFactory.initialized = True
|
|
|
|
return VersionFactory()
|
|
|
|
def get_versions(self):
|
|
return VersionFactory.versions
|
|
|
|
def get_version_handler(self, version):
|
|
return VersionFactory.modules[version]
|