예제 #1
0
def tests() -> None:
    import pytest
    from magic import multiverse, oracle
    multiverse.init()
    oracle.init()
    code = pytest.main(sys.argv[2:])
    sys.exit(code)
예제 #2
0
def task(args: List[str]) -> None:
    module = args[1]
    if module == 'scraper':
        module = 'scrapers'
    if module == 'scrapers':
        module = 'decksite.scrapers'
    name = args.pop()
    from decksite.main import APP
    APP.config['SERVER_NAME'] = '127:0.0.1:5000'
    with APP.app_context():
        from magic import oracle, multiverse
        multiverse.init()
        if name != 'reprime_cache':
            oracle.init()
        if name == 'all':
            m = importlib.import_module('{module}'.format(module=module))
            # pylint: disable=unused-variable
            for importer, modname, ispkg in pkgutil.iter_modules(
                    m.__path__):  # type: ignore
                s = importlib.import_module('{module}.{name}'.format(
                    name=modname, module=module))
                if getattr(s, 'scrape', None) is not None:
                    s.scrape()  # type: ignore
                elif getattr(s, 'run', None) is not None:
                    s.run()  # type: ignore
        else:
            s = importlib.import_module('{module}.{name}'.format(
                name=name, module=module))
            if getattr(s, 'scrape', None) is not None:
                s.scrape()  # type: ignore
            elif getattr(s, 'run', None) is not None:
                s.run()  # type: ignore
            # Only when called directly, not in 'all'
            elif getattr(s, 'ad_hoc', None) is not None:
                s.ad_hoc()  # type: ignore
def run():
    multiverse.update_cache()
    oracle.init()
    ds = deck.load_decks()
    for d in ds:
        deck.prime_cache(d)
    return 'Done'
예제 #4
0
def runtests(argv: List[str], m: str, mark: bool) -> None:
    """
    Literally just prepare the DB and then invoke pytest.
    """
    args = argv.copy()
    if mark:
        if args and not args[0].startswith('-'):
            to_find = args.pop(0)
            args.extend(find_files(to_find, 'py'))
        args.extend(['-x', '-m', m])

    argstr = ' '.join(args)
    print(f'>>>> Running tests with "{argstr}"')
    # pylint: disable=import-outside-toplevel
    import pytest
    from magic import fetcher, multiverse, oracle
    multiverse.init()
    oracle.init()
    try:
        fetcher.sitemap()
    except fetcher.FetchException:
        print(f'Config was pointed at {fetcher.decksite_url()}, but it doesnt appear to be listening.')
        for k in ['decksite_hostname', 'decksite_port', 'decksite_protocol']:
            configuration.CONFIG[k] = configuration.DEFAULTS[k]

    code = pytest.main(args)
    if os.environ.get('TRAVIS') == 'true':
        upload_coverage()
    if code:
        raise TestFailedException(code)
예제 #5
0
def task(args: List[str]) -> None:
    module = args[1]
    if module == 'scraper':
        module = 'scrapers'
    if module == 'scrapers':
        module = 'decksite.scrapers'
    name = args.pop()
    from magic import oracle, multiverse
    multiverse.init()
    if name != 'reprime_cache':
        oracle.init()
    if name == 'all':
        run_all_tasks(module)
    else:
        s = importlib.import_module('{module}.{name}'.format(name=name,
                                                             module=module))
        if getattr(s, 'REQUIRES_APP_CONTEXT', True):
            from decksite.main import APP
            APP.config['SERVER_NAME'] = configuration.server_name()
            APP.app_context().__enter__(
            )  # Technically we should __exit__() at the end, but since we're terminating...
        if getattr(s, 'scrape', None) is not None:
            s.scrape()  # type: ignore
        elif getattr(s, 'run', None) is not None:
            s.run()  # type: ignore
        # Only when called directly, not in 'all'
        elif getattr(s, 'ad_hoc', None) is not None:
            s.ad_hoc()  # type: ignore
예제 #6
0
def run() -> None:
    multiverse.rebuild_cache()
    oracle.init()
    archetype.preaggregate()
    person.preaggregate()
    card.preaggregate()
    deck.preaggregate()
    season.preaggregate()
