os-ken/ryu/hooks.py
Wei-Li Tang 1753c1e8d9 Fix Windows setup dependency bug
The hook raises an AttributeError exception on Windows because
of recent changes in the pbr project. This fix solves the issue.

This is adapted from https://review.openstack.org/#/c/42170/

Since ryu didn't depend on pyudev, I think it no longer needs
a removal here.

Signed-off-by: Wei-Li Tang <alextwl@xinguard.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2014-01-06 20:32:05 +09:00

73 lines
2.5 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2013 Hewlett-Packard Development Company, L.P.
# 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 os
import sys
from setuptools.command import easy_install
from ryu import version
# Global variables in this module doesn't work as we expect
# because, during the setup procedure, this module seems to be
# copied (as a file) and can be loaded multiple times.
# We save them into __main__ module instead.
def _main_module():
return sys.modules['__main__']
def save_orig():
"""Save original easy_install.get_script_args.
This is necessary because pbr's setup_hook is sometimes called
before ours."""
_main_module()._orig_get_script_args = easy_install.get_script_args
def setup_hook(config):
"""Filter config parsed from a setup.cfg to inject our defaults."""
metadata = config['metadata']
if sys.platform == 'win32':
requires = metadata.get('requires_dist', '').split('\n')
requires.append('pywin32')
requires.append('wmi')
metadata['requires_dist'] = "\n".join(requires)
config['metadata'] = metadata
metadata['version'] = str(version)
# pbr's setup_hook replaces easy_install.get_script_args with
# their own version, override_get_script_args, prefering simpler
# scripts which are not aware of multi-version.
# prevent that by doing the opposite. it's a horrible hack
# but we are in patching wars already...
from pbr import packaging
def my_get_script_args(*args, **kwargs):
return _main_module()._orig_get_script_args(*args, **kwargs)
packaging.override_get_script_args = my_get_script_args
easy_install.get_script_args = my_get_script_args
# another hack to allow setup from tarball.
orig_get_version = packaging.get_version
def my_get_version(package_name, pre_version=None):
if package_name == 'ryu':
return str(version)
return orig_get_version(package_name, pre_version)
packaging.get_version = my_get_version