def retire(request): """Retire all beers currently available in our db and not saucer site""" if request.method == 'GET': saucer = Saucer() saucer_beers = saucer.get_all_beers() db_beers = Beer.objects.filter(avail=True) retired_beers = [] for db_beer in db_beers: found = False for saucer_beer in saucer_beers: if saucer_beer['name'] == db_beer.name and\ saucer_beer['type'] == db_beer.type: found = True break if not found: db_beer.avail = False db_beer.save() retired_beers.append(db_beer) template_values = {'retired': retired_beers} return render_to_response('retire.html', template_values)
def update(request, start=None, fetch=None): """Update DB with beers from saucer site starting with index (start) and update no more than (fetch) number of beers""" if request.method == 'GET': ids = [] ii = 0 added = 0 skip = 10 saucer = Saucer() all_beers = saucer.get_all_beers() num_beers = len(all_beers) if fetch is not None: num_beers = int(fetch) if start is not None: ii = int(start) # Don't skip by more than requested if num_beers < skip: skip = num_beers while added < num_beers: beers = all_beers[ii:ii + skip] for beer in beers: ids.append(beer['id']) details = saucer.get_beer_details(ids) num_details = len(details) if not num_details: break jj = 0 for det in details: _type = beers[jj]['type'] _name = beers[jj]['name'] # Maybe we don't find it try: curr_beer = Beer.objects.filter(type=_type, name=_name)[0] except IndexError: curr_beer = None # Beer already in db, but maybe it's newly available if curr_beer: if not curr_beer.avail: curr_beer.avail = True curr_beer.date = datetime.date.today() curr_beer.save() added += 1 else: b = Beer(name=_name, type=_type, avail=True, style=det['Style:'], descr=det['Description:']) b.save() added += 1 jj += 1 ii += skip ids = [] template_values = {'fetch': saucer.fetch, 'san': saucer.san, 'details': saucer.create_details, 'added': added, 'start': start, 'requested': fetch} return render_to_response('update.html', template_values)