コード例 #1
0
ファイル: runtest.py プロジェクト: Pikaurd/charllote
 def test_tmpTest(self):
   resOper = ResourceOperator('/dev.sqlite3.db')
   for feedRes in resOper.getFeedResource():
     feedReader = FeedReader(feedRes)
     self.assertTrue(feedReader.fillFeedResPubDate())
コード例 #2
0
ファイル: runtest.py プロジェクト: Pikaurd/charllote
 def setUp(self):
   self.resOper = ResourceOperator('/dev.sqlite3.db')
   feedRes = FeedRes('popgo.xml', 'tag', 'description', 0, 'Tue, 12 Jul 2011 22:23:26 +0800')
   self.reader = FeedReader(feedRes)
コード例 #3
0
ファイル: Application.py プロジェクト: Pikaurd/charllote
 def __init__(self):
   self.resOper = ResourceOperator()
   self.feedFilter = FeedFilter()
   self._initCache()
   self.results = None
   self.linkSender = None
コード例 #4
0
ファイル: runtest.py プロジェクト: Pikaurd/charllote
class TestResourceOperator(unittest.TestCase):
  def setUp(self):
    self.resOper = ResourceOperator('/dev.sqlite3.db')
    feedRes = FeedRes('popgo.xml', 'tag', 'description', 0, 'Tue, 12 Jul 2011 22:23:26 +0800')
    self.reader = FeedReader(feedRes)

  def tearDown(self):
    self.resOper = None

  @unittest.skip("insert skipping")
  def test_addFilterPattern(self):
    reason = '异域字幕组'
    tag = 1
    self.resOper.addFilterPattern(reason, tag)

  def test_getFilterPattern(self):
    patterns = [
                '480',
                '1024'
               ]
    tmpList = self.resOper.getFilterPattern()
    realList = []
    realList.append(tmpList[0].content)
    realList.append(tmpList[1].content)
    self.assertListEqual(patterns, realList)

  def test_getFeedResource(self):
    real = self.resOper.getFeedResource()
#    print(listPrint(real))
    self.assertEqual(2, real[1].id)
    self.assertEqual(7, len(real))

  @unittest.skip("insert skipping")
  def test_addAndGetFeedResUpdateTime(self):
    feedRes = self.reader.feedRes
    self.resOper.addFeedResUpdateTime(feedRes)
    self.resOper.getFeedResUpdateTime()# add data in FeedReaUpdateTime.Cache
    self.assertLessEqual(feedRes.pubDate, FeedResUpdateTime.get(feedRes.id))

  def test_getFeeds(self):
    feeds = self.resOper.getFeeds()
    self.assertLessEqual(0, len(feeds))

  def test_fillCache(self):
    self.resOper.fillCache()
    self.assertLessEqual(0, Cache.size())
コード例 #5
0
ファイル: Application.py プロジェクト: Pikaurd/charllote
class Application:
  __version__ = (0, 1, 3)
  def __init__(self):
    self.resOper = ResourceOperator()
    self.feedFilter = FeedFilter()
    self._initCache()
    self.results = None
    self.linkSender = None

  def _initCache(self):
    self.resOper.getFeedResUpdateTime()
    self.resOper.fillCache()

  def openLink(self, index):
    openCmd = 'open'
    platform = sys.platform
    if platform == 'linux2':
      openCmd = 'xdg-open'
    elif platform == 'win32':
      openCmd = 'start'
    try:
      for i in [int(e) for e in index.strip().split(' ')]:
        if self.results[0][i].link.startswith('http'):
          os.system('{} {!r}'.format(openCmd, self.results[0][i].link))
        else:
          print(self.results[0][i].link)
    except IndexError:
      print("Index Error")
    except ValueError:
      print("Value Error")

  def magnetLink(self, index):
    for i in [int(e) for e in index.strip().split(' ')]:
      print(getMagnetLinkFromURL(self.results[0][i].link))

  def sendMagnetLink(self, index):
    if self.linkSender is None:
      self.linkSender = send2Trans()
    for i in [int(e) for e in index.strip().split(' ')]:
      link = getMagnetLinkFromURL(self.results[0][i].link)
      self.linkSender.sendlink(link)

  def showDescription(self, index):
    i = int(index)
    print(self.results[0][i].description)

  def readCommand(self, results):
    def getArg(x):
      return int(x.split(' ')[-1])
    try:
      cmd = input()
      while (cmd != 'exit'):
        if cmd.startswith('c'): # open url
          self.openLink(cmd[2:])
        elif cmd.startswith('d'): # show description
          print('Feed Description:')
          self.showDescription(cmd[2:])
        elif cmd.startswith('m'): # get magnet link
          self.magnetLink(cmd[2:])
        elif cmd.startswith('s'): # send magnet link
          self.sendMagnetLink(cmd[2:])
        elif cmd == 'add filter': # add fileter
          self.addNewFilter()
        elif cmd == 'filtered':  # list fileterd feeds
          self._showResult(results[1])
        elif cmd == 'show': # show feeds
          self._showResult(results[0])
        elif cmd == 'fetch': # fetch from feedRes
          self.fetchAndPrint()
        else:
          print('unrecognized')
        cmd = input()
    except EOFError:
      print('Bye~')


  def addNewFilter(self):
    print('Input reason tag.{tag 1 and 4 is must filter}')
    cmd = input().split(' ')
    reason = cmd[0]
    tag = cmd[1]
    print('Reason: {}\tTag: {}\nconfirm?'.format(reason,int(tag)))
    if input() != 'no':
      self.resOper.addFilterPattern(reason, tag)
    else:
      print('cancled')

  def fetchingRes(self):
#TODO: tmep solution
#    try:
    nodes = []
    for feedRes in self.resOper.getFeedResource():
      reader = FeedReader(feedRes)
      newNodes = reader.getFeedItems(FeedReader.noDuplicate)
      if len(newNodes) == 0:
        print('[Info] skip feeds {}'.format(feedRes.id), end='\t')
        continue
      nodes += newNodes
    #nodes = listUnique(nodes, lambda x:x.title)
    validFeeds = self.feedFilter.filterFeeds(nodes)
    filtered = listSub(nodes, validFeeds)
    self._writeToDB(validFeeds, filtered)
    self.results = (validFeeds, filtered)
#    except:
#      print("Fetching error")

  def _showResult(self, xs):
    print('\n{} feed(s) updated'.format(len(xs)))
    print(listPrint(xs, 'seq', fetchF=lambda x:x.title))

  def _writeToDB(self, valid, filtered):
    self.resOper.writeValid(valid)
    self.resOper.writeFiltered(filtered)

  def run(self, mode='normal'):
    if mode == 'init':
      self.fetchingRes()
    elif mode != 'normal':
      print('Welcom to Charllote Rss Reader. ')
      self.readCommand([])
    else:
      self.fetchAndPrint()
      self.readCommand(self.results)
        
  def fetchAndPrint(self):
    print('Now fetching resources')
    self.fetchingRes()
    if self.results == None:
      print("Fetch Error")
      return
    self._showResult(self.results[0])
    print('Instruction:\nc x:Open browser to check no x\nd x:Direct download specified feed with defualt dowloader\n')