@click.command()<EOL>@click.option('<STR_LIT>', multiple=True, help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', multiple=True, help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', multiple=True, help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', multiple=True, help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', multiple=True, help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', default=<NUM_LIT:10>, help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', default=<NUM_LIT>, help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', default=False)<EOL>@click.option('<STR_LIT>', default=True)<EOL>@click.option('<STR_LIT>', default=True)<EOL>@click.option('<STR_LIT>', type=click.Path(), default='<STR_LIT>')<EOL>@click.option('<STR_LIT>', default=True)<EOL>@click.option('<STR_LIT>', default=<NUM_LIT>, help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', help='<STR_LIT>')<EOL>@click.option('<STR_LIT>', is_flag=True)<EOL>def cli(**settings):
setup_logging(settings)<EOL>settings = setup_languages(settings)<EOL>channels = setup_channel_map(settings)<EOL>app = CriticApp(**dict(settings, channels=channels))<EOL>if settings['<STR_LIT>']:<EOL><INDENT>app.sentry_client = Client(settings['<STR_LIT>'])<EOL>logger.debug('<STR_LIT>' % settings['<STR_LIT>'])<EOL><DEDENT>else:<EOL><INDENT>app.sentry_client = None<EOL><DEDENT>if settings['<STR_LIT:version>']:<EOL><INDENT>click.echo('<STR_LIT>' % critics.__version__)<EOL>return<EOL><DEDENT>if not (settings['<STR_LIT>'] or settings['<STR_LIT>']):<EOL><INDENT>click.echo('<STR_LIT>')<EOL>return<EOL><DEDENT>loop = tornado.ioloop.IOLoop.instance()<EOL>if app.load_model():<EOL><INDENT>logger.debug('<STR_LIT>')<EOL>notify = True<EOL><DEDENT>else:<EOL><INDENT>notify = False<EOL><DEDENT>if settings['<STR_LIT>']:<EOL><INDENT>logger.info('<STR_LIT>', '<STR_LIT:U+002CU+0020>'.join(settings['<STR_LIT>']))<EOL>itunes = tornado.ioloop.PeriodicCallback(partial(app.poll_store, '<STR_LIT>'),<EOL><NUM_LIT:1000> * settings['<STR_LIT>'], loop)<EOL>itunes.start()<EOL><DEDENT>if settings['<STR_LIT>']:<EOL><INDENT>logger.info('<STR_LIT>', '<STR_LIT:U+002CU+0020>'.join(settings['<STR_LIT>']))<EOL>google_play = tornado.ioloop.PeriodicCallback(partial(app.poll_store, '<STR_LIT>'),<EOL><NUM_LIT:1000> * settings['<STR_LIT>'], loop)<EOL>google_play.start()<EOL><DEDENT>echo_channel_map(channels)<EOL>if settings['<STR_LIT>']:<EOL><INDENT>app.poll_store('<STR_LIT>', notify=notify)<EOL><DEDENT>if settings['<STR_LIT>']:<EOL><INDENT>app.poll_store('<STR_LIT>', notify=notify)<EOL><DEDENT>if settings['<STR_LIT>']:<EOL><INDENT>port = int(settings['<STR_LIT>'])<EOL>logger.debug('<STR_LIT>' % port)<EOL>start_http_server(port)<EOL><DEDENT>if settings['<STR_LIT>']:<EOL><INDENT>loop.start()<EOL><DEDENT>
Notify about new reviews in AppStore and Google Play in slack.

       Launch command using supervisor or using screen/tmux/etc.
       Reviews are fetched for multiple apps and languages in --beat=300 interval.