Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.65 KB | None | 0 0
  1. # import pdb
  2. # import re
  3.  
  4. from tune import Tune
  5. from tune_list import TuneList
  6.  
  7.  
  8. class Command(object):
  9.     def __init__(self, argv):
  10.         self.tune = Tune()
  11.         self.tunes = TuneList()
  12.         self.tunes.load()
  13.  
  14.         # prefixes
  15.         self.separator = ':'
  16.         self.pre = '-'
  17.  
  18.         # separate option and data argumets
  19.         self.option = argv[1]
  20.         self.data = self._format_to_dict(argv[2:])
  21.  
  22.         # possible options to pass as aruments
  23.         self.add_key = (self.pre + 'a', self.pre + 'add')
  24.         self.show_key = (self.pre + 's', self.pre + 'show')
  25.         self.change_key = (self.pre + 'c', self.pre + 'change')
  26.         self.info_key = (self.pre + 'i', self.pre + 'info')
  27.         self.delete_key =\
  28.             (self.pre + 'd', self.pre + 'del', self.pre + 'delete')
  29.  
  30.         # possible information about tune to pass
  31.         self.artist_key = ('A', 'Artist')
  32.         self.title_key = ('T', 'Title')
  33.         self.genres_key = ('g', 'genre')
  34.         self.sub_genres_key = ('s', 'sub_genre', 'sub-genre', 'sub')
  35.         self.tags = ('t', 'tags')
  36.  
  37.     def _format_to_dict(self, args):
  38.         '''Converts passed arguments into dictionary to easy'''
  39.         data = dict()
  40.         for element in args:
  41.             # colon is main element of an argument so we need check
  42.             # if argument contains it
  43.             try:
  44.                 separator_index = element.index(self.separator)
  45.             except ValueError:
  46.                 raise ValueError('Invalid syntax')
  47.  
  48.             # separate key and value, then update dictionary
  49.             key = element[:separator_index]
  50.             value = element[separator_index + 1:]
  51.             data.update({key: value})
  52.  
  53.         return data
  54.  
  55.     def update(self):
  56.         '''Main function in this class. First it recognizes,
  57.        action should perform add, change or delete.
  58.        Then call appropirate functions.'''
  59.  
  60.         # Add behaviour
  61.         if self.option in self.add_key:
  62.             self._add()
  63.         elif self.option in self.show_key:
  64.             self._show()
  65.         elif self.option in self.change_key:
  66.             self._change()
  67.         elif self.option in self.info_key:
  68.             self._info()
  69.         elif self.option in self.delete_key:
  70.             self._delete()
  71.  
  72.     def _add(self):
  73.  
  74.         # you should consider using property here instead
  75.         # this function
  76.         self._claim_data()
  77.         self.tunes.add(self.tune)
  78.         self.tunes.save()
  79.         self.tunes.show()
  80.  
  81.     def _show(self):
  82.         print('running _show function')
  83.         self.tunes.show()
  84.  
  85.     def _change(self):
  86.         if not self.tunes.dct:
  87.             self.tunes.show()
  88.  
  89.         self.tunes.modify()
  90.         self.tunes.save()
  91.  
  92.     def _info(self):
  93.         if not self.tunes.dct:
  94.             self.tunes.show()
  95.  
  96.         self.tunes.info()
  97.  
  98.     def _delete(self):
  99.         print('running _delete function')
  100.         if not self.tunes.dct:
  101.             self._show()
  102.  
  103.         self.tunes.delete()
  104.         self.tunes.save()
  105.  
  106.     def _claim_data(self):
  107.         '''Updates single tune based on the users input'''
  108.  
  109.         for k, v in self.data.items():
  110.             if k in self.artist_key:
  111.                 self.tune['artist'] = v
  112.             elif k in self.title_key:
  113.                 self.tune['title'] = v
  114.             elif k in self.genres_key:
  115.                 self.tune['genres'] = v.split()
  116.             elif k in self.sub_genres_key:
  117.                 self.tune['sub_genres'] = v.split()
  118.             elif k in self.tags:
  119.                 self.tune['tags'] = v.split()
  120.             else:
  121.                 raise KeyError(f'No such attribute: "{k}"')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement