def __setitem__(self, key, item): """Set a new item in the container.""" if not isinstance(item, BaseContent): raise ValueError("Content object is required") if item.__uri__ == self.__uri__: raise ValueError("Can't set to it self") parents = [p.__uri__ for p in load_parents(self)] if item.__uri__ in parents: raise TypeError("Can't itself to chidlren") if key in self.keys(): raise KeyError(key) if item.__parent_uri__ is None: event = ptah.events.ContentAddedEvent(item) else: event = ptah.events.ContentMovedEvent(item) item.__name__ = key item.__parent__ = self item.__parent_uri__ = self.__uri__ item.__path__ = '%s%s/'%(self.__path__, key) if item not in Session: Session.add(item) # temporary keys if not self._v_items: self._v_items = {key: item} else: self._v_items[key] = item if key not in self._v_keys: self._v_keys.append(key) # recursevly update children paths def update_path(container): path = container.__path__ for item in container.values(): item.__path__ = '%s%s/'%(path, item.__name__) if isinstance(item, BaseContainer): update_path(item) if isinstance(item, BaseContainer): update_path(item) get_current_registry().notify(event)
def __setitem__(self, key, item): """Set a new item in the container.""" if not isinstance(item, BaseContent): raise ValueError("Content object is required") if item.__uri__ == self.__uri__: raise ValueError("Can't set to it self") parents = [p.__uri__ for p in load_parents(self)] if item.__uri__ in parents: raise TypeError("Can't itself to chidlren") if key in self.keys(): raise KeyError(key) if item.__parent_uri__ is None: event = ptah.events.ContentAddedEvent(item) else: event = ptah.events.ContentMovedEvent(item) item.__name__ = key item.__parent__ = self item.__parent_uri__ = self.__uri__ item.__path__ = '%s%s/' % (self.__path__, key) if item not in Session: Session.add(item) # temporary keys if not self._v_items: self._v_items = {key: item} else: self._v_items[key] = item if key not in self._v_keys: self._v_keys.append(key) # recursevly update children paths def update_path(container): path = container.__path__ for item in container.values(): item.__path__ = '%s%s/' % (path, item.__name__) if isinstance(item, BaseContainer): update_path(item) if isinstance(item, BaseContainer): update_path(item) get_current_registry().notify(event)
def __call__(self, request=None): root = self._sql_get_root.first(name=self.name, type=self.type.__uri__) if root is None: root = self.type.create(title=self.title) root.__name_id__ = self.name root.__path__ = '/%s/' % root.__uri__ Session.add(root) Session.flush() root.__root_path__ = self.path root.__parent__ = policy = self.policy(request) root.__default_root__ = self.default_root if request is not None: set_policy(policy) request.root = root if self.parent_factory: policy.__parent__ = self.parent_factory() return root
def __call__(self, request=None): root = self._sql_get_root.first(name=self.name, type=self.type.__uri__) if root is None: root = self.type.create(title=self.title) root.__name_id__ = self.name root.__path__ = '/%s/'%root.__uri__ Session.add(root) Session.flush() root.__root_path__ = self.path root.__parent__ = policy = self.policy(request) root.__default_root__ = self.default_root if request is not None: set_policy(policy) request.root = root if self.parent_factory: policy.__parent__ = self.parent_factory() return root
def create(self, parent=None): blob = Blob(__parent__=parent) Session.add(blob) Session.flush() return blob