def JoinList(lst, joiners='\n', pad=0, depth=1): if is_str_type(joiners): joiners = [joiners] str_ = '' if pad and is_str_type(lst): return lst.center(pad) if not lst or not isinstance(lst, list): return lst delimit = joiners[min(len(joiners), depth) - 1] for val in lst: if str_: str_ += delimit str_ += JoinList(val, joiners, pad, depth + 1) return str_
def __init__(self, name=None, parent=None, type=None, self_dict=None, parent_dict=None, default_name=None, default_parent=None, delimiter=None): type = type or 'key' parent_dict = parent_dict or self_dict is not None and self_dict._parent_ if parent_dict is not None: self._parent_dict_ = parent_dict if type == 'key': default_name = parent_dict.__class__.__name__ else: base_key = getattr(parent_dict, '_key_') default_name = base_key.name default_parent = base_key.parent base_key = getattr(parent_dict, '_%s_' % type.lower()) if name is None: name = base_key.name if parent is None: parent = base_key.parent elif parent is None: parent = base_key.full if delimiter is None: delimiter = base_key.delimiter all_args = locals() for attr in 'name|parent|delimiter|default_name|default_parent|type|self_dict'.split('|'): val = all_args[attr] if val is None: continue if (attr == 'name' or attr == 'parent') and not is_str_type(val): str_val = str(val) if type == 'label' and str_val.isdigit(): val = str_val else: raise TypeError("Cannot set %s %s from non string type <%s> %s" % (type.capitalize(), attr, val.__class__.__name__, str_val)) setattr(self, '_%s_' % (attr), val)
def parse_log_content(content, prefix='', **kwargs): if content is None: return '', prefix if not is_str_type(content): content = pf(content, pf_replace_newline=False, pf_encode_text=False) if not content: content = '{EMPTY STRING}' if content.startswith("!"): content = content[1:]; prefix = '\n' return content, prefix
def parse_log_content(content, prefix='', **kwargs): if content is None: return '', prefix if not is_str_type(content): content = pf(content, pf_replace_newline=False, pf_encode_text=False) if not content: content = '{EMPTY STRING}' if content.startswith("!"): content = content[1:] prefix = '\n' return content, prefix
def showInfo(message, title="Anknotes: Evernote Importer for Anki", textFormat=0, cancelButton=False, richText=False, minHeight=None, minWidth=400, styleSheet=None, convertNewLines=True): global imgEvernoteWebMsgBox, icoEvernoteArtcore, icoEvernoteWeb msgDefaultButton = QPushButton(icoEvernoteArtcore, "Okay!", mw) if not styleSheet: styleSheet = file(FILES.ANCILLARY.CSS_QMESSAGEBOX, 'r').read() if not is_str_type(message): message = str(message) if richText: textFormat = 1 message = '<style>\n%s</style>\n\n%s' % (styleSheet, message) global messageBox messageBox = QMessageBox() messageBox.addButton(msgDefaultButton, QMessageBox.AcceptRole) if cancelButton: msgCancelButton = QPushButton(icoTomato, "No Thanks", mw) messageBox.addButton(msgCancelButton, QMessageBox.RejectRole) messageBox.setDefaultButton(msgDefaultButton) messageBox.setIconPixmap(imgEvernoteWebMsgBox) messageBox.setTextFormat(textFormat) messageBox.setWindowIcon(icoEvernoteWeb) messageBox.setWindowIconText("Anknotes") messageBox.setText(message) messageBox.setWindowTitle(title) hSpacer = QSpacerItem(minWidth, 0, QSizePolicy.Minimum, QSizePolicy.Expanding) layout = messageBox.layout() """:type : QGridLayout """ layout.addItem(hSpacer, layout.rowCount() + 1, 0, 1, layout.columnCount()) ret = messageBox.exec_() if not cancelButton: return True if messageBox.clickedButton( ) == msgCancelButton or messageBox.clickedButton() == 0: return False return True
def _copy_keys_from_parent_(kw): def init(suffix=''): k0, k1 = keys[0] + suffix, keys[1] + suffix if k1 not in kw and k0 in kw and kw[k0]: kw[k1] = kw[k0] # Begin _copy_keys_from_parent_(): keys=['key', 'label'] for k0 in keys: if k0 in kw and is_str_type(kw[k0]): kw[k0+'_name'] = kw[k0] del kw[k0] init(), init('_name') for k in keys: kv, kn, kp = self._get_kwargs_(kw, k, '%s_name' % k, ['%s_parent' % k, 'parent_%s' % k]) self._my_attrs_ += '|_%s_' % k kv = kv or DictKey(kn, kp, k, self, self._parent_) setattr(self, '_%s_' % k, kv)
def __init__(self, name=None, parent=None, type=None, self_dict=None, parent_dict=None, default_name=None, default_parent=None, delimiter=None): type = type or 'key' parent_dict = parent_dict or self_dict is not None and self_dict._parent_ if parent_dict is not None: self._parent_dict_ = parent_dict if type == 'key': default_name = parent_dict.__class__.__name__ else: base_key = getattr(parent_dict, '_key_') default_name = base_key.name default_parent = base_key.parent base_key = getattr(parent_dict, '_%s_' % type.lower()) if name is None: name = base_key.name if parent is None: parent = base_key.parent elif parent is None: parent = base_key.full if delimiter is None: delimiter = base_key.delimiter all_args = locals() for attr in 'name|parent|delimiter|default_name|default_parent|type|self_dict'.split( '|'): val = all_args[attr] if val is None: continue if (attr == 'name' or attr == 'parent') and not is_str_type(val): str_val = str(val) if type == 'label' and str_val.isdigit(): val = str_val else: raise TypeError( "Cannot set %s %s from non string type <%s> %s" % (type.capitalize(), attr, val.__class__.__name__, str_val)) setattr(self, '_%s_' % (attr), val)
def _copy_keys_from_parent_(kw): def init(suffix=''): k0, k1 = keys[0] + suffix, keys[1] + suffix if k1 not in kw and k0 in kw and kw[k0]: kw[k1] = kw[k0] # Begin _copy_keys_from_parent_(): keys = ['key', 'label'] for k0 in keys: if k0 in kw and is_str_type(kw[k0]): kw[k0 + '_name'] = kw[k0] del kw[k0] init(), init('_name') for k in keys: kv, kn, kp = self._get_kwargs_( kw, k, '%s_name' % k, ['%s_parent' % k, 'parent_%s' % k]) self._my_attrs_ += '|_%s_' % k kv = kv or DictKey(kn, kp, k, self, self._parent_) setattr(self, '_%s_' % k, kv)
def showInfo(message, title="Anknotes: Evernote Importer for Anki", textFormat=0, cancelButton=False, richText=False, minHeight=None, minWidth=400, styleSheet=None, convertNewLines=True): global imgEvernoteWebMsgBox, icoEvernoteArtcore, icoEvernoteWeb msgDefaultButton = QPushButton(icoEvernoteArtcore, "Okay!", mw) if not styleSheet: styleSheet = file(FILES.ANCILLARY.CSS_QMESSAGEBOX, 'r').read() if not is_str_type(message): message = str(message) if richText: textFormat = 1 message = '<style>\n%s</style>\n\n%s' % (styleSheet, message) global messageBox messageBox = QMessageBox() messageBox.addButton(msgDefaultButton, QMessageBox.AcceptRole) if cancelButton: msgCancelButton = QPushButton(icoTomato, "No Thanks", mw) messageBox.addButton(msgCancelButton, QMessageBox.RejectRole) messageBox.setDefaultButton(msgDefaultButton) messageBox.setIconPixmap(imgEvernoteWebMsgBox) messageBox.setTextFormat(textFormat) messageBox.setWindowIcon(icoEvernoteWeb) messageBox.setWindowIconText("Anknotes") messageBox.setText(message) messageBox.setWindowTitle(title) hSpacer = QSpacerItem(minWidth, 0, QSizePolicy.Minimum, QSizePolicy.Expanding) layout = messageBox.layout() """:type : QGridLayout """ layout.addItem(hSpacer, layout.rowCount() + 1, 0, 1, layout.columnCount()) ret = messageBox.exec_() if not cancelButton: return True if messageBox.clickedButton() == msgCancelButton or messageBox.clickedButton() == 0: return False return True
def process_tags(self): if is_str_type(self.TagNames): self.TagNames = self.TagNames[1:-1].split(',') if is_str_type(self.TagGuids): self.TagGuids = self.TagGuids[1:-1].split(',')
def obj2log_simple(content): if not is_str_type(content): content = str(content) return content
def titleObjectToString(title, recursion=0): """ :param title: Title in string, unicode, dict, sqlite, TOCKey or NoteTitle formats. Note objects are also parseable :type title: None | str | unicode | dict[str,str] | sqlite.Row | EvernoteNoteTitle :return: string Title :rtype: str """ # if recursion == 0: # str_ = str_safe(title) # try: log(u'\n---------------------------------%s' % str_, 'tOTS', timestamp=False) # except Exception: log(u'\n---------------------------------%s' % '[UNABLE TO DISPLAY TITLE]', 'tOTS', timestamp=False) # pass if title is None: # log('NoneType', 'tOTS', timestamp=False) return "" if is_str_type(title): # log('str/unicode', 'tOTS', timestamp=False) return title if hasattr(title, 'FullTitle'): # log('FullTitle', 'tOTS', timestamp=False) # noinspection PyCallingNonCallable title = title.FullTitle() if callable(title.FullTitle) else title.FullTitle elif hasattr(title, 'Title'): # log('Title', 'tOTS', timestamp=False) title = title.Title() if callable(title.Title) else title.Title elif hasattr(title, 'title'): # log('title', 'tOTS', timestamp=False) title = title.title() if callable(title.title) else title.title else: try: if hasattr(title, 'keys'): keys = title.keys() if callable(title.keys) else title.keys if 'title' in keys: # log('keys[title]', 'tOTS', timestamp=False) title = title['title'] elif 'Title' in keys: # log('keys[Title]', 'tOTS', timestamp=False) title = title['Title'] elif not keys: # log('keys[empty dict?]', 'tOTS', timestamp=False) raise else: log('keys[Unknown Attr]: %s' % str(keys), 'tOTS', timestamp=False) return "" elif 'title' in title: # log('[title]', 'tOTS', timestamp=False) title = title['title'] elif 'Title' in title: # log('[Title]', 'tOTS', timestamp=False) title = title['Title'] elif FIELDS.TITLE in title: # log('[FIELDS.TITLE]', 'tOTS', timestamp=False) title = title[FIELDS.TITLE] else: # log('Nothing Found', 'tOTS', timestamp=False) # log(title) # log(title.keys()) return title except Exception: log('except', 'tOTS', timestamp=False) log(title, 'toTS', timestamp=False) raise LookupError recursion += 1 # log(u'recursing %d: ' % recursion, 'tOTS', timestamp=False) return EvernoteNoteTitle.titleObjectToString(title, recursion)
def titleObjectToString(title, recursion=0): """ :param title: Title in string, unicode, dict, sqlite, TOCKey or NoteTitle formats. Note objects are also parseable :type title: None | str | unicode | dict[str,str] | sqlite.Row | EvernoteNoteTitle :return: string Title :rtype: str """ # if recursion == 0: # str_ = str_safe(title) # try: log(u'\n---------------------------------%s' % str_, 'tOTS', timestamp=False) # except Exception: log(u'\n---------------------------------%s' % '[UNABLE TO DISPLAY TITLE]', 'tOTS', timestamp=False) # pass if title is None: # log('NoneType', 'tOTS', timestamp=False) return "" if is_str_type(title): # log('str/unicode', 'tOTS', timestamp=False) return title if hasattr(title, 'FullTitle'): # log('FullTitle', 'tOTS', timestamp=False) # noinspection PyCallingNonCallable title = title.FullTitle() if callable( title.FullTitle) else title.FullTitle elif hasattr(title, 'Title'): # log('Title', 'tOTS', timestamp=False) title = title.Title() if callable(title.Title) else title.Title elif hasattr(title, 'title'): # log('title', 'tOTS', timestamp=False) title = title.title() if callable(title.title) else title.title else: try: if hasattr(title, 'keys'): keys = title.keys() if callable(title.keys) else title.keys if 'title' in keys: # log('keys[title]', 'tOTS', timestamp=False) title = title['title'] elif 'Title' in keys: # log('keys[Title]', 'tOTS', timestamp=False) title = title['Title'] elif not keys: # log('keys[empty dict?]', 'tOTS', timestamp=False) raise else: log('keys[Unknown Attr]: %s' % str(keys), 'tOTS', timestamp=False) return "" elif 'title' in title: # log('[title]', 'tOTS', timestamp=False) title = title['title'] elif 'Title' in title: # log('[Title]', 'tOTS', timestamp=False) title = title['Title'] elif FIELDS.TITLE in title: # log('[FIELDS.TITLE]', 'tOTS', timestamp=False) title = title[FIELDS.TITLE] else: # log('Nothing Found', 'tOTS', timestamp=False) # log(title) # log(title.keys()) return title except Exception: log('except', 'tOTS', timestamp=False) log(title, 'toTS', timestamp=False) raise LookupError recursion += 1 # log(u'recursing %d: ' % recursion, 'tOTS', timestamp=False) return EvernoteNoteTitle.titleObjectToString(title, recursion)