예제 #7
0
 async def update(self, channel: TextChannel, **_: Dict[str, Any]) -> None:
     """Forces an update to legal cards and bugs."""
     oracle.legal_cards(force=True)
     multiverse.update_bugged_cards()
     multiverse.update_cache()
     multiverse.reindex()
     oracle.init(force=True)
     await channel.send('Reloaded legal cards and bugs.')
예제 #8
0
def init() -> None:
    client = Bot()
    logging.info('Initializing Cards DB')
    multiverse.init()
    asyncio.ensure_future(multiverse.update_bugged_cards_async())
    oracle.init()
    logging.info('Connecting to Discord')
    client.run(configuration.get_str('token'))
예제 #9
0
async def update(ctx: MtgContext) -> None:
    """Forces an update to legal cards and bugs."""
    await ctx.send('Begun reloading legal cards and bugs.')
    multiverse.set_legal_cards()
    oracle.legal_cards(force=True)
    multiverse.update_bugged_cards()
    multiverse.rebuild_cache()
    multiverse.reindex()
    oracle.init(force=True)
    await ctx.send('Reloaded legal cards and bugs.')
예제 #10
0
def run():
    multiverse.update_cache()
    oracle.init()
    ds = deck.load_decks()
    for d in ds:
        redis.clear(f'decksite:deck:{d.id}')
        deck.prime_cache(d)
    archetype.preaggregate()
    card.preaggregate()
    deck.preaggregate_omw()
    return 'Done'
예제 #11
0
def tests(argv: List[str]) -> None:
    """
    Literally just prepare the DB and then invoke pytest.
    """
    import pytest
    from magic import multiverse, oracle
    multiverse.init()
    oracle.init()
    code = pytest.main(argv)
    if code:
        sys.exit(code)
def run() -> None:
    multiverse.update_cache()
    oracle.init()
    ds = deck.load_decks()
    for d in ds:
        redis.clear(f'decksite:deck:{d.id}')
        deck.prime_cache(d)
        redis.clear(f'decksite:deck:{d.id}')
    archetype.preaggregate()
    person.preaggregate()
    card.preaggregate()
    deck.preaggregate_omw()
    rule.cache_all_rules()
예제 #13
0
def run() -> None:
    multiverse.rebuild_cache()
    oracle.init()
    ds = deck.load_decks()
    for d in ds:
        redis.clear(f'decksite:deck:{d.id}')
        deck.prime_cache(d)
        redis.clear(f'decksite:deck:{d.id}')
    archetype.preaggregate()
    person.preaggregate()
    card.preaggregate()
    deck.preaggregate()
    season.preaggregate()
예제 #14
0
def task(args: List[str]) -> None:
    try:
        module = args[0]
        if module == 'scraper':
            module = 'scrapers'
        if module == 'scrapers':
            module = 'decksite.scrapers'
        name = args[1]
        from magic import multiverse, oracle
        multiverse.init()
        if name != 'reprime_cache':
            oracle.init()
        if name == 'all':
            run_all_tasks(module)
        elif name == 'hourly':
            run_all_tasks(module, 'HOURLY')
        else:
            s = importlib.import_module('{module}.{name}'.format(
                name=name, module=module))
            use_app_context = getattr(s, 'REQUIRES_APP_CONTEXT', True)
            if use_app_context:
                from decksite.main import APP
                APP.config['SERVER_NAME'] = configuration.server_name()
                app_context = APP.app_context()  # type: ignore
                app_context.__enter__()  # type: ignore
            if getattr(s, 'scrape', None) is not None:
                exitcode = s.scrape(*args[2:])  # type: ignore
            elif getattr(s, 'run', None) is not None:
                exitcode = s.run()  # type: ignore
            # Only when called directly, not in 'all'
            elif getattr(s, 'ad_hoc', None) is not None:
                exitcode = s.ad_hoc()  # type: ignore
            if use_app_context:
                app_context.__exit__(None, None, None)
            if exitcode is not None:
                sys.exit(exitcode)
    except Exception as c:
        from shared import repo
        repo.create_issue(f'Error running task {args}',
                          'CLI',
                          'CLI',
                          'PennyDreadfulMTG/perf-reports',
                          exception=c)
        raise
