#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 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 subprocess
import sys
import os
from setuptools import setup, find_packages
from setuptools.command.install import install


class Install_osm_im(install):
    """Generation of .py files from yang models"""
    model_dir = "models/yang"
    im_dir = "osm_im"

    def pipinstall(self, package):
        """pip install for executable dependencies"""
        subprocess.call([sys.executable, "-m", "pip", "install", package])

    def run(self):
        self.pipinstall('pyang')
        self.pipinstall('pyangbind')
        import pyangbind
        print("Using dir {}/{} for python artifacts".format(os.getcwd(), self.im_dir))
        path = "{}/{}".format(os.getcwd(), self.im_dir)
        protoc_command = ["make", "models"]
        if subprocess.call(protoc_command) != 0:
            sys.exit(-1)
        # To ensure generated files are copied to the python installation folder
        self.copy_tree(self.im_dir, "{}{}".format(self.install_lib, self.im_dir))
        install.run(self)


setup(
    name='osm_im',
    description='OSM Information Model',
    long_description=open('README.rst').read(),
    version_command=('git describe --tags --long --dirty --match v*', 'pep440-git-full'),
    author='OSM Support',
    author_email='osmsupport@etsi.org',
    packages=find_packages(),
    include_package_data=True,
    setup_requires=['setuptools-version-command'],
    test_suite='nose.collector',
    url='https://osm.etsi.org/gitweb/?p=osm/IM.git;a=summary',
    license='Apache 2.0',
    cmdclass={'install': Install_osm_im},
)
