22# This file is part of Viper - https://github.com/viper-framework/viper
33# See the file 'LICENSE' for copying permission.
44
5+ import sys
56import argparse
7+ from distutils .spawn import find_executable
8+ import pkg_resources
9+
10+ import logging
11+
612import viper .common .out as out
713from viper .core .config import console_output
814from viper .common .exceptions import ArgumentErrorCallback
915
16+ log = logging .getLogger ('viper' )
17+
1018
1119class ArgumentParser (argparse .ArgumentParser ):
1220 def print_usage (self ):
@@ -31,9 +39,64 @@ class Module(object):
3139 authors = []
3240 output = []
3341
42+ min_python_version = (2 , 7 )
43+ dependency_list_python = []
44+ dependency_list_system = []
45+
3446 def __init__ (self ):
3547 self .parser = ArgumentParser (prog = self .cmd , description = self .description )
3648
49+ def check (self ):
50+ min_python_version = self ._check_min_python_version ()
51+ dep_python = self ._check_dependencies_python ()
52+ dep_system = self ._check_dependencies_system ()
53+ if min_python_version and dep_python and dep_system :
54+ return True
55+ else :
56+ return False
57+
58+ def _check_min_python_version (self ):
59+ if sys .version_info >= self .min_python_version :
60+ log .debug ("{}: Python Version ok" .format (self .__class__ .__name__ ))
61+ return True
62+ else :
63+ log .warning ("{}: Python Version NOT ok" .format (self .__class__ .__name__ ))
64+ return False
65+
66+ def _check_dependencies_python (self ):
67+ if not self .dependency_list_python :
68+ return True
69+
70+ missing = []
71+
72+ for item in self .dependency_list_python :
73+ try :
74+ pkg_resources .require (item )
75+ except pkg_resources .DistributionNotFound as err :
76+ log .debug ("{}: Missing Python dependency: {}" .format (self .__class__ .__name__ , err ))
77+ missing .append (item )
78+ except pkg_resources .VersionConflict as err :
79+ log .debug ("{}: Python dependency wrong version: {}" .format (self .__class__ .__name__ , err ))
80+ missing .append (item )
81+
82+ if missing :
83+ log .warning ("{}: Missing/Failed Python dependencies: {}" .format (self .__class__ .__name__ , missing ))
84+ return False
85+
86+ return True
87+
88+ def _check_dependencies_system (self ):
89+ if not self .dependency_list_system :
90+ return True
91+
92+ missing = [item for item in self .dependency_list_system if not find_executable (item )]
93+
94+ if missing :
95+ log .warning ("{}: Missing System dependencies: {}" .format (self .__class__ .__name__ , missing ))
96+ return False
97+ else :
98+ return True
99+
37100 def set_commandline (self , command ):
38101 self .command_line = command
39102
0 commit comments