diff options
author | James Meyer <jams@linhes.org> | 2010-12-04 23:44:45 (GMT) |
---|---|---|
committer | James Meyer <jams@linhes.org> | 2010-12-04 23:44:51 (GMT) |
commit | f51fb708846d13222bd97b3f760eb3be902c0be0 (patch) | |
tree | ad25ff81828f12cb7da86384863e163cb4e001f2 /build_tools/larch7/larch0/gui/project.py | |
parent | 4384efe238cdfeac86fae0d8e1097a409350f8c6 (diff) | |
download | linhes_dev-f51fb708846d13222bd97b3f760eb3be902c0be0.zip |
remove old versions of larch 6 and 7
Diffstat (limited to 'build_tools/larch7/larch0/gui/project.py')
-rw-r--r-- | build_tools/larch7/larch0/gui/project.py | 428 |
1 files changed, 0 insertions, 428 deletions
diff --git a/build_tools/larch7/larch0/gui/project.py b/build_tools/larch7/larch0/gui/project.py deleted file mode 100644 index f01e578..0000000 --- a/build_tools/larch7/larch0/gui/project.py +++ /dev/null @@ -1,428 +0,0 @@ -# project.py - Project management -# -# (c) Copyright 2010 Michael Towers (larch42 at googlemail dot com) -# -# This file is part of the larch project. -# -# larch is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# larch is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with larch; if not, write to the Free Software Foundation, Inc., -# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# -#---------------------------------------------------------------------------- -# 2010.07.14 - -from config import * -import os, shutil, pwd -from glob import glob -from subprocess import call -from userinfo import Userinfo - -CONFIG_DIR = '.config/larch' # within the user's home directory -APP_CONF = 'app.conf' # within larch config directory -PROJECT_CONF = 'project.conf' # within project directory -PROJECT0 = 'larch-0' # default project -PROFILE0 = 'default' # default profile - -# Some default values for the project config file -DEFAULTS = { 'installation_dir' : '', - 'pacman_cache' : '/var/cache/pacman/pkg', - 'profile' : PROFILE0, - 'profile_browse_dir': '', # => use default - 'installrepo' : '', - 'medium_iso' : 'Yes', # 'Yes' | '' - 'medium_btldr' : 'syslinux', # 'grub' | 'syslinux' - 'medium_search' : 'search', # 'search' | 'uuid' | 'label' | 'device' - 'medium_label' : '', # => fetch default - 'isosavedir' : '', - 'isofile' : '', - 'bootisofile' : '', - 'bootisolabel' : '', - } - - -# Default values for the application config file -APP_DEFAULTS = { - 'project' : PROJECT0, - 'filebrowser' : 'xdg-open $', - } - - - -class ProjectManager: - def __init__(self): - add_exports( ( - ('getitem', self.getitem), - ('getbool', self.getbool), - ('setitem', self.setitem), - ('setbool', self.setbool), - ('get_projects', self.list_projects), - ('get_profiles', self.list_profiles), - ('get_installation_dir', self.get_ipath), - ('set_installation_dir', self.set_ipath), - ('testmedium', self.testmedium), - ('set_project', self.set_projectname), - ('get_project', self.get_projectname), - ('delete_project', self.delete_project), - ('delete_profile', self.delete_profile), - ('list_free_projects', self.list_free_projects), - ('list_free_profiles', self.list_free_profiles), - ('get_new_profile', self.get_new_profile), - ('rename_profile', self.rename_profile), - ('can_rename_profile', self.can_rename_profile), - ('save_profile', self.save_profile), - ('get_profile', self.get_profile), - ('set_profile', self.set_profile), - ('get_profile_bookmarks', self.get_profile_bookmarks), - ('get_mediumlabel', self.get_mediumlabel), - ('set_mediumlabel', self.set_mediumlabel), - ('getisosavedir', self.getisosavedir), - ('getisofile', self.getisofile), - ('getbootisofile', self.getbootisofile), - ('getbootisolabel', self.getbootisolabel), - ('newUserinfo', self.newUserinfo), - ('allusers', self.allusers), - ('getuserinfo', self.getuserinfo), - ('newuser', self.newuser), - ('userset', self.userset), - ('deluser', self.deluser), - ('listskels', self.listskels), - ('saveusers', self.saveusers)) - ) - - - def init(self): - self.projects_base = os.path.join(os.environ['HOME'], CONFIG_DIR) - self.profiles_dir = os.path.join(self.projects_base, 'myprofiles') - # Ensure the presence of the larch default project folder - dpf = '%s/p_%s' % (self.projects_base, PROJECT0) - if not os.path.isdir(dpf): - os.makedirs(dpf) - # Ensure the presence of the profiles folder and the 'default' profile - if not os.path.isdir(self.profiles_dir): - os.mkdir(self.profiles_dir) - self.default_profile_dir = os.path.join(self.profiles_dir, PROFILE0) - if not os.path.isdir(self.default_profile_dir): - call(['cp', '-a', base_dir + '/profiles/'+ PROFILE0, - self.profiles_dir]) - - # The application configs - self.aconfig_file = os.path.join(self.projects_base, APP_CONF) - self.aconfig = self.getconfig(self.aconfig_file) - - # The project-specific configs - self.set_projectname(self.appget('project')) - - - def get_projectname(self): - return (True, self.project_name) - - def set_projectname(self, name): - self.project_dir = os.path.join(self.projects_base, 'p_' + name) - plist = self.list_projects()[1] - if name not in plist: - os.mkdir(self.project_dir) - - self.pconfig_file = os.path.join(self.project_dir, PROJECT_CONF) - self.pconfig = self.getconfig(self.pconfig_file) - self.profile_name = self.get('profile') - - self.profile_path = os.path.join(self.profiles_dir, self.profile_name) - self.appset('project', name) - self.project_name = name - return (True, None) - - def delete_project(self, name): - # This should probably be run as root, in case the build directory - # is inside it ... cross that bridge when we come to it! - r = call(['rm', '-r', '--interactive=never', - os.path.join(self.projects_base, 'p_' + name)]) - return (True, r == 0) - - - def delete_profile(self, name): - r = call(['rm', '-r', '--interactive=never', - os.path.join(self.profiles_dir, name)]) - return (True, r == 0) - - - def get_profile(self): - return (True, self.profile_name) - - def set_profile(self, name): - self.set('profile', name) - self.profile_name = name - self.profile_path = os.path.join(self.profiles_dir, self.profile_name) - return (True, None) - - - def rename_profile(self, name): - os.rename(self.profile_path, os.path.join(self.profiles_dir, name)) - self.set_profile(name) - return (True, None) - - - def get_new_profile(self, src): - if not os.path.isfile(src + '/addedpacks'): - return (True, False) - pname = os.path.basename(src) - dst = os.path.join(self.profiles_dir, pname) - call(['rm', '-rf', dst]) - shutil.copytree(src, dst) - self.set_profile(pname) - return (True, True) - - - def get_profile_bookmarks(self): - return (True, ((self.projects_base + '/myprofiles', - _("Working Profiles")), - (base_dir + '/profiles', _("Examples")), - ('/', _("File-system")) - )) - - -# What about not allowing changes to the default profile? -# That would mean also no renaming? -# One would have to copy a profile into the project before going -# any further ... -# Is it right to share profiles between projects? (Probably) - -#+++++++++++++++++++++++++++++++++++++++++++++++ -### A very simple configuration file handler - def getconfig(self, filepath): - cfg = {} - if os.path.isfile(filepath): - fh = open(filepath) - for line in fh: - ls = line.split('=', 1) - if len(ls) > 1: - cfg[ls[0].strip()] = ls[1].strip() - return cfg - - - def saveconfig(self, filepath, config): - fh = open(filepath, 'w') - ci = config.items() - ci.sort() - for kv in ci: - fh.write('%s = %s\n' % kv) - fh.close() -### -#----------------------------------------------- - - def list_projects(self): - projects = [p[2:] for p in os.listdir(self.projects_base) - if p.startswith('p_')] - projects.sort() - return (True, projects) - - - def list_free_projects(self): - """This returns a list of projects which are free for (e.g.) deletion. - """ - plist = self.list_projects()[1] - plist.remove(PROJECT0) # this one is not 'free' - if self.project_name in plist: - plist.remove(self.project_name) - return (True, plist) - - - def list_profiles(self): - profiles = [d for d in os.listdir(self.profiles_dir) if - os.path.isfile(os.path.join(self.profiles_dir, d, 'addedpacks'))] - profiles.sort() - return (True, profiles) - - - def list_free_profiles(self): - """This returns a list of profiles which are not in use by any project. - """ - plist = self.list_profiles()[1] - plist.remove(PROFILE0) # this one is not 'free' - for project in self.list_projects()[1]: - cfg = self.getconfig(os.path.join(self.projects_base, - 'p_' + project, PROJECT_CONF)) - p = cfg.get('profile') - if p in plist: - plist.remove(p) - return (True, plist) - - - def can_rename_profile(self): - if self.profile_name == PROFILE0: - return (True, False) - for project in self.list_projects()[1]: - if project != self.project_name: - cfg = self.getconfig(os.path.join(self.projects_base, - 'p_' + project, PROJECT_CONF)) - if self.profile_name == cfg.get('profile'): - return (True, False) - return (True, True) - - - def save_profile(self, path, force): - #path = os.path.join(path, self.profile_name) - if os.path.exists(path): - if force: - call(['rm', '-rf', path]) - elif os.path.isfile(os.path.join(path, addedpacks)): - # This is an existing profile - return (True, False) - else: - # This location is otherwise in use - return (True, None) - shutil.copytree(self.profile_path, path) - return (True, True) - - - def appget(self, item): - """Read an entry in the application configuration. - """ - v = self.aconfig.get(item) - if v: - return v - elif APP_DEFAULTS.has_key(item): - return APP_DEFAULTS[item] - debug("Unknown application configuration option: %s" % item) - assert False - - def appset(self, item, value): - """Set an entry in the application configuration. - """ - self.aconfig[item] = value.strip() - self.saveconfig(self.aconfig_file, self.aconfig) - - - def getitem(self, item): - return (True, self.get(item)) - - def getbool(self, item): - return (True, bool(self.get(item))) - - def setitem(self, item, value): - self.set(item, value) - return (True, None) - - def setbool(self, item, on): - self.set(item, 'Yes' if on else '') - return (True, None) - - - def get(self, item): - """Read an entry in the project configuration. - """ - v = self.pconfig.get(item) - if v: - return v - elif DEFAULTS.has_key(item): - return DEFAULTS[item] - debug("Unknown configuration option: %s" % item) - assert False - - def set(self, item, value): - """Set an entry in the project configuration. - """ - self.pconfig[item] = value.strip() - self.saveconfig(self.pconfig_file, self.pconfig) -# return True - - - def get_ipath(self): - ip = self.get('installation_dir') - if not ip: - ip = self.set_ipath('')[1] - return (True, ip) - - def set_ipath(self, path): - path = path.strip() - if path: - path = '/' + path.strip('/') - else: - path = os.environ['HOME'] + '/larch_build' - self.set('installation_dir', path) - return (True, path) - - - def testmedium(self): - ipath = self.get_ipath()[1] - path = ipath + CHROOT_DIR_MEDIUM - bl = [] - nosave = False - ok = os.path.isfile(path + '/larch/system.sqf') - if ok: - if os.path.isfile(ipath + GRUBDIR + '/stage2_eltorito'): - bl.append('grub') - if os.path.isfile(ipath + SYSLINUXDIR + '/isolinux.bin'): - bl.append('syslinux') - if os.path.isfile(self.profile_path + '/nosave'): - nosave = True - return (True, (path, ok, bl, nosave)) - - - def newUserinfo(self): - self.userInfo = Userinfo(self.profile_path) - return (True, None) - - def allusers(self): - return (True, self.userInfo.allusers()) - - def getuserinfo(self, user, fields): - return (True, self.userInfo.userinfo(user, fields)) - - def newuser(self, user): - return (True, self.userInfo.newuser(user)) - - def saveusers(self): - return (True, self.userInfo.saveusers()) - - def userset(self, uname, field, text): - self.userInfo.userset(uname, field, text) - return (True, None) - - def deluser(self, user): - return (True, self.userInfo.deluser(user)) - - def listskels(self): - return (True, glob(self.profile_path + '/skel_*')) - - - def get_mediumlabel(self): - l = self.get('medium_label') - return (True, l if l else LABEL) - - def set_mediumlabel(self, l): - if len(l) > 16: - l = l[:16] - self.set('medium_label', l) - return self.get_mediumlabel() - - - def getisosavedir(self): - d = self.get('isosavedir') - return (True, d if d else os.environ['HOME']) - - def getisofile(self): - f = self.get('isofile') - return (True, f if f else ISOFILE) - - def getbootisofile(self): - f = self.get('bootisofile') - return (True, f if f else BOOTISO) - - def getbootisolabel(self): - l = self.get('bootisolabel') - return (True, l if l else ISOLABEL) - - - -import __builtin__ -__builtin__.project_manager = ProjectManager() |