Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test():
"""
Execute your automated tests
"""
require_existing_project()
sys.path.append(path('src/main/python'))
suite = TestSuite()
test_dirs = SETTINGS['test_dirs']
for test_dir in map(path, test_dirs):
sys.path.append(test_dir)
try:
dir_names = listdir(test_dir)
except FileNotFoundError:
continue
for dir_name in dir_names:
dir_path = join(test_dir, dir_name)
if isfile(join(dir_path, '__init__.py')):
suite.addTest(defaultTestLoader.discover(
dir_name, top_level_dir=test_dir
))
has_tests = bool(list(suite))
def repo():
"""
Generate files for automatic updates
"""
require_existing_project()
app_name = SETTINGS['app_name']
pkg_name = app_name.lower()
try:
gpg_key = SETTINGS['gpg_key']
except KeyError:
raise FbsError(
'GPG key for code signing is not configured. You might want to '
'either\n'
' 1) run `fbs gengpgkey` or\n'
' 2) set "gpg_key" and "gpg_pass" in src/build/settings/.'
)
if is_ubuntu():
from fbs.repo.ubuntu import create_repo_ubuntu
if not SETTINGS['description']:
_LOG.info(
'Hint: Your app\'s "description" is empty. Consider setting it '
def freeze(debug=False):
"""
Compile your code to a standalone executable
"""
require_existing_project()
if not _has_module('PyInstaller'):
raise FbsError(
"Could not find PyInstaller. Maybe you need to:\n"
" pip install PyInstaller==3.4"
)
# Import respective functions late to avoid circular import
# fbs <-> fbs.freeze.X.
app_name = SETTINGS['app_name']
if is_mac():
from fbs.freeze.mac import freeze_mac
freeze_mac(debug=debug)
executable = 'target/%s.app/Contents/MacOS/%s' % (app_name, app_name)
else:
executable = join('target', app_name, app_name)
if is_windows():
from fbs.freeze.windows import freeze_windows
def release():
"""
Bump version and run clean,freeze,...,upload
"""
require_existing_project()
version = SETTINGS['version']
next_version = _get_next_version(version)
release_version = prompt_for_value('Release version', default=next_version)
activate_profile('release')
SETTINGS['version'] = release_version
log_level = _LOG.level
if log_level == logging.NOTSET:
_LOG.setLevel(logging.WARNING)
try:
clean()
freeze()
if is_windows() and _has_windows_codesigning_certificate():
sign()
installer()
if (is_windows() and _has_windows_codesigning_certificate()) or \
is_arch_linux() or is_fedora():
def run():
"""
Run your app from source
"""
require_existing_project()
if not _has_module('PyQt5') and not _has_module('PySide2'):
raise FbsError(
"Couldn't find PyQt5 or PySide2. Maybe you need to:\n"
" pip install PyQt5==5.9.2 or\n"
" pip install PySide2==5.12.2"
)
env = dict(os.environ)
pythonpath = path('src/main/python')
old_pythonpath = env.get('PYTHONPATH', '')
if old_pythonpath:
pythonpath += os.pathsep + old_pythonpath
env['PYTHONPATH'] = pythonpath
subprocess.run([sys.executable, path(SETTINGS['main_module'])], env=env)
def upload():
"""
Upload installer and repository to fbs.sh
"""
require_existing_project()
try:
username = SETTINGS['fbs_user']
password = SETTINGS['fbs_pass']
except KeyError as e:
raise FbsError(
'Could not find setting "%s". You may want to invoke one of the '
'following:\n'
' * fbs register\n'
' * fbs login'
% (e.args[0],)
) from None
_upload_repo(username, password)
app_name = SETTINGS['app_name']
url = lambda p: 'https://fbs.sh/%s/%s/%s' % (username, app_name, p)
message = 'Done! '
pkg_name = app_name.lower()
def gengpgkey():
"""
Generate a GPG key for Linux code signing
"""
require_existing_project()
if exists(_DEST_DIR):
raise FbsError('The %s folder already exists. Aborting.' % _DEST_DIR)
try:
email = prompt_for_value('Email address')
name = prompt_for_value('Real name', default=SETTINGS['author'])
passphrase = prompt_for_value('Key password', password=True)
except KeyboardInterrupt:
print('')
return
print('')
_LOG.info('Generating the GPG key. This can take a little...')
_init_docker()
args = ['run', '-t']
if exists('/dev/urandom'):
# Give the key generator more entropy on Posix:
args.extend(['-v', '/dev/urandom:/dev/random'])