home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1355 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  11.4 KB  |  529 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from calibre.utils.ordered_dict import OrderedDict
  5.  
  6. class TagsIcons(dict):
  7.     category_icons = [
  8.         'authors',
  9.         'series',
  10.         'formats',
  11.         'publisher',
  12.         'rating',
  13.         'news',
  14.         'tags',
  15.         ':custom',
  16.         ':user',
  17.         'search']
  18.     
  19.     def __init__(self, icon_dict):
  20.         for a in self.category_icons:
  21.             if a not in icon_dict:
  22.                 raise ValueError('Missing category icon [%s]' % a)
  23.             a not in icon_dict
  24.             self[a] = icon_dict[a]
  25.         
  26.  
  27.  
  28.  
  29. class FieldMetadata(dict):
  30.     VALID_DATA_TYPES = frozenset([
  31.         None,
  32.         'rating',
  33.         'text',
  34.         'comments',
  35.         'datetime',
  36.         'int',
  37.         'float',
  38.         'bool',
  39.         'series'])
  40.     _field_metadata = [
  41.         ('authors', {
  42.             'table': 'authors',
  43.             'column': 'name',
  44.             'link_column': 'author',
  45.             'category_sort': 'sort',
  46.             'datatype': 'text',
  47.             'is_multiple': ',',
  48.             'kind': 'field',
  49.             'name': _('Authors'),
  50.             'search_terms': [
  51.                 'authors',
  52.                 'author'],
  53.             'is_custom': False,
  54.             'is_category': True }),
  55.         ('series', {
  56.             'table': 'series',
  57.             'column': 'name',
  58.             'link_column': 'series',
  59.             'category_sort': '(title_sort(name))',
  60.             'datatype': 'series',
  61.             'is_multiple': None,
  62.             'kind': 'field',
  63.             'name': _('Series'),
  64.             'search_terms': [
  65.                 'series'],
  66.             'is_custom': False,
  67.             'is_category': True }),
  68.         ('formats', {
  69.             'table': None,
  70.             'column': None,
  71.             'datatype': 'text',
  72.             'is_multiple': ',',
  73.             'kind': 'field',
  74.             'name': _('Formats'),
  75.             'search_terms': [
  76.                 'formats',
  77.                 'format'],
  78.             'is_custom': False,
  79.             'is_category': True }),
  80.         ('publisher', {
  81.             'table': 'publishers',
  82.             'column': 'name',
  83.             'link_column': 'publisher',
  84.             'category_sort': 'name',
  85.             'datatype': 'text',
  86.             'is_multiple': None,
  87.             'kind': 'field',
  88.             'name': _('Publishers'),
  89.             'search_terms': [
  90.                 'publisher'],
  91.             'is_custom': False,
  92.             'is_category': True }),
  93.         ('rating', {
  94.             'table': 'ratings',
  95.             'column': 'rating',
  96.             'link_column': 'rating',
  97.             'category_sort': 'rating',
  98.             'datatype': 'rating',
  99.             'is_multiple': None,
  100.             'kind': 'field',
  101.             'name': _('Ratings'),
  102.             'search_terms': [
  103.                 'rating'],
  104.             'is_custom': False,
  105.             'is_category': True }),
  106.         ('news', {
  107.             'table': 'news',
  108.             'column': 'name',
  109.             'category_sort': 'name',
  110.             'datatype': None,
  111.             'is_multiple': None,
  112.             'kind': 'category',
  113.             'name': _('News'),
  114.             'search_terms': [],
  115.             'is_custom': False,
  116.             'is_category': True }),
  117.         ('tags', {
  118.             'table': 'tags',
  119.             'column': 'name',
  120.             'link_column': 'tag',
  121.             'category_sort': 'name',
  122.             'datatype': 'text',
  123.             'is_multiple': ',',
  124.             'kind': 'field',
  125.             'name': _('Tags'),
  126.             'search_terms': [
  127.                 'tags',
  128.                 'tag'],
  129.             'is_custom': False,
  130.             'is_category': True }),
  131.         ('author_sort', {
  132.             'table': None,
  133.             'column': None,
  134.             'datatype': 'text',
  135.             'is_multiple': None,
  136.             'kind': 'field',
  137.             'name': None,
  138.             'search_terms': [],
  139.             'is_custom': False,
  140.             'is_category': False }),
  141.         ('comments', {
  142.             'table': None,
  143.             'column': None,
  144.             'datatype': 'text',
  145.             'is_multiple': None,
  146.             'kind': 'field',
  147.             'name': None,
  148.             'search_terms': [
  149.                 'comments',
  150.                 'comment'],
  151.             'is_custom': False,
  152.             'is_category': False }),
  153.         ('cover', {
  154.             'table': None,
  155.             'column': None,
  156.             'datatype': None,
  157.             'is_multiple': None,
  158.             'kind': 'field',
  159.             'name': None,
  160.             'search_terms': [
  161.                 'cover'],
  162.             'is_custom': False,
  163.             'is_category': False }),
  164.         ('flags', {
  165.             'table': None,
  166.             'column': None,
  167.             'datatype': 'text',
  168.             'is_multiple': None,
  169.             'kind': 'field',
  170.             'name': None,
  171.             'search_terms': [],
  172.             'is_custom': False,
  173.             'is_category': False }),
  174.         ('id', {
  175.             'table': None,
  176.             'column': None,
  177.             'datatype': 'int',
  178.             'is_multiple': None,
  179.             'kind': 'field',
  180.             'name': None,
  181.             'search_terms': [],
  182.             'is_custom': False,
  183.             'is_category': False }),
  184.         ('isbn', {
  185.             'table': None,
  186.             'column': None,
  187.             'datatype': 'text',
  188.             'is_multiple': None,
  189.             'kind': 'field',
  190.             'name': None,
  191.             'search_terms': [
  192.                 'isbn'],
  193.             'is_custom': False,
  194.             'is_category': False }),
  195.         ('lccn', {
  196.             'table': None,
  197.             'column': None,
  198.             'datatype': 'text',
  199.             'is_multiple': None,
  200.             'kind': 'field',
  201.             'name': None,
  202.             'search_terms': [],
  203.             'is_custom': False,
  204.             'is_category': False }),
  205.         ('ondevice', {
  206.             'table': None,
  207.             'column': None,
  208.             'datatype': 'text',
  209.             'is_multiple': None,
  210.             'kind': 'field',
  211.             'name': None,
  212.             'search_terms': [
  213.                 'ondevice'],
  214.             'is_custom': False,
  215.             'is_category': False }),
  216.         ('path', {
  217.             'table': None,
  218.             'column': None,
  219.             'datatype': 'text',
  220.             'is_multiple': None,
  221.             'kind': 'field',
  222.             'name': None,
  223.             'search_terms': [],
  224.             'is_custom': False,
  225.             'is_category': False }),
  226.         ('pubdate', {
  227.             'table': None,
  228.             'column': None,
  229.             'datatype': 'datetime',
  230.             'is_multiple': None,
  231.             'kind': 'field',
  232.             'name': None,
  233.             'search_terms': [
  234.                 'pubdate'],
  235.             'is_custom': False,
  236.             'is_category': False }),
  237.         ('series_index', {
  238.             'table': None,
  239.             'column': None,
  240.             'datatype': 'float',
  241.             'is_multiple': None,
  242.             'kind': 'field',
  243.             'name': None,
  244.             'search_terms': [],
  245.             'is_custom': False,
  246.             'is_category': False }),
  247.         ('sort', {
  248.             'table': None,
  249.             'column': None,
  250.             'datatype': 'text',
  251.             'is_multiple': None,
  252.             'kind': 'field',
  253.             'name': None,
  254.             'search_terms': [],
  255.             'is_custom': False,
  256.             'is_category': False }),
  257.         ('size', {
  258.             'table': None,
  259.             'column': None,
  260.             'datatype': 'float',
  261.             'is_multiple': None,
  262.             'kind': 'field',
  263.             'name': None,
  264.             'search_terms': [
  265.                 'size'],
  266.             'is_custom': False,
  267.             'is_category': False }),
  268.         ('timestamp', {
  269.             'table': None,
  270.             'column': None,
  271.             'datatype': 'datetime',
  272.             'is_multiple': None,
  273.             'kind': 'field',
  274.             'name': None,
  275.             'search_terms': [
  276.                 'date'],
  277.             'is_custom': False,
  278.             'is_category': False }),
  279.         ('title', {
  280.             'table': None,
  281.             'column': None,
  282.             'datatype': 'text',
  283.             'is_multiple': None,
  284.             'kind': 'field',
  285.             'name': None,
  286.             'search_terms': [
  287.                 'title'],
  288.             'is_custom': False,
  289.             'is_category': False }),
  290.         ('uuid', {
  291.             'table': None,
  292.             'column': None,
  293.             'datatype': 'text',
  294.             'is_multiple': None,
  295.             'kind': 'field',
  296.             'name': None,
  297.             'search_terms': [],
  298.             'is_custom': False,
  299.             'is_category': False })]
  300.     search_items = [
  301.         'all',
  302.         'search']
  303.     
  304.     def __init__(self):
  305.         self._tb_cats = OrderedDict()
  306.         self._search_term_map = { }
  307.         self.custom_label_to_key_map = { }
  308.         for k, v in self._field_metadata:
  309.             if v['kind'] == 'field' and v['datatype'] not in self.VALID_DATA_TYPES:
  310.                 raise ValueError('Unknown datatype %s for field %s' % (v['datatype'], k))
  311.             v['datatype'] not in self.VALID_DATA_TYPES
  312.             self._tb_cats[k] = v
  313.             self._tb_cats[k]['label'] = k
  314.             self._tb_cats[k]['display'] = { }
  315.             self._tb_cats[k]['is_editable'] = True
  316.             self._add_search_terms_to_map(k, self._tb_cats[k]['search_terms'])
  317.         
  318.         self.custom_field_prefix = '#'
  319.         self.get = self._tb_cats.get
  320.  
  321.     
  322.     def __getitem__(self, key):
  323.         return self._tb_cats[key]
  324.  
  325.     
  326.     def __setitem__(self, key, val):
  327.         raise AttributeError('Assigning to this object is forbidden')
  328.  
  329.     
  330.     def __delitem__(self, key):
  331.         del self._tb_cats[key]
  332.  
  333.     
  334.     def __iter__(self):
  335.         for key in self._tb_cats:
  336.             yield key
  337.         
  338.  
  339.     
  340.     def __contains__(self, key):
  341.         return self.has_key(key)
  342.  
  343.     
  344.     def has_key(self, key):
  345.         return key in self._tb_cats
  346.  
  347.     
  348.     def keys(self):
  349.         return self._tb_cats.keys()
  350.  
  351.     
  352.     def iterkeys(self):
  353.         for key in self._tb_cats:
  354.             yield key
  355.         
  356.  
  357.     
  358.     def itervalues(self):
  359.         return self._tb_cats.itervalues()
  360.  
  361.     
  362.     def values(self):
  363.         return self._tb_cats.values()
  364.  
  365.     
  366.     def iteritems(self):
  367.         for key in self._tb_cats:
  368.             yield (key, self._tb_cats[key])
  369.         
  370.  
  371.     
  372.     def items(self):
  373.         return list(self.iteritems())
  374.  
  375.     
  376.     def is_custom_field(self, key):
  377.         return key.startswith(self.custom_field_prefix)
  378.  
  379.     
  380.     def key_to_label(self, key):
  381.         if 'label' not in self._tb_cats[key]:
  382.             return key
  383.         return self._tb_cats[key]['label']
  384.  
  385.     
  386.     def label_to_key(self, label, prefer_custom = False):
  387.         if prefer_custom:
  388.             if label in self.custom_label_to_key_map:
  389.                 return self.custom_label_to_key_map[label]
  390.         
  391.         if 'label' in self._tb_cats:
  392.             return label
  393.         raise ValueError('Unknown key [%s]' % label)
  394.  
  395.     
  396.     def get_custom_fields(self):
  397.         return _[1]
  398.  
  399.     
  400.     def get_custom_field_metadata(self):
  401.         l = { }
  402.         for k in self._tb_cats:
  403.             if self._tb_cats[k]['is_custom']:
  404.                 l[k] = self._tb_cats[k]
  405.                 continue
  406.         
  407.         return l
  408.  
  409.     
  410.     def add_custom_field(self, label, table, column, datatype, colnum, name, display, is_editable, is_multiple, is_category):
  411.         key = self.custom_field_prefix + label
  412.         if key in self._tb_cats:
  413.             raise ValueError('Duplicate custom field [%s]' % label)
  414.         key in self._tb_cats
  415.         if datatype not in self.VALID_DATA_TYPES:
  416.             raise ValueError('Unknown datatype %s for field %s' % (datatype, key))
  417.         datatype not in self.VALID_DATA_TYPES
  418.         self._tb_cats[key] = {
  419.             'table': table,
  420.             'column': column,
  421.             'datatype': datatype,
  422.             'is_multiple': is_multiple,
  423.             'kind': 'field',
  424.             'name': name,
  425.             'search_terms': [
  426.                 key],
  427.             'label': label,
  428.             'colnum': colnum,
  429.             'display': display,
  430.             'is_custom': True,
  431.             'is_category': is_category,
  432.             'link_column': 'value',
  433.             'category_sort': 'value',
  434.             'is_editable': is_editable }
  435.         self._add_search_terms_to_map(key, [
  436.             key])
  437.         self.custom_label_to_key_map[label] = key
  438.  
  439.     
  440.     def remove_custom_fields(self):
  441.         for key in self.get_custom_fields():
  442.             del self._tb_cats[key]
  443.         
  444.  
  445.     
  446.     def remove_dynamic_categories(self):
  447.         for key in list(self._tb_cats.keys()):
  448.             val = self._tb_cats[key]
  449.             if val['is_category'] and val['kind'] in ('user', 'search'):
  450.                 del self._tb_cats[key]
  451.                 continue
  452.         
  453.  
  454.     
  455.     def cc_series_index_column_for(self, key):
  456.         return self._tb_cats[key]['rec_index'] + 1
  457.  
  458.     
  459.     def add_user_category(self, label, name):
  460.         if label in self._tb_cats:
  461.             raise ValueError('Duplicate user field [%s]' % label)
  462.         label in self._tb_cats
  463.         self._tb_cats[label] = {
  464.             'table': None,
  465.             'column': None,
  466.             'datatype': None,
  467.             'is_multiple': None,
  468.             'kind': 'user',
  469.             'name': name,
  470.             'search_terms': [],
  471.             'is_custom': False,
  472.             'is_category': True }
  473.  
  474.     
  475.     def add_search_category(self, label, name):
  476.         if label in self._tb_cats:
  477.             raise ValueError('Duplicate user field [%s]' % label)
  478.         label in self._tb_cats
  479.         self._tb_cats[label] = {
  480.             'table': None,
  481.             'column': None,
  482.             'datatype': None,
  483.             'is_multiple': None,
  484.             'kind': 'search',
  485.             'name': name,
  486.             'search_terms': [],
  487.             'is_custom': False,
  488.             'is_category': True }
  489.  
  490.     
  491.     def set_field_record_index(self, label, index, prefer_custom = False):
  492.         if prefer_custom:
  493.             key = self.custom_field_prefix + label
  494.             if key not in self._tb_cats:
  495.                 key = label
  496.             
  497.         elif label in self._tb_cats:
  498.             key = label
  499.         else:
  500.             key = self.custom_field_prefix + label
  501.         self._tb_cats[key]['rec_index'] = index
  502.  
  503.     
  504.     def get_search_terms(self):
  505.         s_keys = []
  506.         for v in self._tb_cats.itervalues():
  507.             (map,)((lambda x: s_keys.append(x)), v['search_terms'])
  508.         
  509.         for v in self.search_items:
  510.             s_keys.append(v)
  511.         
  512.         return s_keys
  513.  
  514.     
  515.     def _add_search_terms_to_map(self, key, terms):
  516.         if terms is not None:
  517.             for t in terms:
  518.                 self._search_term_map[t] = key
  519.             
  520.         
  521.  
  522.     
  523.     def search_term_to_key(self, term):
  524.         if term in self._search_term_map:
  525.             return self._search_term_map[term]
  526.         return term
  527.  
  528.  
  529.