34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
class Dependency(object):
|
|
required_attr_names = ['dependency_name', 'dependency_url', 'dependency_required']
|
|
|
|
# https://stackoverflow.com/a/49024227
|
|
def __init_subclass__(cls):
|
|
for attr_name in cls.required_attr_names:
|
|
if not attr_name in cls.__dict__:
|
|
raise NotImplementedError(
|
|
"Attribute '{}' has not been overridden in class '{}'" \
|
|
.format(attr_name, cls.__name__)
|
|
)
|
|
|
|
|
|
@classmethod
|
|
def fails_dependency_check(cls):
|
|
from ..util.color import Color
|
|
from ..util.process import Process
|
|
|
|
if Process.exists(cls.dependency_name):
|
|
return False
|
|
|
|
if cls.dependency_required:
|
|
Color.pl('{!} {R}error: required app {O}%s{R} was not found' % cls.dependency_name)
|
|
Color.pl(' {W}install @ {C}%s{W}' % cls.dependency_url)
|
|
return True
|
|
|
|
else:
|
|
Color.pl('{!} {O}warning: recommended app {R}%s{O} was not found' % cls.dependency_name)
|
|
Color.pl(' {W}install @ {C}%s{W}' % cls.dependency_url)
|
|
return False
|