#!/usr/bin/env python
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.

try:
    from setuptools import setup, find_packages
except ImportError:
    from distribute_setup import use_setuptools
    use_setuptools()
    from setuptools import setup, find_packages

VERSION = '0.1.0'

import os
def read(fname):
    return open(os.path.join(os.path.dirname(__file__), fname)).read().strip()

setup(name="Marvin",
    version=VERSION,
    description="Marvin - Python client for Apache CloudStack",
    author="Edison Su",
    author_email="Edison.Su@citrix.com",
    maintainer="Prasanna Santhanam",
    maintainer_email="Prasanna.Santhanam@citrix.com",
    long_description="Marvin is the Apache CloudStack python client written around the unittest framework",
    platforms=("Any",),
    url="https://builds.apache.org/view/CloudStack/job/cloudstack-marvin/",
    packages=["marvin", "marvin.cloudstackAPI", "marvin.integration",
              "marvin.integration.lib", "marvin.sandbox",
              "marvin.sandbox.advanced", "marvin.sandbox.basic"],
    license="LICENSE.txt",
    install_requires=[
        "mysql-connector-python",
        "paramiko",
        "nose"
    ],
    py_modules=['marvin.marvinPlugin'],
    zip_safe=False,
    entry_points={
        'nose.plugins': ['marvinPlugin = marvin.marvinPlugin:MarvinPlugin']
    },
)
