123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- import csv
- import pywapi
- from datetime import datetime, date , timedelta
- from dateutil.relativedelta import relativedelta
- from dateutil.parser import parse
- from django import http
- from django.template.loader import get_template
- from django.template import Context
- import ho.pisa as pisa
- import cStringIO as StringIO
- import cgi
- from django.http import HttpResponse
- from django.template.context import RequestContext
- from django.views.generic import list_detail
- from django.shortcuts import render_to_response
- from almanac.models import Tide, TideDay, TideChart, Day, WeatherConditions, WeatherAlert, WeatherForecast
- from darkroom.models import Webcam
- from directory.models import Place, Point, Town
- def index(request):
- webcams=Webcam.objects.all()
- towns=Town.objects.filter(in_coverage=True)
- town_weather = []
- for t in towns:
- if t.slug == 'castine' or t.slug == 'stonington' or t.slug == 'blue-hill':
- town_weather.append(pywapi.get_weather_from_yahoo(t.zipcode, 'imperial'))
- if datetime.now().hour > 20 or datetime.now().hour < 4:
- moon="moon"
- else:
- moon=""
- return render_to_response('almanac/index.html', locals(),
- context_instance=RequestContext(request))
- def tide_index(request):
- charts=TideChart.objects.filter(public=True).order_by('-year')
- months=['jan','feb','mar','apr','may','jun','jul','sep','oct','nov','dec']
- return render_to_response('almanac/tide_index.html', locals(),
- context_instance=RequestContext(request))
- def tide_week_detail(request, slug, year, month, day):
- chart=TideChart.objects.get(place__slug=slug, year__exact=year)
- start_date=parse(str(year)+'-'+month+'-'+str(day))
- end_date=start_date+timedelta(days=3)
- first_day_set=TideDay.objects.filter(tide_chart__place__slug__exact=slug).exclude(
- day__date__gt=end_date).filter(
- day__date__gte=start_date)
-
- second_start_date=start_date+timedelta(days=4)
- second_end_date=second_start_date+timedelta(days=3)
- second_day_set=TideDay.objects.filter(tide_chart__place__slug__exact=slug).exclude(
- day__date__gt=second_end_date).filter(
- day__date__gte=second_start_date)
- return render_to_response('almanac/tide_week_detail.html', locals(),
- context_instance=RequestContext(request))
- def tide_month_detail(request, slug, year, month):
- chart=TideChart.objects.get(place__slug=slug, year__exact=year)
- days=TideDay.objects.filter(tide_chart__place__slug__exact=slug,
- day__date__year=year,
- day__date__month=parse(month).month)
- full_date=datetime(int(year), parse(month).month, 1)
- month = month.capitalize()
- today=date.today()
- return render_to_response('almanac/tide_month_detail.html', locals(),
- context_instance=RequestContext(request))
- def tide_year_detail(request, slug, year):
- astro_days=Day.objects.filter(chart__year__exact=year)
- chart=TideChart.objects.get(place__slug=slug, year__exact=year)
- return render_to_response('almanac/tide_year_detail.html', locals(),
- context_instance=RequestContext(request))
- def seasonal_guide(request, slug, year, month, day):
- today = datetime.today()
- chart = TideChart.objects.get(place__slug=slug, year__exact=year)
- start_date=parse(str(year)+'-'+month+'-'+str(day))
- end_date = start_date+relativedelta(months=+1, days=-1)
-
- days = TideDay.objects.filter(tide_chart__place__slug=slug).exclude(day__date__gt=end_date).filter(day__date__gte=start_date)
- n = len(days)/2
- first_day_set = days[0:n]
- second_day_set = days[n:]
- #end_date=start_date+timedelta(days=13)
- #first_day_set=TideDay.objects.filter(tide_chart__place__slug__exact=slug).exclude(
- # day__date__gt=end_date).filter(
- # day__date__gte=start_date)
-
- #second_start_date=start_date+timedelta(days=14)
- #second_end_date=second_start_date+timedelta(days=13)
- #second_day_set=TideDay.objects.filter(tide_chart__place__slug__exact=slug).exclude(
- # day__date__gt=second_end_date).filter(
- # day__date__gte=second_start_date)
- noon = datetime(today.year, today.month, today.day, 12, 0)
- return render_to_response('almanac/tide_seasonal_guide.html', locals(),
- context_instance=RequestContext(request))
- def weekly_dump(request, slug, year, month, day):
- response=HttpResponse(mimetype='text/csv')
- response['Content-Disposition'] = 'attachment; filename=tides.csv'
- chart=TideChart.objects.get(place__slug=slug, year__exact=year)
- start_date=parse(str(year)+'-'+month+'-'+str(day))
- end_date=start_date+timedelta(days=7)
- days=TideDay.objects.filter(tide_chart__place__slug=slug).exclude(day__date__gt=end_date).filter(day__date__gte=start_date)
-
- writer=csv.writer(response)
- for tday in days.all():
- day=tday.day
- tide1=tday.tide_1
- tide2=tday.tide_2
- tide3=tday.tide_3
- tide4=tday.tide_4
- if tide4:
- writer.writerow([tday.day.date, tide1, tide1.state, tide1.level, tide2, tide2.state, tide2.level, tide3, tide3.state, tide3.level, tide4, tide4.state, tide4.level, day.moonphase, day.moonphase_time, day.moonrise, day.moonset, day.sunrise, day.sunset])
- else:
- writer.writerow([tday.day.date, tide1, tide1.state, tide1.level, tide2, tide2.state, tide2.level, tide3, tide3.state, tide3.level, '', '','', day.moonphase, day.moonphase_time, day.moonrise, day.moonset, day.sunrise, day.sunset])
- return response
-
- def write_pdf(template_src, context_dict):
- template = get_template(template_src)
- context = Context(context_dict)
- html = template.render(context)
- result = StringIO.StringIO()
- pdf = pisa.pisaDocument(StringIO.StringIO(
- html.encode("UTF-8")), result)
- if not pdf.err:
- return http.HttpResponse(result.getvalue(), mimetype='application/pdf')
- return http.HttpResponse('Gremlin\'s ate your pdf! %s' % cgi.escape(html))
- def seasonal_guide_pdf(request, slug, year, month, day):
- today = datetime.today()
- chart = TideChart.objects.get(place__slug=slug, year__exact=year)
- start_date=parse(str(year)+'-'+month+'-'+str(day))
- end_date = start_date+relativedelta(months=+1, days=-1)
-
- days = TideDay.objects.filter(tide_chart__place__slug=slug).exclude(day__date__gt=end_date).filter(day__date__gte=start_date)
- n = len(days)/2
- first_day_set = days[0:n]
- second_day_set = days[n:]
-
- noon = datetime(today.year, today.month, today.day, 12, 0)
-
- return write_pdf('almanac/pdf/seasonal_guide.html',{
- 'pagesize' : 'letter',
- 'today' : today,
- 'noon' : noon,
- 'chart' : chart,
- 'days': days,
- 'first_day_set': first_day_set,
- 'second_day_set': second_day_set})
-
|