예제 #15
0
def test(argv: List[str], m: str) -> None:
    """
    Literally just prepare the DB and then invoke pytest.
    """
    print(f'>>>> Running tests with "{m}"')
    # pylint: disable=import-outside-toplevel
    import pytest
    from magic import multiverse, oracle
    multiverse.init()
    oracle.init()
    args = argv.copy()
    if args and not args[0].startswith('-'):
        to_find = args.pop(0)
        args.extend(find_files(to_find, 'py'))
    args.extend(['--cov-report=', '-x', '-m', m])
    code = pytest.main(args)
    if os.environ.get('TRAVIS') == 'true':
        upload_coverage()
    if code:
        raise TestFailedException(code)
예제 #16
0
def run():
    if len(sys.argv) == 0:
        print('No entry point specified.')
        sys.exit(1)

    if 'discordbot' in sys.argv:
        from discordbot import bot
        bot.init()
    elif 'decksite' in sys.argv:
        from decksite import main
        main.init()
    elif 'decksite-profiler' in sys.argv:
        from werkzeug.contrib.profiler import ProfilerMiddleware
        from decksite import main
        main.APP.config['PROFILE'] = True
        main.APP.wsgi_app = ProfilerMiddleware(main.APP.wsgi_app,
                                               restrictions=[30])
        main.init()
    elif 'price_grabber' in sys.argv:
        from price_grabber import price_grabber
        price_grabber.run()
    elif 'srv_price' in sys.argv:
        from price_grabber import srv_prices
        srv_prices.init()
    elif sys.argv[1] in ['scraper', 'scrapers', 'maintenance']:
        task(sys.argv)
    elif 'tests' in sys.argv:
        import pytest
        from magic import multiverse, oracle
        multiverse.init()
        oracle.init()
        sys.argv.remove('tests')
        code = pytest.main()
        sys.exit(code)
    else:
        print("You didn't tell me what to run or I don't recognize that name")
        sys.exit(1)
    sys.exit(0)
예제 #17
0
        item['current'] = item.get('endpoint', '').replace(
            'seasons',
            '').replace('.', '') == current_template or current_template in [
                entry.get('endpoint', '') for entry in item.get('submenu', [])
            ]
        item['has_submenu'] = item.get('submenu') is not None
    return menu


def setup_links(menu: List[Dict[str, Any]]) -> None:
    for item in menu:
        if item.get('endpoint'):
            item['url'] = url_for(item.get('endpoint', ''))
        item['is_external'] = cast(str, item.get('url', '')).startswith(
            'http') and '://pennydreadfulmagic.com/' not in item['url']
        setup_links(item.get('submenu', []))


try:
    oracle.init()
except DatabaseException as e:
    print(
        "Unable to initialize oracle. I'll build it now. If this is happening on user time this is bad.",
        e)
    multiverse.init()
    oracle.init()

from decksite.controllers import admin  # isort:skip # pylint: disable=wrong-import-position
from .data import deck  # isort:skip # pylint: disable=wrong-import-position
APP.config['menu'] = build_menu
예제 #18
0
def init() -> None:
    multiverse.init()
    oracle.init()
    SRV.run(port=5800, host='0.0.0.0')
예제 #19
0
def run() -> None:
    multiverse.init()
    oracle.init()
    fetch()
    price.cache()
예제 #20
0
 def init(self) -> None:
     multiverse.init()
     multiverse.update_bugged_cards()
     oracle.init()
     self.searcher = WhooshSearcher()
     self.client.run(configuration.get('token'))
예제 #21
0
 def init(self) -> None:
     multiverse.init()
     multiverse.update_bugged_cards()
     oracle.init()
     discordbot.commands.setup(self)
     self.run(configuration.get('token'))
예제 #22
0
def init() -> None:
    client = Bot()
    multiverse.init()
    asyncio.ensure_future(multiverse.update_bugged_cards_async())
    oracle.init()
    client.run(configuration.get_str('token'))
예제 #23
0
 def init(self) -> None:
     multiverse.init()
     multiverse.update_bugged_cards()
     oracle.init()
     self.run(configuration.get('token'))