def __generate_token(self): payload = { 'iat': datetime.utcnow(), 'exp': datetime.utcnow() + timedelta(minutes=5), 'iss': settings.GITHUB_APP_KEY, } return jwt.encode(payload, settings.GITHUB_APP_SECRET, algorithm='RS256')
def org_update(request, id): org = get_object_or_404(Orgs, id=id) if request.user.is_authenticated and request.user.is_superuser: if request.method == 'POST': form = NewOrgForm(request.POST or None, instance=org) if form.is_valid(): inst = form.save(commit=False) inst.updated_at = datetime.utcnow() inst.save() messages.success( request, 'The organisation has been updated succesfuly') return redirect(org) else: messages.error(request, 'The form is not valide') else: form = NewOrgForm(instance=org) else: messages.error(request, "You Don't have the permissions for this page") return redirect('home') context = { 'org': org, 'form': form, } return render(request, 'map_app/org/org_update.html', context)
def finance_perso_detail(request, pk): perso = get_object_or_404(PersFundingOpp, id=pk) persos = PersFundingOpp.objects.filter( publish=True).order_by('-created_at') share_string = quote_plus(perso.funding_description) if request.method == 'POST': form = PersoFundConfirmForm(request.POST or None, instance=perso) if form.is_valid(): at = form.save(commit=False) at.published_at = datetime.utcnow() at.save() messages.success(request, _('لقد تم تغيير حالة فرصة التمويل بنجاح')) return redirect(perso) else: form = PersoFundConfirmForm(instance=perso) context = { 'perso': perso, 'persos': persos, 'form': form, 'share_string': share_string, } return render(request, 'orgs/funding_opport/pers/detail.html', context)
def generate_access_token(pem_id_key, iss='atmosphere', scope='groups search', sub=None): if not pem_id_key: raise Exception("Private key missing. " "Key is required for JWT signature") # 1. Create and encode JWT (using our pem key) kwargs = {'iss': iss, 'scope': scope} if sub: kwargs['sub'] = sub jwt_object = jwt.create(**kwargs) encoded_sig = jwt.encode(jwt_object, pem_id_key) # 2. Pass JWT to gables and return access_token # If theres a 'redirect_uri' then redirect the user response = requests\ .post("%s/o/oauth2/token" % secrets.GROUPY_SERVER, data={ 'assertion': encoded_sig, 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer' }) if response.status_code != 200: raise Exception("Failed to generate auth token. Response:%s" % response.__dict__) json_obj = response.json() access_token, expires_in = json_obj['access_token'], json_obj['expires_in'] expires = datetime.utcnow() + timedelta(seconds=expires_in) return access_token, expires
def UserEditView(request): user = request.user if request.method == 'POST': form = EditProfileForm(request.POST or None, instance=user) form_profile = ProfileUpdateForm(request.POST or None, request.FILES or None, instance=user.profile) if form.is_valid() and form_profile.is_valid(): form.save() pic = form_profile.save(commit=False) pic.updated_at = datetime.utcnow() pic.save() messages.success( request, ('you have been updated your profile in successfuly')) return redirect('home') else: form = EditProfileForm(instance=user) form_profile = ProfileUpdateForm(instance=user.profile) context = { 'form': form, 'form_profile': form_profile, } return render(request, 'registration/edit_profile.html', context)
def dev_edit(request, devs_id): devs = get_object_or_404(DevOrgOpp, id=devs_id) if request.method == 'POST': form = DevForm(request.POST or None, files=request.FILES, instance=devs) if form.is_valid(): org_name = form.cleaned_data.get('org_name') name_dev = form.cleaned_data.get('name_devv') inst = form.save(commit=False) if org_name or name_dev: inst.updated_at = datetime.utcnow() inst.save() messages.success(request, _( 'لقد تم تعديل دليل التطوير بنجاح')) return redirect(devs) else: messages.error(request, _( 'رجاءً أدخل اسم المنظمة او اسم الجهة المانحة')) else: form = DevForm(instance=devs) context = { 'devs': devs, 'form': form, } return render(request, 'orgs/devs/org_edit_dev.html', context)
def research_detail(request, research_id): research = get_object_or_404(OrgResearch, id=research_id) researchs = OrgResearch.objects.filter( publish=True).order_by('-created_at') share_string = quote_plus(research.title) if request.method == 'POST': form = ResearchConfirmForm(request.POST or None, files=request.FILES, instance=research) if form.is_valid(): at = form.save(commit=False) at.published_at = datetime.utcnow() at.save() messages.success(request, _( 'لقد تم تعديل حالة البحث بنجاح')) return redirect(research) else: form = ResearchConfirmForm(instance=research) context = { 'research': research, 'form': form, 'share_string': share_string, 'researchs': researchs, } return render(request, 'orgs/research/detail_research.html', context)
def media_detail(request, media_id): media = get_object_or_404(OrgMedia, id=media_id) share_string = quote_plus(media.title) medias = OrgMedia.objects.filter(publish=True).order_by('-created_at') if request.method == 'POST': form = MediaConfirmForm(request.POST or None, files=request.FILES, instance=media) if form.is_valid(): at = form.save(commit=False) at.published_at = datetime.utcnow() at.save() messages.success(request, _( 'لقد تم تعديل حالة المحتوى بنجاح')) return redirect(media) else: form = MediaConfirmForm(instance=media) context = { 'media': media, 'form': form, 'share_string': share_string, 'medias': medias, } return render(request, 'orgs/media/media_detail.html', context)
def edit_media(request, media_id): media = get_object_or_404(OrgMedia, id=media_id) if request.method == 'POST': form = MediaForm(request.POST or None, files=request.FILES, instance=media) if form.is_valid(): at = form.save(commit=False) at.updated = datetime.utcnow() prof_user = OrgProfile.objects.filter(user=request.user) org_name = form.cleaned_data.get('org_name') if org_name: at.org_name = org_name else: at.org_name = prof_user.first() at.save() messages.success(request, _( 'لقد تم تعديل المحتوى بنجاح')) return redirect(media) else: form = MediaForm(instance=media) context = { 'media': media, 'form': form, } return render(request, 'orgs/media/edit_media.html', context)
def devs_detail(request, devs_id): dev = get_object_or_404(DevOrgOpp, id=devs_id) devs = DevOrgOpp.objects.filter(publish=True).order_by('-created_at') share_string = quote_plus(dev.dev_description) if request.method == 'POST': form = DevConfirmForm(request.POST or None, instance=dev) if form.is_valid(): at = form.save(commit=False) at.published_at = datetime.utcnow() at.save() messages.success(request, _( 'لقد تم تغيير حالة دليل تطوير بنجاح')) return redirect(dev) else: form = DevConfirmForm(instance=dev) context = { 'dev': dev, 'devs': devs, 'form': form, 'share_string': share_string, } return render(request, 'orgs/devs/org_dev_details.html', context)
def capacity_detail(request, capacity_id): capacity = get_object_or_404(OrgCapacityOpp, id=capacity_id) capacites = OrgCapacityOpp.objects.filter( publish=True).order_by('-created_at') share_string = quote_plus(capacity.capacity_description) if request.method == 'POST': form = CapacityConfirmForm(request.POST or None, instance=capacity) if form.is_valid(): at = form.save(commit=False) at.published_at = datetime.utcnow() at.save() messages.success(request, _( 'لقد تم تغيير حالة فرصة بناء القدرات بنجاح')) return redirect(capacity) else: form = CapacityConfirmForm(instance=capacity) context = { 'capacity': capacity, 'capacites': capacites, 'form': form, 'share_string': share_string, } return render(request, 'orgs/capacity/org_capacity_details.html', context)
def capacity_edit(request, capacity_id): capacity = get_object_or_404(OrgCapacityOpp, id=capacity_id) if request.method == 'POST': form = CapacityForm(request.POST or None, files=request.FILES, instance=capacity) if form.is_valid(): at = form.save(commit=False) at.updated_at = datetime.utcnow() # if capacity.publish == True: # at.publish = True at.save() messages.success(request, _( 'لقد تم تعديل فرصة بناء القدرات بنجاح')) return redirect(capacity) else: messages.error(request, 'the form is not valide') else: form = CapacityForm(instance=capacity) context = { 'capacity': capacity, 'form': form, } return render(request, 'orgs/capacity/org_edit_capacity.html', context)
def orgs_rapport_detail(request, rapport_id): rapport = get_object_or_404(OrgRapport, id=rapport_id) share_string = quote_plus(rapport.title) rapports = OrgRapport.objects.filter(publish=True).order_by('-created_at') if request.method == 'POST': form = RapportConfirmForm(request.POST or None, files=request.FILES, instance=rapport) if form.is_valid(): at = form.save(commit=False) at.published_at = datetime.utcnow() at.save() messages.success(request, _('لقد تم تعديل حالة التقرير بنجاح')) return redirect(rapport) else: form = RapportConfirmForm(instance=rapport) context = { 'rapport': rapport, 'form': form, 'share_string': share_string, 'rapports': rapports, } return render(request, 'orgs/rapport/detail_rapport.html', context)
def edit_rapport(request, rapport_id): rapport = get_object_or_404(OrgRapport, id=rapport_id) if request.method == 'POST': form = RapportForm(request.POST or None, files=request.FILES, instance=rapport) if form.is_valid(): user = form.save(commit=False) user.updated_at = datetime.utcnow() prof_user = OrgProfile.objects.filter(user=request.user) org_name = form.cleaned_data.get('org_name') if org_name: user.org_name = org_name else: user.org_name = prof_user.first() user.save() messages.success(request, _('لقد تمت تعديل التقرير بنجاح')) return redirect(rapport) else: form = RapportForm(instance=rapport) context = { "rapport": rapport, "form": form, } return render(request, 'orgs/rapport/edit_rapport.html', context)
def profile(request): if request.user.is_staff: return redirect("staff_admin:index") quizTakers = QuizTakers.objects.filter(user=request.user).all() past = [] current = [] upcoming = [] for quizTaker in quizTakers: if quizTaker.was_missed: past.append(quizTaker) continue if quizTaker.has_ended: past.append(quizTaker) continue if not quizTaker.quiz.has_started: upcoming.append(quizTaker) continue current.append(quizTaker) curDateTime = datetime.utcnow().replace(tzinfo=pytz.UTC) past.sort(key=lambda q: abs(curDateTime - q.quiz.start_date)) current.sort(key=lambda q: abs(curDateTime - q.quiz.start_date)) upcoming.sort(key=lambda q: abs(curDateTime - q.quiz.start_date)) context = { "past": past, "current": current, "upcoming": upcoming, } return render(request, "registration/profile.html", context)
def news_edit(request, news_id): new = get_object_or_404(OrgNews, id=news_id) if request.method == 'POST': form = NewsForm(request.POST or None, files=request.FILES, instance=new) if form.is_valid(): at = form.save(commit=False) at.updated_at = datetime.utcnow() prof_user = OrgProfile.objects.filter(user=request.user) org_name = form.cleaned_data.get('org_name') if org_name: at.org_name = org_name else: at.org_name = prof_user.first() at.save() messages.success(request, _('لقد تم تعديل الخبر بنجاح')) return redirect(new) else: form = NewsForm(instance=new) context = { 'new': new, 'form': form, } return render(request, 'orgs/news/org_edit_news.html', context)
def verify_sensor_id_unique(instance, *args, **kwargs): """ Checks that for a given sensor id only one instance is currently active :param instance: :param args: :param kwargs: :return: """ # verify that there is a room for this sensor id sensor_id = instance.sensor_id now = datetime.utcnow().replace(tzinfo=utc) mapping = SensorIdToSensorMapping.objects.filter( sensor_id=sensor_id, ).filter( Q(start_date__lte=now, end_date__gte=now) | Q(start_date__lte=now, end_date__isnull=True)).exclude( # exclude current id id=instance.id) if mapping.exists(): raise ValidationError({ "sensor_id": ValidationError( _("There is already an active record for the given sensor id")) })
def particip_detail(request, par_id): org = get_object_or_404(OrgProfile, id=par_id) if request.method == 'POST': form = OrgConfirmForm(request.POST or None, instance=org) if form.is_valid(): pub = form.save(commit=False) pub.published_at = datetime.utcnow() pub.save() messages.success(request, _('لقد تم تغيير حالة الطلب للمنظمة بنجاح')) # org_status = form.cleaned_data.get('publish') # if org_status == 'True': # messages.success(request, _( # 'لقد تم قبول طلب تسجيل المنظمة بنجاح')) # if org_status == 'False': # messages.info(request, _( # 'لقد تم رفض طلب تسجيل المنظمة بنجاح')) return redirect('guide') else: form = OrgConfirmForm(instance=org) context = { 'org': org, 'form': form, } return render(request, 'profiles/particip_detail.html', context)
def funding_detail(request, funding_id): funding = get_object_or_404(OrgFundingOpp, id=funding_id) fundings = OrgFundingOpp.objects.filter( publish=True).order_by('-created_at') share_string = quote_plus(funding.funding_org_description) if request.method == 'POST': form = FundingConfirmForm(request.POST or None, instance=funding) if form.is_valid(): at = form.save(commit=False) at.published_at = datetime.utcnow() at.save() messages.success(request, _('لقد تم تغيير حالة المنحة بنجاح')) return redirect(funding) else: form = FundingConfirmForm(instance=funding) context = { 'funding': funding, 'form': form, 'fundings': fundings, 'share_string': share_string, } return render(request, 'orgs/funding_opport/orgs/org_funding_details.html', context)
def generate_access_token(pem_id_key, iss='atmosphere', scope='groups search', sub=None): if not pem_id_key: raise Exception("Private key missing. " "Key is required for JWT signature") #1. Create and encode JWT (using our pem key) kwargs = {'iss': iss, 'scope': scope} if sub: kwargs['sub'] = sub jwt_object = jwt.create(**kwargs) encoded_sig = jwt.encode(jwt_object, pem_id_key) #2. Pass JWT to gables and return access_token #If theres a 'redirect_uri' then redirect the user response = requests\ .post("%s/o/oauth2/token" % secrets.GROUPY_SERVER, data={ 'assertion': encoded_sig, 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer' }) if response.status_code != 200: raise Exception("Failed to generate auth token. Response:%s" % response.__dict__) json_obj = response.json() access_token, expires_in = json_obj['access_token'], json_obj['expires_in'] expires = datetime.utcnow() + timedelta(seconds=expires_in) return access_token, expires
class Assignment(models.Model): title = models.CharField(max_length=300) description = models.TextField() date_added = models.DateTimeField(default=datetime.utcnow()) def __str__(self): return self.title
def generate_token(key, user): payload = { 'key': _hash_key(key), 'exp': datetime.utcnow() + timedelta(minutes=getattr(settings, 'JWT_VALIDITY_TIME', 60)), 'email': user.email, } return jwt.encode(payload, settings.JWT_SECRET, algorithm='HS256')
def test_outings(self): self.helper_template(reverse('outings.index'), 'outing/index.html') self.helper_template(reverse('outings.create'), 'outing/create.html') current_time = datetime.utcnow().replace(tzinfo=utc) outing = Outing.objects.create(user=self.user, beginning=current_time, ending=current_time, alert=current_time, latitude=1, longitude=1) self.helper_template(reverse('outings.update', args=[outing.pk]), 'outing/create.html')
def timedelta(value): if not value: return '' now = datetime.utcnow().replace(tzinfo=utc) if value > now: return _("in %s") % timesince(now, value) else: return timesince(value, now)
def register_reminder(**kwargs): issue = kwargs['issue'] remind_info = kwargs['remind_info'] author = kwargs['author'] scheduled = datetime.utcnow() + timedelta(**{remind_info[1]: remind_info[0]}) timedelta() Remind.objects.update_or_create(author=author, issue=issue, defaults={ 'scheduled': scheduled.astimezone(), 'is_reminded': False })
def weekly(request): fin_list = [] curr_year = datetime.utcnow().strftime("%Y") curr_mon = datetime.utcnow().strftime("%m") curr_day = datetime.utcnow().strftime("%A") curr_date1 = datetime.utcnow().strftime("%d") for t in range(int(curr_date1) - 7, int(curr_date1)): queryset = PeopleCount.objects.filter(in_time__year=curr_year).filter( in_time__month=curr_mon).filter(in_time__day=t) in_day_count_list = [q.in_count for q in queryset] in_day_count_summed = sum(in_day_count_list) fin_list.append(in_day_count_summed) print(fin_list) x = ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'] y = fin_list my_context = {"label": x, "dataval": y} return render(request, 'polls/weekly.html', my_context)
def get_access_token(user): """ Takes a user instance and return an access_token as a JsonResponse instance. """ app = Application.objects.get(name="Fabler") # We delete the old access_token and refresh_token try: old_access_token = AccessToken.objects.get( user=user, application=app) old_refresh_token = RefreshToken.objects.get( user=user, access_token=old_access_token ) except: try: old_access_tokens = AccessToken.objects.all().filter(user=user, application=app) old_refresh_tokens = RefreshToken.objects.all().filter(user=user, access_token=old_access_tokens) except: # Something's wrong if we get here pass else: old_access_tokens.delete() old_refresh_tokens.delete() else: timenow = datetime.utcnow().replace(tzinfo=pytz.utc) if timenow < old_access_token.expires: return get_token_json(old_access_token) old_access_token.delete() old_refresh_token.delete() # we generate an access token token = generate_token() # we generate a refresh token refresh_token = generate_token() expires = now() + timedelta(seconds=oauth2_settings.ACCESS_TOKEN_EXPIRE_SECONDS) scope = "read write" # we create the access token access_token = AccessToken.objects. \ create(user=user, application=app, expires=expires, token=token, scope=scope) # we create the refresh token RefreshToken.objects. \ create(user=user, application=app, token=refresh_token, access_token=access_token) # we call get_token_json and returns the access token as json return get_token_json(access_token)
def index(request): now = datetime.utcnow().replace(tzinfo=utc) outing_count = Outing.objects.count() outing_late_count = Outing.objects.filter(status=CONFIRMED, ending__lt=now).count() user_count = User.objects.count() return render(request, 'RandoAmisSecours/reporting/index.html', {'outing_count': outing_count, 'outing_late_count': outing_late_count, 'user_count': user_count})
def charts(request): # Filter the topic if requested topic_prefix = request.GET.get("topic", None) base_query = Message.objects.all() if topic_prefix is not None: base_query = Message.objects.filter(topic__startswith=topic_prefix) # Messages for the last day, hour-by-hour now = datetime.utcnow().replace(tzinfo=utc) messages_by_hours = [] now_hours = datetime(now.year, now.month, now.day, now.hour, tzinfo=utc) for hour in range(23, 0, -1): dt_begin = now_hours - timedelta(hours=hour) dt_end = now_hours - timedelta(hours=(hour - 1)) count = base_query.filter(datetime__range=(dt_begin, dt_end)).count() messages_by_hours.append(("%dh" % dt_begin.hour, count)) # Get the last interval (now_hours to now) count = base_query.filter(datetime__range=(now_hours, now)).count() messages_by_hours.append(('now', count)) # Messages for the last month, day-by-day now = datetime.utcnow().replace(tzinfo=utc) messages_by_days = [] now_days = datetime(now.year, now.month, now.day, tzinfo=utc) for day in range(30, 0, -1): dt_begin = now_days - timedelta(days=day) dt_end = now_days - timedelta(days=(day - 1)) count = base_query.filter(datetime__range=(dt_begin, dt_end)).count() messages_by_days.append((dt_begin.strftime('%b %d'), count)) count = base_query.filter(datetime__range=(now_days, now)).count() messages_by_days.append(('today', count)) # List of topics topics = base_query.filter(datetime__gt=(now - timedelta(days=30))) topics = topics.values('topic').annotate(count=Count('topic')) topics = topics.order_by('topic') return render(request, "ReactOWeb/charts.html", {"messages_by_hours": messages_by_hours, "messages_by_days": messages_by_days, "topics": topics})
def auto_set_assigned_sensor_based_on_mapping(instance, sender, raw, *args, **kwargs): """ For each class that inherits from AbstractDataEntry we need to set the real_sensor based on the sensor id mapping :param instance: :param sender: :param args: :param kwargs: :return: """ if raw: return from tempBerry.smarthome.models import AbstractDataEntry if not isinstance(instance, AbstractDataEntry): # not a subclass of AbstractDataEntry - ignore it return if instance.real_sensor_id: # real sensor id is already set - no need to continue here return # verify that there is a mapping for this sensor id for the current time sensor_id = instance.sensor_id now = datetime.utcnow().replace(tzinfo=utc) # try to get a real_sensor for the given sensor id, where start_date <= now() <= end_date mapping = SensorIdToSensorMapping.objects.filter( sensor_id=sensor_id, ).filter( Q(start_date__lte=now, end_date__gte=now) | Q(start_date__lte=now, end_date__isnull=True)) if len(mapping) == 1: # perfect match mapping = mapping.first() # set instances real sensor id based on the mapping instance.real_sensor_id = mapping.real_sensor_id instance.room_id = mapping.real_sensor.room_id # no need to call .save() here, as we are still within the pre_save phase elif len(mapping) > 1: # multiple matches, this is not good logger.error( "Found multiple sensor id mappings for sensor id {}".format( sensor_id)) return else: # len = 0 # no match, doesnt matter -> this is either false sensor data or something else went wrong pass
def daily(request): fin_list = [] curr_year = datetime.utcnow().strftime("%Y") curr_mon = datetime.utcnow().strftime("%m") curr_date1 = datetime.utcnow().strftime("%d") curr_date = datetime.utcnow().strftime("%Y%m%d") curr_day = datetime.utcnow() curr_day2 = datetime.utcnow().strftime("%A") print(curr_date, curr_year, curr_mon, curr_date1, curr_day, curr_day2) for t in range(10, 22): queryset = PeopleCount.objects.filter(in_time__year=curr_year).filter( in_time__month=curr_mon).filter(in_time__day=curr_date1).filter( in_time__hour=t) in_count_hourly_list = [q.in_count for q in queryset] in_count_summed = sum(in_count_hourly_list) fin_list.append(in_count_summed) x = [ '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00' ] y = fin_list my_context = {"label": x, "dataval": y} return render(request, 'polls/chart.html', my_context)
def index(request): now = datetime.utcnow().replace(tzinfo=utc) outing_count = Outing.objects.count() outing_late_count = Outing.objects.filter(status=CONFIRMED, ending__lt=now).count() user_count = User.objects.count() return render( request, 'RandoAmisSecours/reporting/index.html', { 'outing_count': outing_count, 'outing_late_count': outing_late_count, 'user_count': user_count })
def setUp(self): self.client = Client() self.user = User.objects.create_user('azertyuiop', '*****@*****.**', '12789azertyuiop') self.user.profile = Profile.objects.create(user=self.user, timezone='Europe/Paris', language='fr') self.user2 = User.objects.create_user('zarterzh', '*****@*****.**', 'help') self.user2.profile = Profile.objects.create(user=self.user2, timezone='Europe/London', language='en') current_time = datetime.utcnow().replace(tzinfo=utc) self.outing = Outing.objects.create(user=self.user, beginning=current_time, ending=current_time, alert=current_time, latitude=1, longitude=1)
def getPercents(self): current_time = datetime.utcnow().replace(tzinfo=utc) # now < begin < end < alert if current_time < self.beginning: return (0, 0, 0) # begin < end < alert < now elif self.alert < current_time: return (0, 0, 100) # begin < now < end < alert elif current_time < self.ending: return (((current_time - self.beginning).total_seconds()) / float((self.alert - self.beginning).total_seconds()) * 100, 0, 0) # begin < end < now < alert else: assert(current_time < self.alert) return (((self.ending - self.beginning).total_seconds()) / float((self.alert - self.beginning).total_seconds()) * 100, ((current_time - self.ending).total_seconds()) / float((self.alert - self.beginning).total_seconds()) * 100, 0)
def authenticate_token(self, request): try: token = Token.objects.get(key=request.POST['token']) except Token.DoesNotExist: return Response({"message": "Invalid token"}, status=400) if not token.user.is_active: return Response({"message": "User inactive"}, status=404) # This is required for the time comparison utc_now = datetime.utcnow() utc_now = utc_now.replace(tzinfo=utc) if token.created < utc_now - timedelta(days=7): return Response({"message": "Token expired"}, status=402) return Response({"message": "success"}, status=200)
def test_outings(self): self.helper_template(reverse('outings.index'), 'outing/index.html') self.helper_template(reverse('outings.create'), 'outing/create.html') current_time = datetime.utcnow().replace(tzinfo=utc) outing = Outing.objects.create(user=self.user, beginning=current_time, ending=current_time, alert=current_time, latitude=1, longitude=1) self.helper_template(reverse('outings.update', args=[outing.pk]), 'outing/create.html') self.helper_template(reverse('outings.details', args=[outing.pk]), 'outing/details.html') self.helper_template( reverse('outings.details.trace', args=[outing.pk]), 'outing/details_trace.html')
def clean_old_files(self, purge, override_ttl=None): """ Remove old artifacts by comparing to the TTL When purge is True, remove also permanent artifacts """ # Use the TTL passed as argument if not empty ttl = override_ttl if override_ttl is not None else self.ttl ttl = max(ttl, 0) # A negative TTL mean that we should not remove old files # Except when purge is True (we will remove everything) if ttl == 0 and not purge: return now = datetime.utcnow().replace(tzinfo=utc) older_than = now - timedelta(days=ttl) query = self.artifact_set.filter(created_at__lt=older_than) # Also remove permanent artifacts if not purge: query = query.exclude(is_permanent=True) query.delete()
def parse_date(grej, typ): grej = unicode(grej) tz = timezone(get_config('TIME_ZONE', None)) hoj = datetime.utcnow().replace(tzinfo=tz) if grej.find('dag') != -1: days = numerics(grej) if typ == '+': ret = hoj + timedelta(days=days) else: ret = hoj - timedelta(days=days) elif grej.find('tim') != -1: hours = numerics(grej) if typ == '+': ret = hoj + timedelta(hours=hours) else: ret = hoj - timedelta(hours=hours) else: return hoj return ret
def handle(self, *args, **kwargs): if kwargs.get('base_url', None) is None: raise CommandError('url option is required') self.stdout.write("Listing alerting outings") self.stdout.write("Interval %d" % (kwargs['interval'])) now = datetime.utcnow().replace(tzinfo=utc) outings = Outing.objects.filter(status=CONFIRMED, ending__lt=now) for outing in outings: self.stdout.write(" - %s" % (outing.name)) # Late outings if outing.ending <= now and now < outing.alert: minutes = (now - outing.alert).seconds / 60.0 minutes = minutes % kwargs['alert'] if 0 <= minutes and minutes < kwargs['interval']: self.stdout.write("Sending mail to owner") # send a mail to the user, translated into the right language send_localized_mail(outing.user, _('[R.A.S] Alert'), 'RandoAmisSecours/alert/late.html', {'URL': "%s%s" % (kwargs['base_url'], reverse('outings.details', args=[outing.pk])), 'SAFE_URL': "%s%s" % (kwargs['base_url'], reverse('outings.finish', args=[outing.pk]))}) # Alerting outings elif outing.alert <= now: minutes = (now - outing.alert).seconds / 60.0 minutes = minutes % kwargs['alert'] self.stdout.write(" minutes: %d" % (minutes)) if 0 <= minutes and minutes < kwargs['interval']: self.stdout.write("emailing friends") # Send on mail per user translated into the right language for friend_profile in outing.user.profile.friends.all(): send_localized_mail(friend_profile.user, _('[R.A.S] Alert'), 'RandoAmisSecours/alert/alert.html', {'fullname': outing.user.get_full_name(), 'URL': "%s%s" % (kwargs['base_url'], reverse('outings.details', args=[outing.pk])), 'name': outing.name, 'ending': outing.ending})
def users(request): now = datetime.utcnow().replace(tzinfo=utc) # Joining and last login dates users_list = User.objects.all() joining_dates = [0] * 366 last_logins = [0] * 366 for user in users_list: days_delta = (now - user.date_joined).days if days_delta <= 365: joining_dates[365 - days_delta] += 1 days_delta = (now - user.last_login).days if days_delta <= 365: last_logins[365 - days_delta] += 1 # Active sessions all_sessions = Session.objects.all() sessions_list = [0] * 366 for session in all_sessions: end = (now - session.expire_date).days begin = int(end + settings.SESSION_COOKIE_AGE / 86400) # If begin after today (error) if begin < 0: continue # Crop to 365 if end <= 0: end = 0 for day in range(end, begin + 1): if day <= 365: sessions_list[365 - day] += 1 return render_to_response('RandoAmisSecours/reporting/users.html', {'joining_dates': joining_dates, 'last_logins': last_logins, 'sessions': sessions_list}, context_instance=RequestContext(request))
def outings_late(request): now = datetime.utcnow().replace(tzinfo=utc) late_outings = Outing.objects.filter(status=CONFIRMED, ending__lt=now) return render(request, 'RandoAmisSecours/reporting/outings_late.html', {'late_outings': late_outings})
def not_late(self, outing): now = datetime.utcnow().replace(tzinfo=utc) return not outing.ending <= now
def get_expiration_date(self): expiration_date = datetime.utcnow() + self.expires return expiration_date.strftime('%Y-%m-%dT%H:%M:%S.000Z')
def outings_late(request): now = datetime.utcnow().replace(tzinfo=utc) late_outings = Outing.objects.filter(status=CONFIRMED, ending__lt=now) return render_to_response('RandoAmisSecours/reporting/outings_late.html', {'late_outings': late_outings}, context_instance=RequestContext(request))
def is_running(self): """ Return True if beginning <= now < end """ now = datetime.utcnow().replace(tzinfo=utc) return self.beginning <= now and now < self.ending
def _get_current_date_utc(): return datetime.utcnow().replace(tzinfo=pytz.utc)
def is_late(self): """ Return True if end <= now < alert """ now = datetime.utcnow().replace(tzinfo=utc) return self.ending <= now and now < self.alert
def is_alerting(self): """ Return True if alert <= now """ now = datetime.utcnow().replace(tzinfo=utc) return self.alert <= now
def get_grb_sample(request): parameters = [] year = timedelta(days=365) week = timedelta(days=7) day = timedelta(days=1) cur_time = datetime.utcnow() #cur_time = cur_time.replace(year=cur_time.year, month=cur_time.month, day=cur_time.day, hour=cur_time.hour, minute=cur_time.minute, second=cur_time.second, microsecond=0, tzinfo=utc) #default_date = cur_time - week cur_time = cur_time.replace(year=cur_time.year, month=cur_time.month, day=cur_time.day, hour=0, minute=0, second=0, microsecond=0, tzinfo=utc) default_date = cur_time - (week * 48) num_cuts = request.GET.get('num_cuts', 0) parameters.append(num_cuts) no_date_cut = request.GET.get('no_date_cut', 'False') parameters.append(no_date_cut) x_year_min = int(request.GET.get('x_year_min', default_date.year)) parameters.append(x_year_min) x_month_min = int(request.GET.get('x_month_min', default_date.month)) parameters.append(x_month_min) x_day_min = int(request.GET.get('x_day_min', default_date.day)) parameters.append(x_day_min) x_hour_min = int(request.GET.get('x_hour_min', default_date.hour)) parameters.append(x_hour_min) x_min_min = int(request.GET.get('x_min_min', default_date.minute)) parameters.append(x_min_min) x_sec_min = int(request.GET.get('x_sec_min', default_date.second)) parameters.append(x_sec_min) x_year_max = int(request.GET.get('x_year_max', cur_time.year)) parameters.append(x_year_max) x_month_max = int(request.GET.get('x_month_max', cur_time.month)) parameters.append(x_month_max) x_day_max = int(request.GET.get('x_day_max', cur_time.day)) parameters.append(x_day_max) x_hour_max = int(request.GET.get('x_hour_max', cur_time.hour)) parameters.append(x_hour_max) x_min_max = int(request.GET.get('x_min_max', cur_time.minute)) parameters.append(x_min_max) x_sec_max = int(request.GET.get('x_sec_max', cur_time.second)) parameters.append(x_sec_max) x_min = datetime.utcnow() x_max = datetime.utcnow() if no_date_cut == 'True': x_year_min = 1900 x_year_max = 2100 x_min = x_min.replace(year=x_year_min, month=x_month_min, day=x_day_min, hour=x_hour_min, minute=x_min_min, second=x_sec_min, microsecond=0, tzinfo=utc) x_max = x_max.replace(year=x_year_max, month=x_month_max, day=x_day_max, hour=x_hour_max, minute=x_min_max, second=x_sec_max, microsecond=0, tzinfo=utc) data_file = open(grb_data_file, 'rb') grb_data_table = cPickle.load(data_file) data_file.close() #for item in grb_data_table: # print item # import ipdb; ipdb.set_trace() # debugging code #import ipdb; ipdb.set_trace() # debugging code #print grb_data_table #grb_table_data = measurement.objects.all().order_by('grb_name') #grb_table = measurement.objects.filter(date__range = (x_min, x_max)).order_by('grb_name') sortdownStr = str(request.GET.get('sort_down', 'GRB Date')) if sortdownStr=='GRB': sortdownStr = 'GRB Date' command_str = "grb_data_table = sorted(grb_data_table, key=lambda grb_data_table:grb_data_table['" + sortdownStr + "'], reverse=True)" exec command_str sortupStr = str(request.GET.get('sort_up', '')) if sortupStr=='GRB': sortupStr = 'GRB Date' if len(sortupStr) > 0: command_str = "grb_data_table = sorted(grb_data_table, key=lambda grb_data_table:grb_data_table['" + sortupStr + "'])" exec command_str #grb_data_table = sorted(grb_data_table, key=lambda grb_data_table:grb_data_table['GRB Date'], reverse=True) # make the date cut on the GRB data grb_table = [] for item in grb_data_table: grb_date = item['GRB Date'] if (grb_date >= x_min) and (grb_date <= x_max): grb_table.append(item) #print len(grb_table) #import ipdb; ipdb.set_trace() # debugging code # setup various cuts specified by the user cut_array = [] for i in range(0, int(num_cuts), 1): cut_row = [] cut_row.append(str('cut_')+str(i)+'_min') cut_row.append(str('cut_')+str(i)) cut_row.append(str('cut_')+str(i)+'_max') #cut_row.append('') # cut min value (index - 3) #cut_row.append('') # cut max value (index - 4) #cut_row.append('') # cut variable (index - 5) commnd_str = "cut_row.append(request.GET.get('cut_" + str(i) + "_min' , '0'))" # cut min value (index - 3) exec commnd_str commnd_str = "cut_row.append(request.GET.get('cut_" + str(i) + "_max' , '2'))" # cut max value (index - 4) exec commnd_str commnd_str = "cut_row.append(request.GET.get('cut_" + str(i) + "' , r'BAT T90'))" # cut variable (index - 5) exec commnd_str cut_array.append(cut_row) parameters.append(cut_array) # make various cuts as specified by the user selected_grb_set = grb_table if num_cuts > 0: for cut_item in cut_array: grb_sub_set = [] cut_value_min = float(cut_item[3]) cut_value_max = float(cut_item[4]) cut_measurement_type = str(cut_item[5]) for mitem in selected_grb_set: #import ipdb; ipdb.set_trace() # debugging code if (mitem[cut_measurement_type] <= cut_value_max) and (mitem[cut_measurement_type] >= cut_value_min): grb_sub_set.append(mitem) selected_grb_set = grb_sub_set #import ipdb; ipdb.set_trace() # debugging code #print "Selected GRBs = ", len(selected_grb_set) #import ipdb; ipdb.set_trace() # debugging code return selected_grb_set, parameters
def handle(self, *args, **kwargs): if kwargs.get('base_url', None) is None: raise CommandError('url option is required') logger.info("Running Alert script") now = datetime.utcnow().replace(tzinfo=utc) # Transform all DRAFT into CONFIRMED if the beginning is over logger.debug('Transforming DRAFTs') outings = Outing.objects.filter(status=DRAFT, beginning__lt=now) for outing in outings: logger.info("Confirm: '%s' (owner: '%s')", outing.name, outing.user.get_full_name()) outing.status = CONFIRMED outing.save() # Grab all late outings logger.debug('Alerting owner and friends') outings = Outing.objects.filter(status=CONFIRMED, ending__lt=now) for outing in outings: logger.debug("Inspecting: '%s' (owner: '%s')", outing.name, outing.user.get_full_name()) # Late outings if outing.ending <= now and now < outing.alert: logger.debug(' |-> Late') minutes = (now - outing.ending).seconds / 60.0 minutes = minutes % kwargs['alert'] if 0 <= minutes and minutes < kwargs['interval']: logger.debug(' |--> Alerting the owner') logger.debug(" |-> %s", outing.user.get_full_name()) logger.debug(" |--> email: %s", outing.user.email) logger.debug(" |--> provider: %s", outing.user.profile.provider) # send a mail to the user, translated into the right language with Localize(outing.user.profile.language, outing.user.profile.timezone): send_mail_help(outing.user, _('[R.A.S] Alert'), 'RandoAmisSecours/alert/late.html', {'URL': "%s%s" % (kwargs['base_url'], reverse('outings.details', args=[outing.pk])), 'SAFE_URL': "%s%s" % (kwargs['base_url'], reverse('outings.finish', args=[outing.pk]))}) send_sms(outing.user, 'RandoAmisSecours/alert/late.txt', {'name': outing.name}) # Alerting outings elif outing.alert <= now: logger.debug(' |-> Alert') minutes = (now - outing.alert).seconds / 60.0 minutes = minutes % kwargs['alert'] if 0 <= minutes and minutes < kwargs['interval']: logger.debug(' |--> Alerting now') friend_count = outing.user.profile.friends.count() logger.debug(" |---> %d friends to contact", friend_count) # Send on mail per user translated into the right language for friend_profile in outing.user.profile.friends.all(): logger.debug(" |-> %s", friend_profile.user.get_full_name()) logger.debug(" |--> email: %s", friend_profile.user.email) logger.debug(" \--> provider: %s", friend_profile.provider) with Localize(friend_profile.language, friend_profile.timezone): send_mail_help(friend_profile.user, _('[R.A.S] Alert'), 'RandoAmisSecours/alert/alert.html', {'fullname': outing.user.get_full_name(), 'URL': "%s%s" % (kwargs['base_url'], reverse('outings.details', args=[outing.pk])), 'name': outing.name, 'ending': outing.ending}) send_sms(friend_profile.user, 'RandoAmisSecours/alert/alert.txt', {'fullname': outing.user.get_full_name(), 'name': outing.name, 'ending': timesince(outing.ending)}) logger.debug(' |--> Alerting the owner') logger.debug(" |-> %s", outing.user.get_full_name()) logger.debug(" |--> email: %s", outing.user.email) logger.debug(" |--> provider: %s", outing.user.profile.provider) with Localize(outing.user.profile.language, outing.user.profile.timezone): send_mail_help(outing.user, _('[R.A.S] Alert'), 'RandoAmisSecours/alert/alert_owner.html', {'fullname': outing.user.get_full_name(), 'URL': "%s%s" % (kwargs['base_url'], reverse('outings.details', args=[outing.pk])), 'name': outing.name, 'ending': outing.ending, 'friend_count': friend_count}) send_sms(outing.user, 'RandoAmisSecours/alert/alert_owner.txt', {'name': outing.name, 'ending': timesince(outing.ending)}) logger.info("End of Alert script")
def not_running(self, outing): now = datetime.utcnow().replace(tzinfo=utc) return not outing.beginning <= now
def not_alerting(self, outing): now = datetime.utcnow().replace(tzinfo=utc) return not outing.alert <= now
def get_grb_sample1(request): parameters = [] year = timedelta(days=365) week = timedelta(days=7) day = timedelta(days=1) cur_time = datetime.utcnow() #cur_time = cur_time.replace(year=cur_time.year, month=cur_time.month, day=cur_time.day, hour=cur_time.hour, minute=cur_time.minute, second=cur_time.second, microsecond=0, tzinfo=utc) #default_date = cur_time - week cur_time = cur_time.replace(year=cur_time.year, month=cur_time.month, day=cur_time.day, hour=0, minute=0, second=0, microsecond=0, tzinfo=utc) default_date = cur_time - (week * 12) num_cuts = request.GET.get('num_cuts', 0) parameters.append(num_cuts) no_date_cut = request.GET.get('no_date_cut', 'False') parameters.append(no_date_cut) x_year_min = int(request.GET.get('x_year_min', default_date.year)) parameters.append(x_year_min) x_month_min = int(request.GET.get('x_month_min', default_date.month)) parameters.append(x_month_min) x_day_min = int(request.GET.get('x_day_min', default_date.day)) parameters.append(x_day_min) x_hour_min = int(request.GET.get('x_hour_min', default_date.hour)) parameters.append(x_hour_min) x_min_min = int(request.GET.get('x_min_min', default_date.minute)) parameters.append(x_min_min) x_sec_min = int(request.GET.get('x_sec_min', default_date.second)) parameters.append(x_sec_min) x_year_max = int(request.GET.get('x_year_max', cur_time.year)) parameters.append(x_year_max) x_month_max = int(request.GET.get('x_month_max', cur_time.month)) parameters.append(x_month_max) x_day_max = int(request.GET.get('x_day_max', cur_time.day)) parameters.append(x_day_max) x_hour_max = int(request.GET.get('x_hour_max', cur_time.hour)) parameters.append(x_hour_max) x_min_max = int(request.GET.get('x_min_max', cur_time.minute)) parameters.append(x_min_max) x_sec_max = int(request.GET.get('x_sec_max', cur_time.second)) parameters.append(x_sec_max) x_min = datetime.utcnow() x_max = datetime.utcnow() if no_date_cut == 'True': x_year_min = 1900 x_year_max = 2100 x_min = x_min.replace(year=x_year_min, month=x_month_min, day=x_day_min, hour=x_hour_min, minute=x_min_min, second=x_sec_min, microsecond=0, tzinfo=utc) x_max = x_max.replace(year=x_year_max, month=x_month_max, day=x_day_max, hour=x_hour_max, minute=x_min_max, second=x_sec_max, microsecond=0, tzinfo=utc) grb_set = [] grb_table = measurement.objects.filter(date__range = (x_min, x_max)).order_by('grb_name') for item in grb_table: grb_set.append(item.grb_name.grb_name) cut_array = [] for i in range(0, int(num_cuts), 1): cut_row = [] cut_row.append(str('cut_')+str(i)+'_min') cut_row.append(str('cut_')+str(i)) cut_row.append(str('cut_')+str(i)+'_max') #cut_row.append('') # cut min value (index - 3) #cut_row.append('') # cut max value (index - 4) #cut_row.append('') # cut variable (index - 5) commnd_str = "cut_row.append(request.GET.get('cut_" + str(i) + "_min' , '0'))" # cut min value (index - 3) exec commnd_str commnd_str = "cut_row.append(request.GET.get('cut_" + str(i) + "_max' , '2'))" # cut max value (index - 4) exec commnd_str commnd_str = "cut_row.append(request.GET.get('cut_" + str(i) + "' , r'BAT T90'))" # cut variable (index - 5) exec commnd_str cut_array.append(cut_row) parameters.append(cut_array) cut_set = [] if num_cuts > 0: for cut_item in cut_array: grb_sub_set = [] cut_value_min = float(cut_item[3]) cut_value_max = float(cut_item[4]) #import pdb; pdb.set_trace() # debugging code cut_measurement_type = measurement_type.objects.get(measurement_type_name=cut_item[5]) cut_measurement = measurement.objects.filter(measurement_type=cut_measurement_type, value__lte=cut_value_max, value__gte=cut_value_min) cut_set.append(cut_measurement_type.measurement_type_id) for item in cut_measurement: grb_sub_set.append(item.grb_name.grb_name) grb_set = get_set_intersection(grb_set, grb_sub_set) #import pdb; pdb.set_trace() # debugging code return grb_set, parameters