Doa-doa's picture
Upload folder using huggingface_hub
72268ee
# Copyright (c) 2008-2011 by Enthought, Inc.
# Copyright (c) 2013 Continuum Analytics, Inc.
# All rights reserved.
import os
import sys
import shutil
from os.path import basename, join
from plistlib import Plist, writePlist
from utils import rm_rf
class Menu(object):
def __init__(self, unused_name, prefix, env_name, mode=None):
self.prefix = prefix
self.env_name = env_name
def create(self):
pass
def remove(self):
pass
class ShortCut(object):
def __init__(self, menu, shortcut):
self.shortcut = shortcut
self.prefix = menu.prefix
self.name = shortcut['name']
self.path = '/Applications/%s.app' % self.name
self.shortcut = shortcut
def remove(self):
rm_rf(self.path)
def create(self):
Application(self.path, self.shortcut, self.prefix).create()
class Application(object):
"""
Class for creating an application folder on OSX. The application may
be standalone executable, but more likely a Python script which is
interpreted by the framework Python interpreter.
"""
def __init__(self, app_path, shortcut, prefix, env_name, env_setup_cmd):
"""
Required:
---------
shortcut is a dictionary defining a shortcut per the AppInst standard.
"""
# Store the required values out of the shortcut definition.
self.app_path = app_path
self.prefix = prefix
self.name = shortcut['name']
self.cmd = shortcut['cmd']
self.icns = shortcut['icns']
self.env_name = env_name
self.env_setup_cmd = env_setup_cmd
for a, b in [
('${BIN_DIR}', join(prefix, 'bin')),
('${MENU_DIR}', join(prefix, 'Menu')),
]:
self.cmd = self.cmd.replace(a, b)
self.icns = self.icns.replace(a, b)
# Calculate some derived values just once.
self.contents_dir = join(self.app_path, 'Contents')
self.resources_dir = join(self.contents_dir, 'Resources')
self.macos_dir = join(self.contents_dir, 'MacOS')
self.executable = self.name
self.executable_path = join(self.macos_dir, self.executable)
def create(self):
self._create_dirs()
self._write_pkginfo()
shutil.copy(self.icns, self.resources_dir)
self._writePlistInfo()
self._write_script()
def _create_dirs(self):
rm_rf(self.app_path)
os.makedirs(self.resources_dir)
os.makedirs(self.macos_dir)
def _write_pkginfo(self):
fo = open(join(self.contents_dir, 'PkgInfo'), 'w')
fo.write(('APPL%s????' % self.name.replace(' ', ''))[:8])
fo.close()
def _writePlistInfo(self):
"""
Writes the Info.plist file in the Contests directory.
"""
pl = Plist(
CFBundleExecutable=self.executable,
CFBundleGetInfoString='%s-1.0.0' % self.name,
CFBundleIconFile=basename(self.icns),
CFBundleIdentifier='com.%s' % self.name,
CFBundlePackageType='APPL',
CFBundleVersion='1.0.0',
CFBundleShortVersionString='1.0.0',
)
writePlist(pl, join(self.contents_dir, 'Info.plist'))
def _write_script(self):
fo = open(self.executable_path, 'w')
fo.write( """\
#!/bin/bash
%s/python.app/Contents/MacOS/python %s
""" % (self.prefix, self.cmd))
fo.close()
os.chmod(self.executable_path, 0o755)
if __name__ == '__main__':
sc = {
"name": "Launcher",
"cmd": "${BIN_DIR}/launcher",
"icns": "${MENU_DIR}/launcher.icns",
}
ShortCut(None, sc).remove()