Exemple #1
0
def get_player_info(player_tag: str, api_key: str):
    endpoint = "/players/%23" + player_tag
    # may do a little more with info
    info = make_request(endpoint, api_key)
    if "reason" in info:
        handle_error(info['reason'])
    return info
Exemple #2
0
def request(address, api, method, params={}, cookies={}):
    """Makes a request to the DiskStation API"""
    api_path = apis.get(api).get('path')

    url = f'http://{address}/webapi/{api_path}'
    params = urllib.parse.urlencode(
        {
            'api': apis.get(api).get('name'),
            'version': apis.get(api).get('version'),
            'method': method,
            **params
        },
        quote_via=urllib.parse.quote)

    try:
        response_obj = requests.get(url, params=params, cookies=cookies)

        try:
            response = response_obj.json()

            if not response['success']:
                error_code = response['error']['code']
                errors.handle_error(error_code, api)
                if api == 'auth':
                    errors.handle_auth_error(error_code)
                if api == 'dsTask':
                    errors.handle_ds_task_error(error_code)

            return response
        except json.decoder.JSONDecodeError:
            print('Invalid request URL')
            sys.exit()
    except requests.exceptions.ConnectionError:
        print('Could not connect to provided address')
        sys.exit()
Exemple #3
0
def create_service():
    if not os.path.exists('credentials.json'):
        handle_error('no_credentials')

    scopes = ['https://www.googleapis.com/auth/spreadsheets']
    creds = None

    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)

    try:
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file(
                    'credentials.json', scopes)
                creds = flow.run_local_server(port=0)

            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)

        service = build('sheets',
                        'v4',
                        cache_discovery=False,
                        credentials=creds)
        return service.spreadsheets()
    except HttpError as error:
        handle_error('sheets_api', val=error._get_reason())
Exemple #4
0
def get_clan_info(clan_tag: str, api_key: str):
    endpoint = "/clans/%23" + clan_tag
    info = make_request(endpoint, api_key)
    if "reason" in info:
        handle_error(info['reason'])
        print(info['reason'])
    return info
Exemple #5
0
def get_clan_currentwar(clan_tag: str, api_key: str):
    endpoint = "/clans/%23" + clan_tag + "/currentwar"
    info = make_request(endpoint, api_key)
    if "reason" in info:
        handle_error(info['reason'])
    if "err" in info:
        pass
    return info
Exemple #6
0
def write_to_cell(api, id, cell, val):
    try:
        api.values().update(spreadsheetId=id,
                            range=cell,
                            valueInputOption='RAW',
                            body={'values': [[val]]}).execute()
    except HttpError as error:
        handle_error('sheets_api', val=error._get_reason())
Exemple #7
0
def cells_from_sheet_ranges(ranges: str):
    for r in ranges:
        m = validate_sheet_range(r)
        if m.group('col1') == m.group('col2'):
            if m.group('row2'):
                for i in range(int(m.group('row1')), int(m.group('row2')) + 1):
                    yield f'{m.group("sheet")}!{m.group("col1")}{i}'
            else:
                yield r
        else:
            handle_error('range', val=r)
def init_scenario_data_kovaaks(
        config: dict, sheet_api: googleapiclient.discovery.Resource) -> dict:
    hs_cells_iter = cells_from_sheet_ranges(config['highscore_ranges'])
    if config["calculate_averages"]:
        avg_cells_iter = cells_from_sheet_ranges(config['average_ranges'])

    scens = {}

    i = 0
    for r in config['scenario_name_ranges']:
        for s in read_sheet_range(sheet_api, config["sheet_id_kovaaks"], r):
            if s not in scens:
                scens[s] = Scenario()

            scens[s].hs_cells.append(next(hs_cells_iter))
            if config["calculate_averages"]:
                try:
                    scens[s].avg_cells.append(next(avg_cells_iter))
                except AttributeError as err:
                    handle_error("averages")
            scens[s].ids.append(i)
            i += 1

    highscores = []
    for r in config['highscore_ranges']:
        highscores += map(
            lambda x: float(x),
            read_sheet_range(sheet_api, config["sheet_id_kovaaks"], r))

    if config["calculate_averages"]:
        averages = []
        for r in config['average_ranges']:
            averages += map(
                lambda x: float(x),
                read_sheet_range(sheet_api, config["sheet_id_kovaaks"], r))

    if len(highscores) < len(
            scens):  # Require highscore cells but not averages
        handle_error('range_size')

    for s in scens:
        scens[s].hs = min([highscores[i] for i in scens[s].ids])
        if config["calculate_averages"]:
            scens[s].avg = min([averages[i] for i in scens[s].ids])

    return scens
Exemple #9
0
def read_sheet_range(api, id, sheet_range):
    try:
        response = (api.values().get(spreadsheetId=id,
                                     range=sheet_range).execute().get(
                                         'values', [['0']]))

        # responses trim blank cells, act as if they are 0-filled
        m = validate_sheet_range(sheet_range)
        length = int(m.group('row2')) - int(m.group('row1')) + 1
        for lst in response:
            if len(lst) < 1:
                lst.append('0')
        flat = [val.strip().lower() for row in response for val in row]
        while len(flat) < length:
            flat.append('0')

        return flat

    except HttpError as error:
        handle_error('sheets_api', val=error._get_reason())
Exemple #10
0
    if len(sys.argv) > 1:
        config_file = sys.argv[1]
    if not os.path.isfile(config_file):
        logging.error("Failed to find config file: %s", config_file)
        sys.exit(1)

    config = json.load(open(config_file, 'r'))
    gui = Gui(**config)
    gui.main()

    try:
        config = json.load(open(config_file, 'r'))
        logging.debug(json.dumps(config, indent=2))
    except Exception as err:
        logging.debug(json.dumps(config, indent=2))
        handle_error('no_credentials')

    logging.debug("Creating service...")
    sheet_api = create_service()

    logging.debug("Initializing version blacklist...")
    blacklist = init_version_blacklist()

    logging.debug("Initializing scenario data...")
    scenarios = init_scenario_data(config, sheet_api)
    stats = list(sorted(os.listdir(config['stats_path'])))

    update(config, scenarios, stats, blacklist)
    if config['run_mode'] == 'once':
        logging.info("Finished Updating, program will close in 3 seconds...")
        time.sleep(3)
Exemple #11
0
def get_locations(api_key):
    endpoint = "/locations"
    info = make_request(endpoint, api_key)
    if "reason" in info:
        handle_error(info['reason'])
    return info
Exemple #12
0
def get_tournament_info(tournament_tag, api_key):
    endpoint = "/tournaments/%23" + tournament_tag
    info = make_request(endpoint, api_key)
    if "reason" in info:
        handle_error(info['reason'])
    return info
Exemple #13
0
def get_player_battlelog(player_tag, api_key):
    endpoint = "/players/%23" + player_tag + "/battlelog"
    info = make_request(endpoint, api_key)
    if "reason" in info:
        handle_error(info['reason'])
    return info
Exemple #14
0
def get_player_upcomingchests(player_tag: str, api_key: str):
    endpoint = "/players/%23" + player_tag + "/upcomingchests"
    info = make_request(endpoint, api_key)
    if "reason" in info:
        handle_error(info['reason'])
    return info
Exemple #15
0
def get_clan_warlog(clan_tag, api_key):
    endpoint = "/clans/%23" + clan_tag + "/warlog"
    info = make_request(endpoint, api_key)
    if "reason" in info:
        handle_error(info['reason'])
    return info
Exemple #16
0
def get_cards(api_key):
    info = make_request("/cards", api_key)
    if "reason" in info:
        handle_error(info['reason'])
    return info