def construct_match_queue(verbose): """ Returns a Queue of Match objects constructed from piped in sql query. """ rows = [line.decode('utf-8').split(u'|') for line in sys.stdin] fixture_queue = Queue(len(rows) + 1) for row in rows: if verbose: print u'{0} v {1}, {2}'.format(row[2], row[3], row[1]) fixture_queue.enqueue(Match(row)) # Flag match for submission to /r/gunners if row[2] == DUPE_TEAM or row[3] == DUPE_TEAM: print 'duplicating match' fixture_queue.enqueue(Match(row, gunners=True)) # Prompt for fixtures in verbose mode if verbose: sys.stdin = open('/dev/tty') while True: msg = raw_input('[Y/N] >') if 'n' in msg or 'N' in msg: sys.exit() elif 'y' in msg or 'Y' in msg: break return fixture_queue
class TestQueue(unittest.TestCase): def setUp(self): self.num_queue = Queue() self.num_queue.enqueue(3) self.num_queue.enqueue(2) self.num_queue.enqueue(1) self.letter_queue = Queue() self.letter_queue.enqueue("b") self.letter_queue.enqueue("a") def test_enqueue(self): empty_queue = Queue() empty_queue.enqueue(4) self.assertEqual(len(empty_queue), 1) def test_len(self): self.assertEqual(len(self.num_queue), 3) self.assertEqual(len(self.letter_queue), 2) def test_repr(self): self.assertEqual(repr(self.num_queue), "Queue(1, 2, 3)") self.assertEqual(repr(self.letter_queue), "Queue(a, b)") def test_dequeue(self): first = self.num_queue.dequeue() self.assertEqual(len(self.num_queue), 2) self.assertEqual(first, 1) second = self.num_queue.dequeue() self.assertEqual(second, 2) self.assertEqual(len(self.num_queue), 1) empty_queue = Queue() with self.assertRaises(LookupError): empty_queue.dequeue() def test_first(self): self.assertEqual(self.num_queue.first(), 1) self.assertEqual(self.letter_queue.first(), "a") empty_queue = Queue() with self.assertRaises(LookupError): empty_queue.first()
class TestQueue(unittest.TestCase): def setUp(self): self.q = Queue(1) def test_print(self): self.assertEquals(self.q.__str__(), "[0]") def test_len(self): self.assertEquals(len(self.q), 0) self.q.enqueue("test") self.assertEquals(len(self.q), 1) def test_dequeue_empty_queue(self): self.assertIsNone(self.q.dequeue()) def test_enqueue_full_queue(self): self.q.enqueue("test") self.assertFalse(self.q.enqueue("test")) def test_latest(self): self.assertEquals(self.q.latest(), 0) self.q.enqueue("test") self.assertEquals(self.q.latest(), "test") def test_empty(self): self.assertTrue(self.q.empty()) def test_enqueue(self): self.assertTrue(self.q.enqueue(0)) def test_full(self): self.q.enqueue(0) self.assertTrue(self.q.full()) def test_dequeue(self): self.q.enqueue("test") self.assertEquals(self.q.dequeue(), "test")
def main(): logging.basicConfig(filename='errors.log', level=logging.ERROR) log = logging.getLogger('ex') parser = argparse.ArgumentParser() parser.add_argument('-v', '--verbose', help='increase output verbosity', action='store_true') parser.add_argument('-l', '--load', help='load from last canceled run', action='store_true') args = parser.parse_args() if args.load: previous_state = load_from_save() post_queue = previous_state['post_queue'] update_queue = previous_state['update_queue'] else: post_queue = construct_match_queue(args.verbose) update_queue = Queue(len(post_queue)) r = praw.Reddit(user_agent='Match Thread Submiter for /r/soccer, by /u/Match-Thread-Bot') r.login() # Login details in praw.ini file while True: try: if not post_queue.empty(): time_until_kick_off = post_queue.latest().time_until_kick_off() else: time_until_kick_off = 0 print '{0} minutes until next kick off.'.format(int(time_until_kick_off)) print 'Length of post queue:\t{0}'.format(len(post_queue)) print 'Length of update queue:\t{0}'.format(len(update_queue)) if not post_queue.empty(): time_until_kick_off = post_queue.latest().time_until_kick_off() else: time_until_kick_off = 0 if not post_queue.empty() and time_until_kick_off < (PRE_KICK_OFF): post = post_queue.dequeue() title = u'Match Thread: {0} v {1}'.format(post.home_team, post.away_team) if not thread_exists(post, r): content = construct_thread(post) try: if post.gunners: # Submit gunners thread to /r/gunners submission = r.submit(ALT_SUBREDDIT, title, content) else: submission = r.submit(SUBREDDIT, title, content) submission.add_comment(comment) except (APIException, URLError, IOError): log.exception('Could not submit thread.') else: print 'posting thread %s' % submission.title update_queue.enqueue((submission.id, post)) print u'adding thread to update queue {0}'.format(submission.title) else: print u'Thread {0} already exists'.format(title) elif not update_queue.empty(): post = update_queue.dequeue() try: submission = r.get_submission(submission_id=post[0]) submission.edit(construct_thread(post[1], submission_id=post[0])) except (APIException, URLError, IOError): update_queue.enqueue(post) log.exception('Could not update thread') else: print u'updating thread {0}'.format(submission.title) time_left = MATCH_LENGTH - post[1].time_after_kick_off() if time_left > 0: update_queue.enqueue(post) print u'adding thread {0} to update queue {1} minutes left'.format(submission.title, int(time_left)) if post_queue.empty() and update_queue.empty(): print '\nFinished!' break print '\n' sleep(30) except KeyboardInterrupt: save_to_file(post_queue=post_queue, update_queue=update_queue) raise
# *** # uncomment when you've implemented peek and the methods above s.push(1) peeked = s.peek() print(peeked, "should be 1") print(len(s), "should be 1") print(s, "should be Stack(1)") # Queue code q = Queue() print(q._data, "should be []") # uncomment when you've implemented enqueue q.enqueue(5) q.enqueue(4) print(q._data, "should be [4, 5]") # uncomment when you've implemented __repr__ print(q, "should be Queue(4, 5)") # uncomment when you've implemented __len__ print(len(q), "should be 2") # uncomment when you've implemented dequeue x = q.dequeue() print(x, "should be 4") print(q, "should be Queue(5)") y = q.dequeue() print(y, "should be 5")
def test_enqueue(self): empty_queue = Queue() empty_queue.enqueue(4) self.assertEqual(len(empty_queue), 1)