import base64 import json from urllib.request import Request, urlopen import logging logger = logging.getLogger('django') RECIPE_URL = 'https://api.brewfather.app/v2/recipes' BATCH_URL = 'https://api.brewfather.app/v2/batches' PULL_LIMIT = 50 BREWFATHER_CONVERT_LOOKUP = { # local_name: brewfather_name 'all': { 'name': 'name', 'unit_cost': 'costPerAmount', 'supplier': 'supplier', 'notes': 'notes', 'user_notes': 'userNotes', }, 'fermentable': { 'grain_category': 'grainCategory', 'fermentable_type': 'type', 'diastatic_power': 'diastaticPower', 'potential': 'potential', 'protein': 'protein', 'attenuation': 'attenuation', 'lovibond': 'lovibond', 'max_in_batch': 'maxInBatch', 'moisture': 'moisture', 'non_fermentable': 'notFermentable', 'ibu_per_unit': 'ibuPerAmount', }, 'hop': { 'ibu': 'ibu', 'use': 'use', 'hop_type': 'type', 'alpha': 'alpha', }, 'misc': { 'use': 'use', 'misc_type': 'type', 'water_adjustment': 'waterAdjustment', } } def bf_from_local(category, name): return BREWFATHER_CONVERT_LOOKUP[category][name] def local_from_bf(category, name): local_keys = list(BREWFATHER_CONVERT_LOOKUP[category].keys()) bf_keys = list(BREWFATHER_CONVERT_LOOKUP[category].values()) return local_keys[bf_keys.index(name)] def get_batches(api_user, api_key, batch=''): auth_string = api_user + ':' + api_key auth64 = base64.b64encode(auth_string.encode("utf-8")) if batch != '': lastbatch = '&start_after=' + batch else: lastbatch = '' qry_str = ('{batch_url}?limit={pull_limit}' '&complete=True&include=recipe,recipe.batchSize' '&status=Planning{last_batch}') query = qry_str.format( batch_url=BATCH_URL, pull_limit=PULL_LIMIT, last_batch=lastbatch ) req = Request(query) req.add_header('authorization', 'Basic ' + auth64.decode()) content = urlopen(req) data = json.load(content) if len(data) == PULL_LIMIT: last_id = data[-1]['_id'] data = data + get_batches(batch=last_id) return data