def reloadBundles(self, namespace): if 'Bundles' in self.namespaces[namespace]: installedBundles = filter(lambda theme: theme.hasNamespace(namespace), self.getAllBundles()) bundlePaths = glob(os.path.join(self.namespaces[namespace]['Bundles'], '*.tmbundle')) for bundle in installedBundles: bundlePath = bundle.path(namespace) if bundlePath in bundlePaths: if namespace == bundle.currentNamespace and bundle.sourceChanged(namespace): self.logger.debug("Bundle %s changed, reload from %s." % (bundle.name, bundlePath)) bundle.reloadBundle(bundle, bundlePath, namespace, self) bundle.updateMtime(namespace) self.modifyBundle(bundle) bundlePaths.remove(bundlePath) else: bundleItems = self.findBundleItems(bundle = bundle) map(lambda item: item.removeSource(namespace), bundleItems) bundle.removeSource(namespace) if not bundle.hasSources(): self.logger.debug("Bundle %s removed." % bundle.name) map(lambda item: self.removeManagedObject(item), bundleItems) map(lambda item: self.removeBundleItem(item), bundleItems) self.removeManagedObject(bundle) self.removeBundle(bundle) else: map(lambda item: item.setDirty(), bundleItems) bundle.support = None bundle.setDirty() for path in bundlePaths: self.logger.debug("New bundle %s." % path) PMXBundle.loadBundle(path, namespace, self)
def createBundle(self, name, namespace = None): """ Crea un bundle nuevo lo agrega en los bundles y lo retorna, Precondiciones: Tenes por lo menos dos espacios de nombre el base o proteguido y uno donde generar los nuevos bundles El nombre tipo Title. El nombre no este entre los nombres ya cargados. Toma el ultimo espacio de nombres creado como espacio de nombre por defecto para el bundle nuevo. """ namespace = namespace or self.defaultNamespace basePath = self.basePath("Bundles", namespace) path = ensurePath(os.path.join(basePath, "%s.tmbundle"), self.convertToValidPath(name)) bundle = PMXBundle(self.uuidgen(), { 'name': name }) bundle.setManager(self) bundle.addSource(namespace, path) bundle = self.addBundle(bundle) self.addManagedObject(bundle) return bundle
def loadBundles(self, namespace): loadedBundles = set() if 'Bundles' in self.namespaces[namespace]: paths = glob(os.path.join(self.namespaces[namespace]['Bundles'], '*.tmbundle')) for path in paths: bundle = PMXBundle.loadBundle(path, namespace, self) if bundle is not None: loadedBundles.add(bundle) return loadedBundles