def _clean_old_kv(self, path): ''' Removes widgets and rules already processed to this file :param path: file path - the same that in app_widgets ''' for key in dict(self.app_widgets): wd = self.app_widgets[key] if path != wd.kv_path: continue wdg = get_app_widget(wd) if wdg is None: continue if wd.is_dynamic: del self.app_widgets[key] rules = Builder.match(wdg) # Cleaning widget rules for _rule in rules: for _tuple in Builder.rules[:]: if _tuple[1] == _rule: Builder.rules.remove(_tuple) if wd.is_dynamic: Factory.unregister(wd.name.split('@')[0]) # Cleaning class rules for rule in Builder.rules[:]: if rule[1].name == '<' + wd.name + '>': Builder.rules.remove(rule) break
def _clean_old_kv(self, path): ''' Removes widgets and rules already processed to this file :param path: file path - the same that in app_widgets ''' for key in dict(self.app_widgets): wd = self.app_widgets[key] if path != wd.kv_path: continue wdg = get_app_widget(wd) if wdg is None: p = get_designer().ui_creator.playground if p.root_name == wd.name: wdg = p._last_root if not wdg: continue if wd.is_dynamic: del self.app_widgets[key] rules = Builder.match(wdg) # Cleaning widget rules for _rule in rules: for _tuple in Builder.rules[:]: if _tuple[1] == _rule: Builder.rules.remove(_tuple) if wd.is_dynamic: Factory.unregister(wd.name.split('@')[0]) # Cleaning class rules for rule in Builder.rules[:]: if rule[1].name == '<' + wd.name + '>': Builder.rules.remove(rule) break
def cleanup(self, stop_watcher=True): '''To cleanup everything loaded by previous project. ''' if stop_watcher: self.proj_watcher.stop() # Remove all class rules and root rules of previous project rules = [] try: rules = Builder.match(self.root_rule.widget) for _rule in rules: for _tuple in Builder.rules[:]: if _tuple[1] == _rule: Builder.rules.remove(_tuple) except: pass for _tuple in Builder.rules[:]: for _rule in self.class_rules: if "<" + _rule.name + ">" == _tuple[1].name: Builder.rules.remove(_tuple) if self.root_rule and not self._is_root_already_in_factory and\ hasattr(Factory, self.root_rule.name): Factory.unregister(self.root_rule.name) self._app_file = None self._app_class = None self._app_module = None self._app = None # Remove previous project directories for _dir in self._dir_list: try: sys.path.remove(_dir) except: pass self.kv_file_list = [] self.file_list = [] self._dir_list = [] self.class_rules = [] self.list_comments = [] self.custom_widgets = [] self.dict_file_type_and_path = {} self.root_rule = None self._root_rule = None
def reload_from_str(self, root_str): '''To reload from root_str ''' rules = [] # Cleaning root rules try: rules = Builder.match(self.root_rule.widget) for _rule in rules: for _tuple in Builder.rules[:]: if _tuple[1] == _rule: Builder.rules.remove(_tuple) except: pass # Cleaning class rules for _rule in self.class_rules: for rule in Builder.rules[:]: if rule[1].name == '<' + _rule.name + '>': Builder.rules.remove(rule) break root_widget = None # Remove all the 'app' lines root_str = re.sub(r'.+app+.+', '', root_str) root_widget = Builder.load_string(root_str) if not root_widget: root_widget = self.get_widget_of_class(self.root_rule.name) self.root_rule.widget = root_widget if not root_widget: root_name = root_str[:root_str.find('\n')] root_name = root_widget.replace(':', '').replace('<', '') root_name = root_widget.replace('>', '') root_widget = self.set_root_widget(root_name) return root_widget