Esempio n. 1
0
    def test_post(self):
        event = threading.Event()
        api_service = MockAPIService()
        fact_builder = FactBuilder()

        api_service.texts = []
        api_service.tested_error = False

        def post_message(text):
            if len(api_service.texts) == 1 and not api_service.tested_error:
                api_service.tested_error = True
                raise Exception('testing')

            api_service.texts.append(text)

            if len(api_service.texts) > 4:
                event.set()
                post_sched.stop()

        api_service.post_message = post_message

        post_sched = PostScheduler(fact_builder, self.db, api_service,
            interval=0.2, deviation=0.01, retry_delay=0.1)

        event.wait(timeout=5)
        post_sched.stop()
        post_sched.join(timeout=1)

        self.assertEqual(len(api_service.texts), 5)
        self.assertEqual(len(self.db.get_facts()), 5)
Esempio n. 2
0
def main():
    arg_parser = argparse.ArgumentParser(
        description='Runs CompFacts Twitter status updater.')
    arg_parser.add_argument('--log-dir', help='Logging directory')
    arg_parser.add_argument('--config', help='Config file path',
        default='/etc/compfacts.conf')
    arg_parser.add_argument('--simulate', help='Simulate posting',
        action='store_true', default=False)
    arg_parser.add_argument('database', help='Database path')

    args = arg_parser.parse_args()

    if args.log_dir:
        if not os.path.exists(args.log_dir):
            os.makedirs(args.log_dir)

        logger = logging.getLogger()
        logger.setLevel(logging.DEBUG)
        handler = logging.handlers.RotatingFileHandler(os.path.join(
            args.log_dir, 'compfacts.log'), maxBytes=4194304, backupCount=9)
        logger.addHandler(handler)
        formatter = logging.Formatter(
            '%(asctime)s %(name)s %(funcName)s:%(lineno)d %(levelname)s '
            '%(message)s')
        handler.setFormatter(formatter)

    config_parser = ConfigParser.ConfigParser()
    config_parser.read([args.config])

    database = Database(args.database)
    fact_builder = FactBuilder()
    sched_kwargs = {}

    if args.simulate:
        api_service = NullAPIService()
        sched_kwargs['interval'] = 30
        sched_kwargs['deviation'] = 5
        sched_kwargs['retry_delay'] = 5
    else:
        consumer_key = config_parser.get('twitter', 'consumer_key')

        if consumer_key == u'TODO':
            raise Exception('Please set consumer key')

        consumer_secret = config_parser.get('twitter', 'consumer_secret')
        access_token = config_parser.get('twitter', 'access_token')
        access_token_secret = config_parser.get('twitter',
            'access_token_secret')
        api_service = TwitterAPIService(consumer_key, consumer_secret,
            access_token, access_token_secret)

    post_sched = PostScheduler(fact_builder, database, api_service,
        **sched_kwargs)

    while True:
        try:
            post_sched.join(timeout=1)
        except KeyboardInterrupt:
            break