def __conf(self, name=None): # {{{ " Return builder-conf, and proc-conf or named pub-conf. " conf = self.alias.proc_config build = conf.parent() assert build, (name, conf, build) if name: conf = api.fetch_config(IPublishConfig, name, parent=build) #logger.info(pformat(build.settings.__dict__)) #logger.info(pformat(conf.settings.__dict__)) assert conf, (name, conf) return build, conf
def _new_or_update(self, user, name, schema=None, settings=None, **props): if not name and not props.get('title', None): raise KeyError, "Either a URI or Title parameter is required. " builder_config = props.get('builder_config', None) if builder_config: #parent = api.fetch_config(interface.IBuilderConfig, builder_config) builder_config = db.Key.from_path('BuilderConfiguration', builder_config) props.update(dict(parent=builder_config)) del props['builder_config'] conf = api.fetch_config(schema, name, parent=builder_config) if interface.IQuery.providedBy(conf): return conf if not conf: props.update(dict(owner=user)) kind = components.lookup1(schema, interface.IModel) #kind = components.queryAdapter(schema, interface.IModel) assert kind, (schema, name, kind) conf = api.new_config(name, kind, **props) if settings: # XXX: accept pickle without validation? conf.settings = loads(settings) name = conf.key().name() logging.info('New config prepared %s', name) else: assert isinstance(conf, components.lookup1(schema, interface.IModel)), \ "Found configuration %r but is of wrong type. " % \ conf.key().name() if not name: raise ValueError, "Config for title %r already exists, "\ "use name %r. " % (props['title'], conf.key().name()) logging.info('Updating existing config %s for %s', name, user.email) if settings: raise ValueError, \ "`setting` key not implemented for existing config. " data = dict([ (str(k),v) for k,v in getattr(self.request, self.request.method).items()]) #logger.info(data) data.update(props) self._update(user, conf, schema, **data) return conf