def setUp(self):
        self.bond = BondFactory(
            cusip='FLEXBOND0',
            face = 10000000.00,
            coupon = 0.035,
            initial_price = 1.02,
            auction_date = timezone.now() + timezone.timedelta(days=3),
            dated_date = timezone.now() + timezone.timedelta(days=10),
            maturity = timezone.now() + timezone.timedelta(days=10960),
            payments_per_year = 2,
        )

        self.residual = ResidualFactory(
            face = 10000.00,
            bond = self.bond,
            payments_per_year = 2,
        )

        self.money_market = MoneyMarketFactory(
            face = 8000000.00,
            bond = self.bond,
            coupon = 0.0025,
            issuance_date = timezone.now() + timezone.timedelta(days=10),
            maturity = timezone.now() + timezone.timedelta(days=40),
        )

        self.client = Client()

        print ("=====SETTING UP=====")
Example #2
0
    def __set_now_playing(self, media, start, duration):
        """
        curl -u ing_ob:Swissradio1 -v --data "rpId=155&startTime=2018-08-29T13:55:00&duration=3600&title=Love Power&artist=Nicola Conte" -X POST "https://ingest.swissradioplayer.ch/ingestor/metadata/v1/np/"
        """

        log.info('set now playing: {} {} {}'.format(media, start, duration))

        # r = self.client.get('/ingestor/metadata/v1/18884470')

        _start = (start - timezone.timedelta(hours=2)).replace(microsecond=0).isoformat()

        _start = (timezone.now() - timezone.timedelta(hours=2)).replace(microsecond=0).isoformat()
        #
        # print(_start)

        payload = {
            'startTime': _start,
            'duration': int(duration / 1000),
            'title': media.name,
            'artist': media.get_artist_display()
        }

        r = self.client.post('/ingestor/metadata/v1/np/', payload=payload)

        # print(r)
        # print(r.__dict__)
        # print(r.headers['Location'])
        # print(r.text)

        pass
Example #3
0
def send_offer_help_emails():
    """ Send "do you need help?" emails to events.

        This sends emails to events that are in the future but less than 6 weeks away.
        Because of dates being approximate, we sometimes can't tell if an event in the current month
        has happened or not on the db-level. So we need to catch it while it's more than a month away.
    """
    events = Event.objects.filter(
        is_on_homepage=True,
        date__gt=timezone.now(),
        date__lte=timezone.now() + timezone.timedelta(weeks=6),
        created_at__lte=timezone.now() - timezone.timedelta(weeks=2),
        offer_help_email_sent__isnull=True
    ).filter(
        Q(is_page_live=False) | Q(form=None)
    )
    send_event_emails(
        events=events,
        subject_template="emails/offer_help_subject.txt",
        plain_template="emails/offer_help_email.txt",
        html_template="emails/offer_help_email.html",
        timestamp_field='offer_help_email_sent',
        email_type="offer help email",
    )

    if events:
        send_mail(
            subject="Check-in email summary",
            message="Hi there!\n Check-in emails were automatically send to events with no live website "
                    "or application form open. If the organizers don't contact you back soon, you should "
                    "remove those events from the events page:\n" + "\n".join(e.city for e in events),
            from_email=settings.DEFAULT_FROM_EMAIL,
            recipient_list=["*****@*****.**"]
        )
 def test_event_status(self):
     self.assertEqual(self.e.status(self.organizer), 'Organizing')
     self.assertEqual(self.e.row_class(self.organizer), '')
     self.e.nhs_approved = False
     self.assertEqual(self.e.status(self.organizer), 'Not approved by NHS')
     self.assertEqual(self.e.row_class(self.organizer), 'danger')
     self.e.nhs_approved = True
     new_user = create_test_user('test2')
     self.assertEqual(self.e.status(new_user), 'Not participating')
     self.assertEqual(self.e.row_class(new_user), '')
     self.e.participants.add(new_user)
     self.assertEqual(self.e.status(new_user), 'Unconfirmed')
     self.assertEqual(self.e.row_class(new_user), 'warning')
     self.assertEqual(self.e.confirm_status(new_user).button_class, 'btn-success')
     self.assertEqual(self.e.confirm_status(new_user).button_text, 'Confirm')
     self.e.confirmed_participants.add(new_user)
     self.assertEqual(self.e.status(new_user), 'Confirmed')
     self.assertEqual(self.e.row_class(new_user), 'success')
     self.assertEqual(self.e.confirm_status(new_user).button_class, 'btn-warning')
     self.assertEqual(self.e.confirm_status(new_user).button_text, 'Unconfirm')
     self.e.date_start += timezone.timedelta(days=5)
     self.assertEqual(self.e.status(new_user), 'Event has not occurred yet')
     self.assertEqual(self.e.row_class(new_user), '')
     self.e.participants.clear()
     self.e.confirmed_participants.clear()
     self.e.date_start = timezone.make_aware(timezone.datetime(timezone.now().year, timezone.now().month, 1) 
         - timezone.timedelta(hours=1), timezone.utc)
     self.assertIn('last-month', self.e.row_class(new_user))
Example #5
0
def motion_details(request, days=3):
    devices = Device.objects.all()

    minutes = 10

    start = timezone.now() - timezone.timedelta(days=days)
    motion_time = []
    motion_count = []
    delta = timezone.timedelta(minutes=minutes)

    while start < timezone.now():
        cnt = Log.objects.filter(log_type__exact='MO', status=True, created__range=[start, start+delta]).count()
        motion_time.append(start)
        motion_count.append(cnt)

        start += delta
#    motion_datestmp = last_motion
    motion_time = mark_safe([timezone.localtime(m).strftime('%Y-%m-%d %H:%M:%S') for m in motion_time].__str__())
    #motion_state = mark_safe([ int(m.status) for m in last_motions].__str__())
    #motion_time = mark_safe(motion_time.__str__())
    motion_count = mark_safe(motion_count.__str__())

    range_start = mark_safe(timezone.localtime(timezone.now()-timezone.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))
    range_end = mark_safe(timezone.localtime(timezone.now()).strftime('%Y-%m-%d %H:%M:%S'))

    return render_to_response(
        'motions.html',
        locals()
    )
Example #6
0
def month(dst=0, withtime=True, **kwargs):
    """
    Возвращает точки начала и конца месяца.
    Параметром dst (целое число) задаётся количество месяцев от текущего.
    Наример, если dst == 1 то вернёт:
    (начало-следующго-месяца, конец-следующего-месяца)
    """
    if withtime:
        n = now().replace(day=1, hour=0, minute=0, second=0, microsecond=0)
    else:
        n = now().date().replace(day=1)

    month = n.month
    year  = n.year

    if dst < 0:
        month = ((n.month - ((abs(dst)) % 12)) % 12) or 12
        year = n.year - ((abs(dst)+12-n.month) // 12)
    elif dst > 0:
        month = ((n.month + ((abs(dst)) % 12)) % 12) or 12
        year = n.year + ((abs(dst)+n.month-1) // 12)

    start = n.replace(year=year, month=month)

    next_month = get_next_month(start)

    if withtime:
        end = next_month - timedelta(microseconds=1)
    else:
        end = next_month - timedelta(days=1)

    return (start, end)
    def test_deletion(self):
        self.is_not_callable(kwargs={
            'pk': 5,
            'year': self.event.start.date().year,
            'month': self.event.start.date().month,
            'day': self.event.start.date().day,
        }, user=self.event.created_by, msg=('Wrong event pk.'))

        self.is_not_callable(kwargs={
            'pk': self.event.pk,
            'year': self.event.start.date().year,
            'month': '999',
            'day': self.event.start.date().day,
        }, user=self.event.created_by, msg=('Wrong dates.'))

        new_rule = mixer.blend('calendarium.Rule', name='weekly',
                               frequency='WEEKLY')
        new_event = mixer.blend(
            'calendarium.Event',
            rule=new_rule,
            end_recurring_period=now() + timedelta(days=200),
            start=now() - timedelta(hours=5),
        )
        test_date = self.event.start.date() - timedelta(days=5)
        self.is_not_callable(kwargs={
            'pk': new_event.pk,
            'year': test_date.year,
            'month': test_date.month,
            'day': test_date.day,
        }, user=self.event.created_by, msg=(
            'No occurrence available for this day.'))

        self.is_callable(user=self.event.created_by)
        self.is_postable(user=self.event.created_by, to='/',
                         data={'decision': 'this one'})
Example #8
0
    def test_finish_in_progress_sessions_past_due_only_dued(self):
        # now_datetime > grading_rule.due
        fake_grading_rule = self.get_hacked_session_grading_rule(
            due=now() + timedelta(days=1))
        with mock.patch("course.flow.get_session_grading_rule") as \
                mock_get_grading_rule:
            mock_get_grading_rule.return_value = fake_grading_rule
            finish_in_progress_sessions(
                self.gopp.course_id, self.gopp.flow_id,
                rule_tag=None, now_datetime=now()+timedelta(days=3),
                past_due_only=True)

        self.assertEqual(
            models.FlowSession.objects.filter(in_progress=True).count(),
            0)

        self.assertEqual(
            models.FlowSession.objects.filter(in_progress=False).count(),
            self.all_sessions_count)

        self.assertEqual(
            models.FlowPageVisitGrade.objects.filter(
                visit__flow_session__in=self.ended_sessions).count(),
            0)

        for ended_session in self.in_progress_sessions:
            self.assertTrue(
                models.FlowPageVisitGrade.objects.filter(
                    visit__flow_session=ended_session).count() > 0)

        self.assertEqual(
            self.mock_update_state.call_count, self.in_progress_sessions_count)
 def dispatch(self, request, *args, **kwargs):
     self.day = int(kwargs.get('day'))
     self.month = int(kwargs.get('month'))
     self.year = int(kwargs.get('year'))
     try:
         self.date = datetime(year=self.year, month=self.month,
                              day=self.day, tzinfo=utc)
     except ValueError:
         raise Http404
     if request.method == 'POST':
         if request.POST.get('next'):
             date = self.date + timedelta(days=1)
             return HttpResponseRedirect(reverse('calendar_day', kwargs={
                 'year': date.year, 'month': date.month, 'day': date.day}))
         elif request.POST.get('previous'):
             date = self.date - timedelta(days=1)
             return HttpResponseRedirect(reverse('calendar_day', kwargs={
                 'year': date.year, 'month': date.month, 'day': date.day}))
         elif request.POST.get('today'):
             return HttpResponseRedirect(reverse('calendar_day', kwargs={
                 'year': now().year, 'month': now().month,
                 'day': now().day}))
     if request.is_ajax():
         self.template_name = 'calendarium/partials/calendar_day.html'
     return super(DayView, self).dispatch(request, *args, **kwargs)
Example #10
0
    def setUp(self):
        super(TestMultiTenant, self).setUp()

        now = timezone.now()

        self.init_projects()
        self.tenant1 = connection.tenant
        status_running = ProjectPhase.objects.get(slug='campaign')

        # Create a project for the main tenant
        self.project = ProjectFactory.create(status=ProjectPhase.objects.get(slug='campaign'),
                                             deadline=now - timezone.timedelta(days=5),
                                             amount_asked=0)

        # Create a second tenant
        connection.set_schema_to_public()
        tenant_domain = 'testserver2'
        self.tenant2 = get_tenant_model()(
            domain_url=tenant_domain,
            schema_name='test2',
            client_name='test2')

        self.tenant2.save(verbosity=0)
        connection.set_tenant(self.tenant2)

        self.init_projects()
        self.project2 = ProjectFactory.create(status=ProjectPhase.objects.get(slug='campaign'),
                                              deadline=now - timezone.timedelta(days=5),
                                              amount_asked=0)
Example #11
0
	def test_has_active_subscription_with_unspecified_plan_with_multiple_subscriptions(
		self, product_retrieve_mock, customer_retrieve_mock, subscription_create_mock
	):
		plan = Plan.sync_from_stripe_data(deepcopy(FAKE_PLAN))

		self.assert_fks(plan, expected_blank_fks={})

		subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
		subscription_fake["current_period_end"] = datetime_to_unix(
			timezone.now() + timezone.timedelta(days=7)
		)

		subscription_fake_duplicate = deepcopy(FAKE_SUBSCRIPTION)
		subscription_fake_duplicate["current_period_end"] = datetime_to_unix(
			timezone.now() + timezone.timedelta(days=7)
		)
		subscription_fake_duplicate["id"] = "sub_6lsC8pt7IcF8jd"

		subscription_create_mock.side_effect = [
			subscription_fake,
			subscription_fake_duplicate,
		]

		self.customer.subscribe(plan=plan, charge_immediately=False)
		self.customer.subscribe(plan=plan, charge_immediately=False)

		self.assertEqual(2, self.customer.subscriptions.count())

		with self.assertRaises(TypeError):
			self.customer.has_active_subscription()
Example #12
0
    def _create_events(self):

        prefec_list = list(self.prefectures)

        #ポイント稼ぎ用ボランティア
        random.seed(1)
        for i in range(1,21):

            for j in range(1,4):
                name = "【第%d回】"%j + eventname_sample[i]["name"]
                host_user = User.objects.get(username="******"%i)
                past_or_future = 1 if i < 10 else -1
                demoevent = Event(
                    name=name,
                    start_time=timezone.now() + timezone.timedelta(days=301) * past_or_future,
                    end_time = timezone.now() + timezone.timedelta(days=302) * past_or_future,
                    meeting_place="池袋駅東口母子像前",
                    contact="*****@*****.**",
                    details=eventdetail_sample,
                    host_user=host_user,
                    region=prefec_list[i%47],
                    longitude=139.7191 + 0.01 * random.uniform(-2.0,2.0),
                    latitude=35.7291 + 0.01 * random.uniform(-2.0,2.0)
                )
                demoevent.save()
                demoevent.admin = User.objects.filter(pk=i)
Example #13
0
    def _create_userreviewlists(self):
        past_event_list = [event for event in Event.objects.all() if event.is_closed()]
        for c_event in past_event_list:
            for c_participant in c_event.participant.all():

                #  Host -> Participant
                if random.choice([0,0,0,1,1,1,1,1,1,1]): # Did_or_Not_Did
                    userreviewlists_hp = UserReviewList(
                        to_rate_user = c_participant,
                        from_rate_user = c_event.host_user,
                        rating = random.choice([1,2,2,3,3,3,3,4,4,4,4,4,4,5,5,5,5]),
                        comment = review_comment_sample[random.choice([0,0,0,0,0,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,6,6])],
                        joined_event = c_event,
                        post_day = c_event.end_time + random.choice(range(1,15)) * timezone.timedelta(days=1),
                        from_event_host = True,
                    )
                    userreviewlists_hp.save()

                # Participant-> Host
                if random.choice([0,0,0,1,1,1,1,1,1,1]): # Did_or_Not_Did
                    userreviewlists_ph = UserReviewList(
                        to_rate_user = c_event.host_user,
                        from_rate_user = c_participant,
                        rating = random.choice([1,2,2,3,3,3,3,4,4,4,4,4,4,5,5,5,5]),
                        comment = review_comment_sample[random.choice([0,0,0,0,0,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,6])],
                        joined_event = c_event,
                        post_day = c_event.end_time + random.choice(range(1,15)) * timezone.timedelta(days=1),
                        from_event_host = False,
                    )
                    userreviewlists_ph.save()
    def test_revoke_access_token_with_mismatching_app(self):
        """
        Test token revocation using mismatching application
        """
        other_access_token = AccessToken.objects.create(user=self.test_user, token='1029384756',
                                                        application=self.public_application,
                                                        expires=timezone.now() + timezone.timedelta(days=1),
                                                        scope='read write')

        other_refresh_token = RefreshToken.objects.create(user=self.test_user, token='1122334455',
                                                          application=self.public_application,
                                                          access_token=other_access_token,
                                                          expires=timezone.now() + timezone.timedelta(days=3))

        self.client.credentials(HTTP_AUTHORIZATION=self.get_basic_auth(self.application.client_id,
                                                                       self.application.client_secret))
        data = {
            'token': other_refresh_token.token,
            'token_type_hint': 'refresh_token',
        }
        response = self.client.post(reverse('oauth_api:revoke-token'), data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertTrue(AccessToken.objects.filter(pk=other_access_token.pk).exists())
        self.assertTrue(AccessToken.objects.filter(pk=self.access_token.pk).exists())
        self.assertTrue(RefreshToken.objects.filter(pk=other_access_token.pk).exists())
        self.assertTrue(RefreshToken.objects.filter(pk=self.refresh_token.pk).exists())
    def setUp(self):
        self.today_date = timezone.datetime.today()
        self.yesterday_date = timezone.datetime.today() - timezone.timedelta(days=1)
        self.ereyesterday_date = self.yesterday_date + timezone.timedelta(days=-1)

        self.word1=create_wordtext_and_worddetails(text='vehicle', source_name='WP', occured_num=3, datetime=self.today_date)
        self.word2=create_wordtext_and_worddetails(text='gun', source_name='WP', occured_num=2, datetime=self.today_date)
        self.word3=create_wordtext_and_worddetails(text='bike', source_name='WP', occured_num=1, datetime=self.yesterday_date)
        self.word4=create_wordtext_and_worddetails(text='boat', source_name='WP', occured_num=2, datetime=self.yesterday_date)
        self.word5=create_wordtext_and_worddetails(text='ferry', source_name='WP', occured_num=2, datetime=self.ereyesterday_date)
        self.word6=create_wordtext_and_worddetails(text='train', source_name='WP', occured_num=2, datetime=self.ereyesterday_date)

        self.link1 = create_link(datetime=self.today_date, title='Police find gun in vehicle.',
                                 url_address='www.wp.pl/articles/011', source='WP')

        self.link2 = create_link(datetime=self.today_date, title="Is this the world's greatest sport-utility vehicle?",
                                 url_address='www.wp.pl/articles/012', source='WP')

        self.link3 = create_link(datetime=self.yesterday_date, title="10 Reasons to Get on a Bike.",
                                 url_address='www.wp.pl/articles/015', source='WP')

        self.link1.words.add(self.word1)
        self.link1.save()
        self.link1.words.add(self.word2)
        self.link1.save()
        self.link2.words.add(self.word1)
        self.link2.save()
        self.link3.words.add(self.word3)
        self.link3.save()
Example #16
0
def create_concert(festival, artist):
    return Concert.objects.create(
        festival=festival,
        artist=artist,
        start=timezone.now() + timezone.timedelta(days=2, hours=1),
        end=timezone.now() + timezone.timedelta(days=2, hours=2),
    )
    def test_filter_allowed_to_create_groups(self):
        assignment_expired = mommy.make(
            'core.Assignment',
            students_can_create_groups=True,
            students_can_not_create_groups_after=timezone.now() - timedelta(days=1)
        )
        assignment_not_expired = mommy.make(
            'core.Assignment',
            students_can_create_groups=True,
            students_can_not_create_groups_after=timezone.now() + timedelta(days=1)
        )
        assignment_not_allowed = mommy.make('core.Assignment', students_can_create_groups=False)
        assignment_allowed = mommy.make('core.Assignment', students_can_create_groups=True)

        group1 = mommy.make('core.AssignmentGroup', parentnode=assignment_expired)
        group2 = mommy.make('core.AssignmentGroup', parentnode=assignment_not_expired)
        group3 = mommy.make('core.AssignmentGroup', parentnode=assignment_not_allowed)
        group4 = mommy.make('core.AssignmentGroup', parentnode=assignment_allowed)

        mommy.make('core.GroupInvite', group=group1, id=10)
        mommy.make('core.GroupInvite', group=group2, id=11)
        mommy.make('core.GroupInvite', group=group3, id=100)
        mommy.make('core.GroupInvite', group=group4, id=101)
        self.assertEqual(
            set(invite.id for invite in GroupInvite.objects.filter_allowed_to_create_groups()),
            {11, 101}
        )
Example #18
0
 def dispatch(self, request, *args, **kwargs):
     try:
         self.event = LocalEvent.shows.get(pk=kwargs.get('pk'))
     except LocalEvent.DoesNotExist:
         raise Http404
     year = int(kwargs.get('year'))
     month = int(kwargs.get('month'))
     day = int(kwargs.get('day'))
     try:
         date = datetime(year, month, day, tzinfo=utc)
     except (TypeError, ValueError):
         raise Http404
     # this should retrieve the one single occurrence, that has a
     # matching start date
     try:
         occ = LocalOccurrence.objects.get(
             start__year=year, start__month=month, start__day=day)
     except LocalOccurrence.DoesNotExist:
         occ_gen = self.event.get_occurrences(self.event.start)
         occ = occ_gen.next()
         while occ.start.date() < date.date():
             occ = occ_gen.next()
     if occ.start.date() == date.date():
         occ.start = occ.start + timedelta(days=1)
         occ.end = occ.end + timedelta(days=1)
         self.occurrence = occ
     else:
         raise Http404
     self.object = occ
     return super(LocalOccurrenceDetailView, self).dispatch(
         request, *args, **kwargs)
Example #19
0
    def test_date_from_request_params(self):
        """Test that the date values from request params determine filter for responses."""
        url = '/reports/region/599/?day=14&month=7&year=2014'
        request = self.factory.get(url)
        report = clinics.RegionReport(kwargs={'pk': self.region.pk})
        report.request = request
        report.get(request)
        dt = timezone.now().replace(year=2014, month=7, day=14, second=0, microsecond=0)
        curr_date = report.curr_date.replace(microsecond=0, second=0)
        self.assertEqual(dt, curr_date)

        # Test that responses btw 14th and 20th of June
        v2 = factories.Visit.create(
            service=factories.Service.create(code=3),
            visit_time=dt + timezone.timedelta(2),
            survey_sent=dt + timezone.timedelta(2),
            patient=factories.Patient.create(clinic=self.clinic, serial=115)
        )
        factories.SurveyQuestionResponse.create(
            question=self.respect,
            datetime=timezone.now(),
            visit=v2,
            clinic=self.clinic, response='No')

        self.assertEqual(1, report.responses.count())
Example #20
0
	def test_extend(
		self,
		customer_retrieve_mock,
		subscription_retrieve_mock,
		product_retrieve_mock,
		plan_retrieve_mock,
	):
		subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
		subscription_fake["current_period_end"] = datetime_to_unix(
			timezone.now() - timezone.timedelta(days=20)
		)

		subscription_retrieve_mock.return_value = subscription_fake

		subscription = Subscription.sync_from_stripe_data(subscription_fake)
		self.assertFalse(subscription in self.customer.active_subscriptions)
		self.assertEqual(self.customer.active_subscriptions.count(), 0)

		delta = timezone.timedelta(days=30)
		extended_subscription = subscription.extend(delta)

		self.assertNotEqual(None, extended_subscription.trial_end)
		self.assertTrue(self.customer.has_active_subscription())
		self.assertTrue(self.customer.has_any_active_subscription())

		self.assert_fks(subscription, expected_blank_fks={"djstripe.Customer.coupon"})
Example #21
0
def get_date_range_dict():
    filter_by_date_default_end_date = timezone.now()

    date_range_dict = {'default': {'start_date': FILTER_BY_DATE_DEFAULT_START_DATE,
                                   'end_date': filter_by_date_default_end_date},

                       'week': {'start_date': timezone.now() - timezone.timedelta(days=7),
                                'end_date': filter_by_date_default_end_date},

                       'two_weeks': {'start_date': timezone.now() - timezone.timedelta(days=14),
                                     'end_date': filter_by_date_default_end_date},

                       'month': {'start_date': timezone.now() - timezone.timedelta(days=31),
                                 'end_date': filter_by_date_default_end_date},

                       'current_month': {
                           'start_date': timezone.datetime(timezone.now().year, timezone.now().month, 1,
                                                           tzinfo=timezone.utc),
                           'end_date': filter_by_date_default_end_date
                       },
                       'current_year': {
                           'start_date': timezone.datetime(timezone.now().year, 1, 1, tzinfo=timezone.utc),
                           'end_date': filter_by_date_default_end_date
                       },
                       'protective_edge': {
                           # Dates are set based on information from Wikipedia:
                           # he.wikipedia.org/wiki/%D7%9E%D7%91%D7%A6%D7%A2_%D7%A6%D7%95%D7%A7_%D7%90%D7%99%D7%AA%D7%9F
                           'start_date': timezone.datetime(2014, 7, 8, tzinfo=timezone.utc),
                           'end_date': timezone.datetime(2014, 8, 26, tzinfo=timezone.utc)
                       },
    }
    return date_range_dict
    def render(self, context):
        context_time = self.time.resolve(context)

        delta = tznow() - context_time
        today = tznow().replace(hour=0, minute=0, second=0)
        yesterday = today - timedelta(days=1)
        tomorrow = today + timedelta(days=1)

        if delta.days == 0:
            if delta.seconds < 60:
                msg = _('seconds ago')
                return u'%d %s' % (delta.seconds, msg)

            elif delta.seconds < 3600:
                minutes = int(delta.seconds / 60)
                msg = _('minutes ago')
                return u'%d %s' % (minutes, msg)
        if context['user'].is_authenticated():
            if time.daylight:
                tz1 = time.altzone
            else:
                tz1 = time.timezone
            tz = tz1 + getattr(settings, 'PYBB_DEFAULT_TIME_ZONE', 0) * 60 * 60
            context_time = context_time + timedelta(seconds=tz)
        if today < context_time < tomorrow:
            return _('today, %s') % context_time.strftime('%H:%M')
        elif yesterday < context_time < today:
            return _('yesterday, %s') % context_time.strftime('%H:%M')
        else:
            return dateformat.format(context_time, 'd M, Y H:i')
Example #23
0
def index(request):
    acs = Article.get_all_newest_contents_all_languages()
    now = timezone.now()

    acs_updated_in_the_last_24_hours = filter(
        lambda ac: ac.updated > now - timezone.timedelta(hours=24), acs)

    acs_updated_in_the_last_week = filter(
        lambda ac: ac.updated > now - timezone.timedelta(days=7), acs)

    acs_updated_in_the_last_month = filter(
        lambda ac: ac.updated > now - timezone.timedelta(days=30), acs)

    user_stats = _generate_user_statistics_for_one_day(
        year=now.year, month=now.month, day=now.day
    )

    article_length_stats = _generate_article_length_statistics(acs)

    return render(request, 'stats/index.html', {
        'number_of_acs_updated_in_the_last_24_hours':
            len(acs_updated_in_the_last_24_hours),
        'number_of_acs_updated_in_the_last_week':
            len(acs_updated_in_the_last_week),
        'number_of_acs_updated_in_the_last_month':
            len(acs_updated_in_the_last_month),
        'users': user_stats,
        'compendium_length_stats': article_length_stats,
    })
    def test_allocation_for_multiple_instances(self):
        """
        Checks that the sum of allocations meets the expected value
        """
        current_time = datetime(2014, 7, 4, hour=12, tzinfo=pytz.utc)

        # Create 10 instances of uniform size
        for idx in range(0, 10):
            start_time = current_time
            current_time = end_time = current_time + timedelta(days=3)

            helper = InstanceHelper()

            # Add 3 days of active
            helper.add_history_entry(start_time, end_time)

            # Add 3 days of suspended following active time
            helper.add_history_entry(end_time, end_time + timedelta(days=3),
                                     status="suspended")

            self.allocation_helper.add_instance(
                helper.to_instance("Instance %s" % idx))

        allocation = self.allocation_helper.to_allocation()
        self.assertTotalRuntimeEquals(allocation, timedelta(days=30))
    def handle(self, *args, **options):
        contact_email = getattr(settings, 'EMAIL_CONTACT_ADDRESS', None)

        if contact_email is None:
            raise ImproperlyConfigured('EMAIL_CONTACT_ADDRESS must be configured')

        today = timezone.now().date()

        expiration_days = (30, 15, 7)
        expiration_dates = [today - timezone.timedelta(days=d) for d in expiration_days]
        expiration_dates += [today]

        filter_arg = None
        for d in expiration_dates:
            since = self._make_date_lookup_arg(d)
            until = self._make_date_lookup_arg(d + timezone.timedelta(days=1))

            if filter_arg is None:
                filter_arg = Q(valid_until__gte=since, valid_until__lt=until)
            else:
                filter_arg |= Q(valid_until__gte=since, valid_until__lt=until)

        if settings.USE_I18N:
            translation.activate(settings.LANGUAGE_CODE)
        for payment in Payment.objects.filter(filter_arg):
            last_payment = payment.member.get_last_payment()

            if last_payment:
                last_payment_date = last_payment.valid_until.date()
                status = [last_payment_date > d for d in expiration_dates]
                already_renewed = all(status)

                # skip to send notification if already renewed
                if already_renewed:
                    continue

            valid_until_date = payment.valid_until.date()
            context = {
                'contact_email': contact_email,
                'member': payment.member,
                'url': '%s%s' % (Site.objects.get_current().domain, reverse('payment', args=[payment.member.pk])),
            }

            if valid_until_date == today:
                context['date'] = today
                subject = '[Associação Python Brasil] Anuidade vencida'
                message = render_to_string('payment/valid_until_today_email.txt',
                                           context)
            else:
                date_diff = today - valid_until_date
                context['days'] = date_diff.days
                subject = '[Associação Python Brasil] Aviso de renovação'
                message = render_to_string('payment/valid_until_email.txt',
                                           context)

            send_mail(subject, message, contact_email,
                      [payment.member.user.email], fail_silently=False)

        if settings.USE_I18N:
            translation.deactivate()
 def dispatch(self, request, *args, **kwargs):
     self.month = int(kwargs.get('month'))
     self.year = int(kwargs.get('year'))
     if self.month not in range(1, 13):
         raise Http404
     if request.method == 'POST':
         if request.POST.get('next'):
             new_date = datetime(self.year, self.month, 1) + timedelta(
                 days=31)
             kwargs.update({'year': new_date.year, 'month': new_date.month})
             return HttpResponseRedirect(
                 reverse('calendar_month', kwargs=kwargs))
         elif request.POST.get('previous'):
             new_date = datetime(self.year, self.month, 1) - timedelta(
                 days=1)
             kwargs.update({'year': new_date.year, 'month': new_date.month})
             return HttpResponseRedirect(
                 reverse('calendar_month', kwargs=kwargs))
         elif request.POST.get('today'):
             kwargs.update({'year': now().year, 'month': now().month})
             return HttpResponseRedirect(
                 reverse('calendar_month', kwargs=kwargs))
     if request.is_ajax():
         self.template_name = 'calendarium/partials/calendar_month.html'
     return super(MonthView, self).dispatch(request, *args, **kwargs)
Example #27
0
    def test_edit_suspended(self):
        '''When we unsuspend a poll after the close date does it remind us?'''

        # set our poll to have closed in the past
        new_open_date = self.open_date - timezone.timedelta(days=30)
        new_close_date = new_open_date + timezone.timedelta(days=2)

        expected = self.open_date + timezone.timedelta(days=2)
        update_data = {'close_date': new_close_date.strftime('%Y-%m-%d'),
                       'question': self.poll.question,
                       'open_date': new_open_date.strftime('%Y-%m-%d'),
                       'suspended': True}
        path = '/approval_polls/update/{0}/'.format(self.poll.id)
        response = self.client.post(path, data=update_data)

        # our test is set up now if we unsuspend the poll it should reload the form and ask us
        # to reset the close date to some time in the future.

        update_data = {'close_date': new_close_date.strftime('%Y-%m-%d'),
                       'question': self.poll.question,
                       'open_date': new_open_date.strftime('%Y-%m-%d'),
                       'suspended': False}

        response = self.client.post(path, data=update_data)
        self.assertEqual(response.status_code, 200)
        needle = '<li>Your close date is in the past. Please update the close date.</li>'
        self.assertInHTML(needle, response.content)
Example #28
0
 def setUpTestData(cls):
     super().setUpTestData()
     cls.published_task1 = Task.objects.create(
         title="Task 1",
         category=cls.category1,
         description="Task 1 description",
         system_name="Task1",
         pubdate=timezone.now(),
         slug="task-1"
     )
     cls.published_task2 = Task.objects.create(
         title="Task 2",
         category=cls.category1,
         description="Task 2 description",
         system_name="Task2",
         pubdate=timezone.now(),
         slug="task-2"
     )
     cls.unpublished_task1 = Task.objects.create(
         title="Unpublished Task 1",
         category=cls.category1,
         description="Unpublished Task 1 description",
         system_name="UnpublishedTask1",
         pubdate=timezone.now() + timezone.timedelta(days=7),
         slug="unpublished-task-1"
     )
     cls.unpublished_task2 = Task.objects.create(
         title="Unpublished Task 2",
         category=cls.category1,
         description="Unpublished Task 2 description",
         system_name="UnpublishedTask2",
         pubdate=timezone.now() + timezone.timedelta(days=7),
         slug="unpublished-task-2"
     )
 def dispatch(self, request, *args, **kwargs):
     self.week = int(kwargs.get('week'))
     self.year = int(kwargs.get('year'))
     if self.week not in range(1, 53):
         raise Http404
     if request.method == 'POST':
         if request.POST.get('next'):
             date = monday_of_week(self.year, self.week) + timedelta(days=7)
             kwargs.update(
                 {'year': date.year, 'week': date.date().isocalendar()[1]})
             return HttpResponseRedirect(
                 reverse('calendar_week', kwargs=kwargs))
         elif request.POST.get('previous'):
             date = monday_of_week(self.year, self.week) - timedelta(days=7)
             kwargs.update(
                 {'year': date.year, 'week': date.date().isocalendar()[1]})
             return HttpResponseRedirect(
                 reverse('calendar_week', kwargs=kwargs))
         elif request.POST.get('today'):
             kwargs.update({
                 'year': now().year,
                 'week': now().date().isocalendar()[1],
             })
             return HttpResponseRedirect(
                 reverse('calendar_week', kwargs=kwargs))
     if request.is_ajax():
         self.template_name = 'calendarium/partials/calendar_week.html'
     return super(WeekView, self).dispatch(request, *args, **kwargs)
Example #30
0
 def get_allocation_dict(self):
     if not self.allocation:
         return {}
     #Don't move it up. Circular reference.
     from service.allocation import get_time, get_burn_time,\
         delta_to_minutes, delta_to_hours, get_delta
     delta = get_delta(self, time_period=relativedelta(day=1, months=1))
     time_used = get_time(self.identity.created_by,
                          self.identity.id,
                          delta)
     burn_time = get_burn_time(self.identity.created_by, self.identity.id,
                               delta,
                               timedelta(minutes=self.allocation.threshold))
     mins_consumed = delta_to_minutes(time_used)
     if burn_time:
         burn_time = delta_to_hours(burn_time)
     zero_time = datetime.now() + timedelta(
             minutes=(self.allocation.threshold - mins_consumed))
     allocation_dict = {
         "threshold": floor(self.allocation.threshold/60),
         "current": floor(mins_consumed/60),
         "delta": ceil(delta.total_seconds()/60),
         "burn": burn_time,
         "ttz": zero_time,
     }
     return allocation_dict
Example #31
0
def one_month_hence():
    return timezone.now() + timezone.timedelta(days=30)
Example #32
0
 def online(self):
     online_gte = timezone.now() - timezone.timedelta(
         seconds=ONLINE_TIMEOUT)
     return self.exclude(login_token=None).filter(
         request_at__gte=online_gte)
Example #33
0
 def mock_enrollment_code_deactivation(self, enrollment_code):
     enrollment_code.expires = now() - timedelta(days=1)
     enrollment_code.save()
Example #34
0
 def setUp(self):
     self.user = User.objects.create_user(
         email='*****@*****.**',
         password='******',
         is_active=True,
         cellphone='988887777',
         cellphone_ddd='55',
         full_name='Crocodilo Dande',
         born=(now() - timedelta(days=10000)).date(),
         cpf='829.354.190-30',
     )
     address = Address(
         user=self.user,
         city='Longa vida',
         state='MG',
         street='Rua tal',
         street_number='45',
         zipcode='32444-000',
         neighborhood='Bairro tal',
     )
     address.save()
     self.professional = Professional.objects.create(
         user=User.objects.create_user(
             email='*****@*****.**',
             password='******',
             is_active=True,
             full_name='Bernardo Lagosta',
             cpf='059.391.440-63',
         ),
         avg_price=99,
         skills=['CI', 'AE', 'EM'],
         occupation='CI',
         coren='10.400'
     )
     self.professional.user.save()
     self.professional.save()
     self.user.create_customer()
     card = {
         "card_expiration_date": "1122",
         "card_number": "4018720572598048",
         "card_cvv": "123",
         "card_holder_name": "Cersei Lannister"
     }
     self.user.create_card(card)
     self.professional.create_recipient(**{
         'agency': '0932',
         'agency_dv': '5',
         'bank_code': '341',
         'account': '58054',
         'account_dv': '1',
         'legal_name': 'HOUSE TARGARYEN'
     })
     self.proposal = Proposal(
         client=self.user,
         professional=self.professional,
         city='Curitiba',
         state='PR',
         professional_type='AE',
         service_type='AC',
         start_datetime=TODAY + timedelta(days=1),
         end_datetime=TODAY + timedelta(days=3),
         value=200.00,
         description='Lorem Ipsum dolores'
     )
     self.proposal.save()
     self.proposal.accept()
     self.job:Job = self.proposal.job
     self.job.pay(0)
Example #35
0
    def test_bulk_projection(self):
        # make sure normies can't see this
        self.assertOk(self.client.get(reverse("projection:add-movies")), 403)

        permission = Permission.objects.get(codename='add_bulk_events')
        self.user.user_permissions.add(permission)
        self.assertOk(self.client.get(reverse("projection:add-movies")))

        invalid_details = {
            'contact': '',
            'billing': '',
            'date_first': '',
            'date_second': '',
            'submit': 'Save Changes'
        }

        # Create test organization
        org = Organization.objects.create(name="LNL",
                                          email="*****@*****.**",
                                          phone="1234567890",
                                          user_in_charge=self.user)
        org.save()
        org.associated_users.add(self.user)
        org.save()

        valid_details = {
            'contact':
            str(self.user.pk),
            'billing':
            str(org.pk),
            'date_first':
            timezone.datetime.today().date(),
            'date_second':
            timezone.datetime.today().date() + timezone.timedelta(days=14),
            'submit':
            'Save Changes'
        }
        # Should present errors on invalid data
        self.assertOk(
            self.client.get(reverse("projection:add-movies"), invalid_details))

        first_form = forms.BulkCreateForm(data=invalid_details)
        self.assertFalse(first_form.is_valid())

        first_form = forms.BulkCreateForm(data=valid_details)
        self.assertTrue(first_form.is_valid())

        # Test DateEntryFormsetBase is valid / invalid
        formset = formset_factory(forms.DateEntryFormSetBase, extra=0)

        valid_data = {
            'form-TOTAL_FORMS': 1,
            'form-INITIAL_FORMS': 1,
            'form-MIN_NUM_FORMS': 0,
            'form-MAX_NUM_FORMS': 1000,
            'form-0-date': datetime.date(2020, 1, 4),
            'form-0-name': 'Test Movie',
            'form-0-friday': False,
            'form-0-matinee': False,
            'form-0-saturday': True,
            'form-0-sunday': True,
            'submit': 'Submit'
        }

        invalid_data = {
            'form-TOTAL_FORMS': 1,
            'form-INITIAL_FORMS': 1,
            'form-MIN_NUM_FORMS': 0,
            'form-MAX_NUM_FORMS': 1000,
            'form-0-date': '',
            'form-0-name': 'Test Movie',
            'form-0-friday': False,
            'form-0-matinee': False,
            'form-0-saturday': True,
            'form-0-sunday': True,
            'submit': 'Submit'
        }
        valid_form = formset(data=valid_data)
        invalid_form = formset(data=invalid_data)

        self.assertTrue(valid_form.is_valid())
        self.assertFalse(invalid_form.is_valid())

        # Do not count week if not filled out
        empty_data = {
            'form-TOTAL_FORMS': 1,
            'form-INITIAL_FORMS': 1,
            'form-MIN_NUM_FORMS': 0,
            'form-MAX_NUM_FORMS': 1000,
            'form-0-date': datetime.date(2020, 1, 4),
            'form-0-name': '',
            'form-0-friday': False,
            'form-0-matinee': False,
            'form-0-saturday': True,
            'form-0-sunday': True,
            'submit': 'Submit'
        }
        empty_formset = formset(data=empty_data)
        for form in empty_formset:
            output = form.save_objects(user=self.user,
                                       contact=self.user,
                                       org=org,
                                       ip=None)
            self.assertEqual(output, [])

        # Give permissions to approve event
        permission = Permission.objects.get(codename="approve_event")
        self.user.user_permissions.add(permission)

        # Test posting of data (invalid and valid)
        resp = self.client.post(
            "%s?contact=%s&billing=1&date_first=2020-01-01&date_second=2020-01-08&save=Continue"
            % (reverse("projection:add-movies"), self.user.pk), invalid_data)
        self.assertNotContains(resp, "Events Added")
        self.assertOk(resp)

        resp = self.client.post(
            "%s?contact=%s&billing=1&date_first=2020-01-01&date_second=2020-01-08&save=Continue"
            % (reverse("projection:add-movies"), self.user.pk), valid_data)
        self.assertContains(resp, "Events Added")
        self.assertOk(resp)

        # Check that event was automatically approved
        movie = Event2019.objects.get(event_name="Test Movie",
                                      datetime_start=timezone.make_aware(
                                          datetime.datetime.combine(
                                              datetime.date(2020, 1, 4),
                                              datetime.time(20))))
        self.assertTrue(movie.approved)

        # Check for both saturday and sunday events in output
        self.assertTrue(
            Event2019.objects.filter(event_name="Test Movie",
                                     datetime_start=timezone.make_aware(
                                         datetime.datetime.combine(
                                             datetime.date(2020, 1, 5),
                                             datetime.time(20)))).exists())
Example #36
0
 def clean_date(self):
     date = self.cleaned_data.get('date')
     if date < timezone.now() - timezone.timedelta(hours=24):
         raise forms.ValidationError(
             _("Veuillez choisir une date dans le futur."))
     return date
Example #37
0
 def test_check_pvoutput_sync_disabled(self):
     PVOutputAddStatusSettings.get_solo().update(
         export=False,
         next_export=timezone.now() - timezone.timedelta(minutes=1))
     self.assertIsNone(check_pvoutput_sync())
Example #38
0
def one_year_hence():
    return timezone.now() + timezone.timedelta(days=365)
Example #39
0
def get_result(duration):
    print("fuk")
    date = timezone.now() - timezone.timedelta(days=5 * 30)

    for day in range(0, duration):
        temp = date + timezone.timedelta(days=day)
        compute_bayesian_network_probabilities(temp)

        avg_temp = [0, 0]
        max_temp = [0, 0]
        precipitation = [0, 0]
        radiation_time = [0, 0]

        for inc in range(0, 10):
            temp = to_date(temp, inc * (-365))

            avg_temp = [
                avg_temp[0] + (10 - inc) * check_val(temp, Tipe.avg_temp)[0],
                avg_temp[1] + (10 - inc) * check_val(temp, Tipe.avg_temp)[1],
            ]

            max_temp = [
                max_temp[0] + (10 - inc) * check_val(temp, Tipe.max_temp)[0],
                max_temp[1] + (10 - inc) * check_val(temp, Tipe.max_temp)[1],
            ]

            precipitation = [
                precipitation[0] + (10 - inc) * check_val(temp, Tipe.precipitation)[0],
                precipitation[1] + (10 - inc) * check_val(temp, Tipe.precipitation)[1],
            ]

            radiation_time = [
                radiation_time[0]
                + (10 - inc) * check_val(temp, Tipe.radiation_time)[0],
                radiation_time[1]
                + (10 - inc) * check_val(temp, Tipe.radiation_time)[1],
            ]

            temp = to_date(temp, inc * 365)

        # compute key for temperature
        temperature_key = 0

        avg_temp_val = avg_temp[0] / avg_temp[1]
        max_temp_val = max_temp[0] / max_temp[1]
        radiation_time_val = radiation_time[0] / radiation_time[1]

        if 22 <= avg_temp_val < 8000:
            temperature_key += 1
        if 26 <= max_temp_val < 8000:
            temperature_key += 2
        if 3 <= radiation_time_val < 8000:
            temperature_key += 4

        # compute key for humidity
        humidity_key = 0

        precipitation_val = precipitation[0] / precipitation[1]

        if 0 <= precipitation_val <= 70:
            humidity_key += 1

        print(temperature_table[temperature_key] * humidity_table[humidity_key])
Example #40
0
def one_day_hence():
    return timezone.now() + timezone.timedelta(days=1)
Example #41
0
File: views.py Project: ezaruba/web
def get_sidebar_tabs(request):
    # setup tabs
    hours = 24
    hackathon_tabs = []
    tabs = [{
        'title': f"Everywhere",
        'slug': 'everywhere',
        'helper_text':
        f'The activity feed items everywhere in the Gitcoin network',
        'badge': get_amount_unread('everywhere', request),
    }]
    default_tab = 'everywhere'
    if request.user.is_authenticated:
        num_business_relationships = len(
            set(get_my_earnings_counter_profiles(request.user.profile.pk)))
        if num_business_relationships:
            key = 'my_tribes'
            new_tab = {
                'title':
                f"Relationships",
                'slug':
                key,
                'helper_text':
                f'Activity from the users who you\'ve done business with Gitcoin',
                'badge':
                max_of_ten(
                    get_specific_activities(key, False, request.user,
                                            request.session.get(key,
                                                                0)).count())
                if request.GET.get('tab') != key else 0
            }
            tabs = [new_tab] + tabs
            default_tab = 'my_tribes'

        num_grants_relationships = (len(
            set(get_my_grants(request.user.profile))))
        if num_grants_relationships:
            key = 'grants'
            new_tab = {
                'title':
                f'Grants',
                'slug':
                key,
                'helper_text':
                f'Activity on the Grants you\'ve created or funded.',
                'badge':
                max_of_ten(
                    get_specific_activities(key, False, request.user,
                                            request.session.get(key,
                                                                0)).count())
                if request.GET.get('tab') != key else 0
            }
            tabs = [new_tab] + tabs
            default_tab = 'grants'

        num_favorites = request.user.favorites.filter(grant=None).all().count()
        if num_favorites:
            key = 'my_favorites'
            activities = get_specific_activities(key, False, request.user,
                                                 request.session.get(
                                                     key, 0)).count()
            new_tab = {
                'title':
                f"My Favorites",
                'slug':
                key,
                'helper_text':
                f'Activity that you marked as favorite',
                'badge':
                max_of_ten(activities) if request.GET.get('tab') != key else 0
            }
            tabs = [new_tab] + tabs
            default_tab = 'my_favorites'

        threads_last_24_hours = max_of_ten(
            request.user.profile.subscribed_threads.filter(
                pk__gt=request.session.get('my_threads', 0)).count()
        ) if request.GET.get('tab') != 'my_threads' else 0

        threads = {
            'title': f"My Threads",
            'slug': f'my_threads',
            'helper_text':
            f'The Threads that you\'ve liked, commented on, or sent a tip upon on Gitcoin since you last checked.',
            'badge': threads_last_24_hours
        }
        tabs = [threads] + tabs

    default_tab = 'connect'
    connect = {
        'title': f"Connect",
        'slug': f'connect',
        'helper_text':
        f'The announcements, requests for help, kudos jobs, mentorship, or other connective requests on Gitcoin.',
        'badge': get_amount_unread('connect', request),
    }
    tabs = [connect] + tabs

    connect = {
        'title': f"Kudos",
        'slug': f'kudos',
        'helper_text':
        f'The Kudos that have been sent by Gitcoin community members, to show appreciation for one aother.',
        'badge': get_amount_unread('kudos', request),
    }
    tabs = tabs + [connect]

    start_date = timezone.now() + timezone.timedelta(days=28)
    end_date = timezone.now() - timezone.timedelta(days=7)
    hackathons = HackathonEvent.objects.filter(start_date__lt=start_date,
                                               end_date__gt=end_date,
                                               visible=True)
    if hackathons.count():
        for hackathon in hackathons:
            connect = {
                'title': hackathon.name,
                'logo': hackathon.logo,
                'start': hackathon.start_date,
                'end': hackathon.end_date,
                'slug': f'hackathon:{hackathon.pk}',
                'url_slug': hackathon.slug,
                'helper_text': f'Go to {hackathon.name} Townsquare.',
            }
            hackathon_tabs = [connect] + hackathon_tabs

    # set tab
    if request.COOKIES.get('tab'):
        all_tabs = [tab.get('slug') for tab in tabs]
        if request.COOKIES.get('tab') in all_tabs:
            default_tab = request.COOKIES.get('tab')
    tab = request.GET.get('tab', default_tab)

    is_search = "activity:" in tab or "search-" in tab
    if is_search:
        tabs.append({
            'title': "Search",
            'slug': tab,
        })
    search = ''
    if "search-" in tab:
        search = tab.split('-')[1]

    return tabs, tab, is_search, search, hackathon_tabs
Example #42
0
from django.utils import formats, timezone
from django.utils.translation import ugettext_lazy as _
from django.utils.text import slugify
from model_utils.models import TimeStampedModel

from stdimage.models import StdImageField
from stdimage.utils import UploadToAutoSlug

from lib.models import (BaseAPIResource, AbstractLabel, NationBuilderResource,
                        ContactMixin, LocationMixin, ImageMixin,
                        DescriptionMixin, DescriptionField,
                        UploadToRelatedObjectDirectoryWithUUID,
                        UploadToInstanceDirectoryWithFilename)
from lib.form_fields import DateTimePickerWidget

EVENT_GRACE_PERIOD = timezone.timedelta(hours=12)


def upcoming_only(as_of):
    return models.Q(end_time__gt=as_of - EVENT_GRACE_PERIOD)


def past_only(as_of):
    return models.Q(end_time__lt=as_of)


class EventQuerySet(models.QuerySet):
    def upcoming(self, as_of, published_only=True):
        condition = upcoming_only(as_of)
        if published_only:
            condition &= models.Q(published=True)
Example #43
0
def preprocess(request):
    """Handle inserting pertinent data into the current context."""

    # make lbcheck super lightweight
    if request.path == '/lbcheck':
        return {}

    from marketing.utils import get_stat
    try:
        num_slack = int(get_stat('slack_users'))
    except Exception:
        num_slack = 0
    if num_slack > 1000:
        num_slack = f'{str(round((num_slack) / 1000, 1))}k'

    user_is_authenticated = request.user.is_authenticated
    profile = request.user.profile if user_is_authenticated and hasattr(
        request.user, 'profile') else None
    email_subs = profile.email_subscriptions if profile else None
    email_key = email_subs.first(
    ).priv if user_is_authenticated and email_subs and email_subs.exists(
    ) else ''
    if user_is_authenticated and profile and profile.pk:
        record_visit = not profile.last_visit or profile.last_visit < (
            timezone.now() -
            timezone.timedelta(seconds=RECORD_VISIT_EVERY_N_SECONDS))
        if record_visit:
            ip_address = get_ip(request)
            profile.last_visit = timezone.now()
            profile.save()
            UserAction.objects.create(
                user=request.user,
                profile=profile,
                action='Visit',
                location_data=get_location_from_ip(ip_address),
                ip_address=ip_address,
                utm=_get_utm_from_cookie(request),
            )
    context = {
        'STATIC_URL': settings.STATIC_URL,
        'MEDIA_URL': settings.MEDIA_URL,
        'num_slack': num_slack,
        'github_handle':
        request.user.username if user_is_authenticated else False,
        'email': request.user.email if user_is_authenticated else False,
        'name':
        request.user.get_full_name() if user_is_authenticated else False,
        'raven_js_version': settings.RAVEN_JS_VERSION,
        'raven_js_dsn': settings.SENTRY_JS_DSN,
        'release': settings.RELEASE,
        'env': settings.ENV,
        'email_key': email_key,
        'profile_id': profile.id if profile else '',
        'hotjar': settings.HOTJAR_CONFIG,
        'ipfs_config': {
            'host': settings.JS_IPFS_HOST,
            'port': settings.IPFS_API_PORT,
            'protocol': settings.IPFS_API_SCHEME,
            'root': settings.IPFS_API_ROOT,
        },
        'access_token': profile.access_token if profile else '',
        'is_staff': request.user.is_staff if user_is_authenticated else False,
        'is_moderator': profile.is_moderator if profile else False,
    }
    context['json_context'] = json.dumps(context)

    if context['github_handle']:
        context['unclaimed_tips'] = Tip.objects.filter(
            expires_date__gte=timezone.now(),
            receive_txid='',
            username__iexact=context['github_handle'],
            web3_type='v3',
        ).send_happy_path()
        context['unclaimed_kudos'] = KudosTransfer.objects.filter(
            receive_txid='',
            username__iexact="@" + context['github_handle'],
            web3_type='v3',
        ).send_happy_path()

        if not settings.DEBUG:
            context['unclaimed_tips'] = context['unclaimed_tips'].filter(
                network='mainnet')
            context['unclaimed_kudos'] = context['unclaimed_kudos'].filter(
                network='mainnet')

    return context
Example #44
0
def to_date(date, delta):
    return date + timezone.timedelta(days=delta)
Example #45
0
 def cal_test(self):
     print(timezone.now())
     print(timezone.now() + timezone.timedelta())
Example #46
0
File: views.py Project: jdhrrs/web
def town_square(request):

    # setup tabas
    hours = 24 if not settings.DEBUG else 1000
    posts_last_24_hours = lazy_round_number(Activity.objects.filter(created_on__gt=timezone.now() - timezone.timedelta(hours=hours)).count())
    tabs = [{
        'title': f"Everywhere",
        'slug': 'everywhere',
        'helper_text': f'The {posts_last_24_hours} activity feed items everywhere in the Gitcoin network',
        'badge': posts_last_24_hours
    }]
    default_tab = 'everywhere'
    if request.user.is_authenticated:
        num_business_relationships = lazy_round_number(len(set(get_my_earnings_counter_profiles(request.user.profile.pk))))
        if num_business_relationships:
            new_tab = {
                'title': f"Relationships",
                'slug': 'my_tribes',
                'helper_text': f'Activity from the {num_business_relationships} users who you\'ve done business with Gitcoin',
                'badge': num_business_relationships
            }
            tabs = [new_tab] + tabs
            default_tab = 'my_tribes'
        num_grants_relationships = lazy_round_number(len(set(get_my_grants(request.user.profile))))

        if num_grants_relationships:
            new_tab = {
                'title': f'Grants',
                'slug': f'grants',
                'helper_text': f'Activity on the {num_grants_relationships} Grants you\'ve created or funded.',
                'badge': num_grants_relationships
            }
            tabs = [new_tab] + tabs
            default_tab = 'grants'

    hours = 24 if not settings.DEBUG else 1000
    connect_last_24_hours = lazy_round_number(Activity.objects.filter(activity_type__in=['status_update', 'wall_post'], created_on__gt=timezone.now() - timezone.timedelta(hours=hours)).count())
    if connect_last_24_hours:
        default_tab = 'connect'
        connect = {
            'title': f"Connect",
            'slug': f'connect',
            'helper_text': f'The {connect_last_24_hours} announcements, requests for help, kudos jobs, mentorship, or other connective requests on Gitcoin in the last 24 hours.',
            'badge': connect_last_24_hours
        }
        tabs = [connect] + tabs

    kudos_last_24_hours = lazy_round_number(Activity.objects.filter(activity_type__in=['new_kudos', 'receive_kudos'], created_on__gt=timezone.now() - timezone.timedelta(hours=hours)).count())
    if kudos_last_24_hours:
        connect = {
            'title': f"Kudos",
            'slug': f'kudos',
            'helper_text': f'The {kudos_last_24_hours} Kudos that have been sent by Gitcoin community members, to show appreciation for one aother.',
            'badge': kudos_last_24_hours
        }
        tabs = tabs + [connect]

    if request.user.is_authenticated:
        hackathons = HackathonEvent.objects.filter(start_date__lt=timezone.now(), end_date__gt=timezone.now())
        if hackathons.count():
            user_registered_hackathon = request.user.profile.hackathon_registration.filter(registrant=request.user.profile, hackathon__in=hackathons).first()
            if user_registered_hackathon:
                default_tab = f'hackathon:{user_registered_hackathon.hackathon.pk}'
                connect = {
                    'title': user_registered_hackathon.hackathon.name,
                    'slug': default_tab,
                    'helper_text': f'Activity from the {user_registered_hackathon.hackathon.name} Hackathon.',
                }
                tabs = [connect] + tabs

    # set tab
    if request.COOKIES.get('tab'):
        all_tabs = [tab.get('slug') for tab in tabs]
        if request.COOKIES.get('tab') in all_tabs:
            default_tab = request.COOKIES.get('tab')
    tab = request.GET.get('tab', default_tab)

    is_search = "activity:" in tab or "search-" in tab
    if is_search:
        tabs.append({
            'title': "Search",
            'slug': tab,
        })
    search = ''
    if "search-" in tab:
        search = tab.split('-')[1]

    # get offers
    offer_pks = []
    offers_by_category = {}
    available_offers = Offer.objects.current()
    if request.user.is_authenticated:
        available_offers = available_offers.exclude(actions__profile=request.user.profile, actions__what__in=['click', 'decline', 'go'])
    for key in ['top', 'secret', 'random', 'daily', 'weekly', 'monthly']:
        next_time_available = get_next_time_available(key)
        offers = available_offers.filter(key=key).order_by('-pk')
        offer = offers.first()
        for offer in offers:
            offer_pks.append(offer.pk)
        offers_by_category[key] = {
            'offer': offer,
            'offers': offers,
            'time': next_time_available,
        }
    increment_offer_view_counts.delay(offer_pks)

    # subscriber info
    is_subscribed = False
    if request.user.is_authenticated:
        email_subscriber = request.user.profile.email_subscriptions.first()
        if email_subscriber:
            is_subscribed = email_subscriber.should_send_email_type_to('new_bounty_notifications')

    # announcements
    announcements = Announcement.objects.current().filter(key='townsquare')

    # title
    title = 'Home'
    desc = 'View the recent activity on the Gitcoin network'
    page_seo_text_insert = ''
    avatar_url = ''
    admin_link = ''
    if "activity:" in tab:
        try:
            pk = int(tab.split(':')[1])
            activity = Activity.objects.get(pk=pk)
            title = f"@{activity.profile.handle}'s post on Gitcoin "
            desc = f"{activity.text}"
            comments_count = activity.comments.count()
            admin_link = activity.admin_url
            if comments_count:
                title += f"(+ {comments_count} comments)"
            avatar_url = activity.profile.avatar_url
            page_seo_text_insert = desc
        except Exception as e:
            print(e)


    # render page context
    trending_only = int(request.GET.get('trending', 0))
    context = {
        'title': title,
        'card_desc': desc,
        'avatar_url': avatar_url,
        'use_pic_card': True,
        'page_seo_text_insert': page_seo_text_insert,
        'nav': 'home',
        'target': f'/activity?what={tab}&trending_only={trending_only}',
        'tab': tab,
        'tabs': tabs,
        'admin_link': admin_link,
        'now': timezone.now(),
        'is_townsquare': True,
        'trending_only': bool(trending_only),
        'search': search,
        'tags': [('#announce','bullhorn'), ('#mentor','terminal'), ('#jobs','code'), ('#help','laptop-code'), ('#other','briefcase'), ],
        'announcements': announcements,
        'is_subscribed': is_subscribed,
        'offers_by_category': offers_by_category,
    }
    response = TemplateResponse(request, 'townsquare/index.html', context)
    if request.GET.get('tab'):
        if ":" not in request.GET.get('tab'):
            response.set_cookie('tab', request.GET.get('tab'))
    return response
Example #47
0
def redeem_bulk_coupon(coupon, profile, address, ip_address, save_addr=False):
    try:
        address = Web3.toChecksumAddress(address)
    except:
        error = "You must enter a valid Ethereum address (so we know where to send your Kudos). Please try again."
        return None, error, None

    # handle form submission
    kudos_transfer = None
    if save_addr:
        profile.preferred_payout_address = address
        profile.save()

    private_key = settings.KUDOS_PRIVATE_KEY if not coupon.sender_pk else coupon.sender_pk
    kudos_owner_address = settings.KUDOS_OWNER_ACCOUNT if not coupon.sender_address else coupon.sender_address
    gas_price_confirmation_time = 1 if not coupon.sender_address else 60
    gas_price_multiplier = 1.5 if not coupon.sender_address else 1
    kudos_contract_address = Web3.toChecksumAddress(
        settings.KUDOS_CONTRACT_MAINNET)
    kudos_owner_address = Web3.toChecksumAddress(kudos_owner_address)
    w3 = get_web3(coupon.token.contract.network)
    contract = w3.eth.contract(Web3.toChecksumAddress(kudos_contract_address),
                               abi=kudos_abi())
    nonce = w3.eth.getTransactionCount(kudos_owner_address)
    gas_price = int(
        int(
            recommend_min_gas_price_to_confirm_in_time(
                gas_price_confirmation_time) * 10**9) * gas_price_multiplier)
    tx = contract.functions.clone(
        address, coupon.token.token_id, 1).buildTransaction({
            'nonce':
            nonce,
            'gas':
            500000,
            'gasPrice':
            gas_price,
            'value':
            int(coupon.token.price_finney / 1000.0 * 10**18),
        })

    if not profile.trust_profile and profile.github_created_on > (
            timezone.now() - timezone.timedelta(days=7)):
        error = f'Your github profile is too new.  Cannot receive kudos.'
        return None, error, None
    else:

        signed = w3.eth.account.signTransaction(tx, private_key)
        retry_later = False
        try:
            txid = w3.eth.sendRawTransaction(signed.rawTransaction).hex()
        except Exception as e:
            txid = "pending_celery"
            retry_later = True

        with transaction.atomic():
            kudos_transfer = KudosTransfer.objects.create(
                emails=[profile.email],
                # For kudos, `token` is a kudos.models.Token instance.
                kudos_token_cloned_from=coupon.token,
                amount=coupon.token.price_in_eth,
                comments_public=coupon.comments_to_put_in_kudos_transfer,
                ip=ip_address,
                github_url='',
                from_name=coupon.sender_profile.handle,
                from_email='',
                from_username=coupon.sender_profile.handle,
                username=profile.handle,
                network=coupon.token.contract.network,
                from_address=kudos_owner_address,
                is_for_bounty_fulfiller=False,
                metadata={
                    'coupon_redemption': True,
                    'nonce': nonce
                },
                recipient_profile=profile,
                sender_profile=coupon.sender_profile,
                txid=txid,
                receive_txid=txid,
                tx_status='pending',
                receive_tx_status='pending',
            )

            # save to DB
            BulkTransferRedemption.objects.create(
                coupon=coupon,
                redeemed_by=profile,
                ip_address=ip_address,
                kudostransfer=kudos_transfer,
            )

            coupon.num_uses_remaining -= 1
            coupon.current_uses += 1
            coupon.save()

            # user actions
            record_user_action(kudos_transfer.username, 'new_kudos',
                               kudos_transfer)
            record_user_action(kudos_transfer.from_username, 'receive_kudos',
                               kudos_transfer)
            record_kudos_activity(kudos_transfer, kudos_transfer.username,
                                  'receive_kudos')

            # send email
            maybe_market_kudos_to_email(kudos_transfer)

            if retry_later:
                from kudos.tasks import redeem_bulk_kudos
                redeem_bulk_kudos.delay(kudos_transfer.id,
                                        signed.rawTransaction.hex())

    return True, None, kudos_transfer
Example #48
0
 def test_schedule_notice(self):
     next_run = timezone.now() + timezone.timedelta(hours=1)
     tasks.schedule_scheduling_notice(self.notice, next_run)
     assert Schedule.objects.count() == 1
Example #49
0
def stats(request):
    # get param
    _filter = request.GET.get('filter')
    rollup = request.GET.get('rollup')

    # types
    types = list(Stat.objects.distinct('key').values_list('key', flat=True))
    types.sort()

    # filters
    if _filter == 'Activity':
        _filters = ['tip', 'bount']
        types = filter_types(types, _filters)
    if _filter == 'Marketing':
        _filters = ['slack', 'email', 'whitepaper', 'twitter']
        types = filter_types(types, _filters)
    if _filter == 'KPI':
        _filters = [
            'browser_ext_chrome',
            'medium_subscribers',
            'github_stargazers_count',
            'slack_users',
            'email_subscribers_active',
            'bounties_open',
            'bounties_ful',
            'joe_dominance_index_30_count',
            'joe_dominance_index_30_value',
            'turnaround_time_hours_30_days_back',
            'tips',
            'twitter',
            'user_action_Login',
        ]
        types = filter_types(types, _filters)

    # params
    params = {
        'types': types,
        'chart_list': [],
        'filter_params': "?filter={}&rollup={}".format(_filter, rollup),
    }

    for t in types:
        source = Stat.objects.filter(key=t)
        if rollup == 'daily':
            source = source.filter(created_on__hour=1)
            source = source.filter(
                created_on__gt=(timezone.now() - timezone.timedelta(days=30)))
        elif rollup == 'weekly':
            source = source.filter(created_on__hour=1, created_on__week_day=1)
            source = source.filter(
                created_on__gt=(timezone.now() -
                                timezone.timedelta(days=30 * 3)))
        else:
            source = source.filter(created_on__gt=(timezone.now() -
                                                   timezone.timedelta(days=2)))

        # compute avg
        total = 0
        count = source.count() - 1
        avg = "NA"
        if count > 1:
            for i in range(0, count):
                total += (source[i + 1].val - source[i].val)
            avg = round(total / count, 1)
            avg = str("+{}".format(avg) if avg > 0 else avg)

        chartdata = DataPool(series=[{
            'options': {
                'source': source
            },
            'terms': ['created_on', 'val']
        }])

        cht = Chart(datasource=chartdata,
                    series_options=[{
                        'options': {
                            'type': 'line',
                            'stacking': False
                        },
                        'terms': {
                            'created_on': ['val']
                        }
                    }],
                    chart_options={
                        'title': {
                            'text': f'{t} trend ({avg} avg)'
                        },
                        'xAxis': {
                            'title': {
                                'text': 'Time'
                            }
                        }
                    })
        params['chart_list'].append(cht)

    params['chart_list_str'] = ",".join(types)
    return TemplateResponse(request, 'stats.html', params)
Example #50
0
def render_filter_ele(condtion, admin_class, filter_condtions, request):
    table_name = admin_class.model._meta.verbose_name
    req = str(request)
    num = req.find('sta')
    if num > 0:
        sta = req[num + 4:num + 5]
    else:
        sta = ''
    if condtion == 'status' and sta == '0':
        select_ele = ''
    elif table_name == '项目流程' and condtion == 'department' and request.user.is_superuser == False:
        select_ele = ''
    elif table_name == '任务类型' and condtion == 'department' and request.user.is_superuser == False:
        select_ele = ''
    elif table_name == '项目类型' and condtion == 'department' and request.user.is_superuser == False:
        select_ele = ''
    elif table_name == '用户' and condtion == 'department' and request.user.is_superuser == False:
        select_ele = ''
    else:
        if condtion == 'project':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">所属项目</option>'''
        elif condtion == 'status':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">状态</option>'''
        elif condtion == 'department' or condtion == 'department_id':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">所属部门</option>'''
        elif condtion == 'tag':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">项目所属</option>'''
        elif condtion == 'is_active':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">账号状态</option>'''
        elif condtion == 'is_pass':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">状态</option>'''
        elif condtion == 'type':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">延期类型</option>'''
        elif condtion == 'postfix':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">文件类型</option>'''
        elif condtion == 'created_time':
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">创建时间</option>'''
        else:
            select_ele = '''<select class="form-control m-t-10" name='{filter_field}' ><option value='' style="display:none;">------</option>'''
        field_obj = admin_class.model._meta.get_field(condtion)
        if condtion == 'type':
            if filter_condtions.get(condtion) == '任务延期':
                select1 = "<option value='任务延期' selected>任务延期</option>"
                select2 = "<option value='项目延期'>项目延期</option>"
                select3 = "<option value='节点延期'>节点延期</option>"
            elif filter_condtions.get(condtion) == '项目延期':
                select1 = "<option value='任务延期'>任务延期</option>"
                select2 = "<option value='项目延期' selected>项目延期</option>"
                select3 = "<option value='节点延期'>节点延期</option>"
            elif filter_condtions.get(condtion) == '节点延期':
                select1 = "<option value='任务延期'>任务延期</option>"
                select2 = "<option value='项目延期'>项目延期</option>"
                select3 = "<option value='节点延期' selected>节点延期</option>"
            else:
                select3 = "<option value='节点延期'>节点延期</option>"
                select1 = "<option value='任务延期'>任务延期</option>"
                select2 = "<option value='项目延期'>项目延期</option>"
            select_ele += select3 + select1 + select2
        if condtion == 'postfix':
            files = project.File.objects.filter(existent=1)
            postfixs = []
            for file in files:
                postfixs.append(file.postfix)
            postfixs = list(set(postfixs))
            for postfix in postfixs:
                if filter_condtions.get(condtion) == postfix:
                    selected = "selected"
                else:
                    selected = ''
                select_ele += '''<option value='%s' %s>%s</option>''' % (
                    postfix, selected, postfix)
        if field_obj.choices:
            for choice_item in field_obj.choices:
                li = []
                if condtion == 'status':
                    if sta == '1':
                        li = [0, 3, 4]
                    elif sta == '3':
                        li = [0, 1, 2, 5]
                if choice_item[0] not in li:
                    if filter_condtions.get(condtion) == str(choice_item[0]):
                        selected = "selected"
                    else:
                        selected = ''
                    select_ele += '''<option value='%s' %s>%s</option>''' % (
                        choice_item[0], selected, choice_item[1])
        if type(field_obj).__name__ == "NullBooleanField":
            if filter_condtions.get(condtion) == '1':
                select1 = "<option value='1' selected>已通过</option>"
                select2 = "<option value='0'>已拒绝</option>"
                select3 = "<option value='None'>待审核</option>"
            elif filter_condtions.get(condtion) == '0':
                select1 = "<option value='1'>已通过</option>"
                select2 = "<option value='0' selected>已拒绝</option>"
                select3 = "<option value='None'>待审核</option>"
            elif filter_condtions.get(condtion) == 'None':
                select1 = "<option value='1'>已通过</option>"
                select2 = "<option value='0'>未通过</option>"
                select3 = "<option value='None' selected>待审核</option>"
            else:
                select3 = "<option value='None' >待审核</option>"
                select1 = "<option value='1'>已通过</option>"
                select2 = "<option value='0'>已拒绝</option>"
            select_ele += select3 + select1 + select2
        if type(field_obj).__name__ == "BooleanField":
            if filter_condtions.get(condtion) == '1':
                select1 = "<option value='1' selected>正常</option>"
                select2 = "<option value='0'>禁用</option>"
            elif filter_condtions.get(condtion) == '0':
                select1 = "<option value='1'>正常</option>"
                select2 = "<option value='0' selected>禁用</option>"
            else:
                select1 = "<option value='1'>正常</option>"
                select2 = "<option value='0'>禁用</option>"
            select_ele += select1 + select2
        if type(field_obj).__name__ == "ForeignKey":
            selected = ''
            for choice_item in field_obj.get_choices()[1:]:
                if filter_condtions.get(condtion) == str(choice_item[0]):
                    selected = "selected"
                select_ele += '''<option value='%s' %s>%s</option>''' % (
                    choice_item[0], selected, choice_item[1])
                selected = ''
        if type(field_obj).__name__ in ['DateTimeField', 'DateField']:
            date_els = []
            today_ele = datetime.datetime.now().date()
            date_els.append(['今天', datetime.datetime.now().date()])
            # date_els.append(['昨天', today_ele - timedelta(days=1)])
            date_els.append(['7天内', today_ele - timedelta(days=7)])
            date_els.append(['15天内', today_ele - timedelta(days=15)])
            date_els.append(['一个月内', today_ele - timedelta(days=30)])
            date_els.append(['三个月内', today_ele - timedelta(days=30)])
            date_els.append(['半年内', today_ele - timedelta(days=180)])
            date_els.append(['一年内', today_ele - timedelta(days=365)])
            # date_els.append(['mtd_ele', today_ele.replace(day=1)])
            # date_els.append(['ytd_ele', today_ele.replace(month=1, day=1)])
            filter_field_name = "%s__gte" % condtion
            for item in date_els:
                if str(item[1]) == str(
                        filter_condtions.get(filter_field_name)):
                    selected = 'selected'
                else:
                    selected = ''
                select_ele += '''<option value='%s' %s>%s</option>''' % (
                    item[1], selected, item[0])
        else:
            filter_field_name = condtion
        select_ele += "</select>"
        select_ele = select_ele.format(filter_field=filter_field_name)
    return mark_safe(select_ele)
Example #51
0
    def setUp(self):
        # Users -------
        self.user1 = User.objects.create_user(email="*****@*****.**",
                                              password="******")
        self.user1.is_admin = False
        self.user1.set_user_type_student()

        self.user2 = User.objects.create_user(email="*****@*****.**",
                                              password="******")
        self.user2.is_admin = False
        self.user2.set_user_type_student()

        # Countries -------
        self.country1 = Country.objects.create(name="country1",
                                               slug="country1",
                                               picture=None)

        self.country2 = Country.objects.create(name="country2",
                                               slug="country2",
                                               picture=None)

        # Universities -------
        self.university1 = University.objects.create(name="university1",
                                                     country=self.country1,
                                                     description="Test desc1",
                                                     picture=None,
                                                     slug="university1")

        self.university2 = University.objects.create(name="university2",
                                                     country=self.country2,
                                                     description="Test desc2",
                                                     picture=None,
                                                     slug="university2")

        # Field of Studies -------
        self.field_of_study1 = FieldOfStudy.objects.create(
            name="field of study1",
            description="Test desc1",
            picture=None,
            slug="field-of-study1")

        self.field_of_study2 = FieldOfStudy.objects.create(
            name="field of study2",
            description="Test desc2",
            picture=None,
            slug="field-of-study2")

        # Consultants -------
        self.consultant1 = User.objects.create_user(email="*****@*****.**",
                                                    password="******")
        self.consultant1.is_admin = False
        self.consultant1.set_user_type_consultant()
        self.consultant1_profile = ConsultantProfile.objects.create(
            user=self.consultant1,
            bio="bio1",
            profile_picture=None,
            aparat_link="https://www.aparat.com/v/vG4QC",
            resume=None,
            slug="consultant1",
            active=True,
            time_slot_price=100)
        self.consultant1_profile.universities.set(
            [self.university1, self.university2])
        self.consultant1_profile.field_of_studies.set([self.field_of_study1])
        self.consultant1_profile.countries.set([self.country1])

        self.consultant2 = User.objects.create_user(email="*****@*****.**",
                                                    password="******")
        self.consultant2.is_admin = False
        self.consultant2.set_user_type_consultant()
        self.consultant2_profile = ConsultantProfile.objects.create(
            user=self.consultant2,
            bio="bio2",
            profile_picture=None,
            aparat_link="https://www.aparat.com/v/vG4QC",
            resume=None,
            slug="consultant2",
            active=True,
            time_slot_price=80)

        # TimeSlotSales -------
        self.time_slot_sale1 = TimeSlotSale.objects.create(
            consultant=self.consultant1_profile,
            start_time=timezone.now() + timezone.timedelta(hours=1),
            end_time=timezone.now() + timezone.timedelta(hours=2),
            price=self.consultant1_profile.time_slot_price)
        self.time_slot_sale2 = TimeSlotSale.objects.create(
            consultant=self.consultant1_profile,
            start_time=timezone.now() + timezone.timedelta(hours=2),
            end_time=timezone.now() + timezone.timedelta(hours=3),
            price=self.consultant1_profile.time_slot_price)
        self.time_slot_sale3 = TimeSlotSale.objects.create(
            consultant=self.consultant1_profile,
            start_time=timezone.now() + timezone.timedelta(days=1),
            end_time=timezone.now() + timezone.timedelta(days=1, hours=1),
            price=self.consultant1_profile.time_slot_price)
        self.time_slot_sale4 = TimeSlotSale.objects.create(
            consultant=self.consultant2_profile,
            start_time=timezone.now() + timezone.timedelta(hours=1),
            end_time=timezone.now() + timezone.timedelta(hours=2),
            price=self.consultant2_profile.time_slot_price)
        self.time_slot_sale5 = TimeSlotSale.objects.create(
            consultant=self.consultant2_profile,
            start_time=timezone.now() + timezone.timedelta(hours=7),
            end_time=timezone.now() + timezone.timedelta(hours=8),
            price=self.consultant2_profile.time_slot_price)

        # Carts -------
        self.cart1 = Cart.objects.create(user=self.user1)
        self.cart1.products.set([self.time_slot_sale1, self.time_slot_sale2])

        self.cart2 = Cart.objects.create(user=self.user1)
        self.cart2.products.set([self.time_slot_sale1, self.time_slot_sale3])

        self.cart3 = Cart.objects.create(user=self.user2)
        self.cart3.products.set([self.time_slot_sale1, self.time_slot_sale5])

        # Consultant discounts
        self.consultant_discount1 = ConsultantDiscount.objects.create(
            percent=10,
            code="discountcode1",
        )
        self.consultant_discount1.consultants.set(
            [self.consultant1_profile, self.consultant2_profile])

        self.consultant_discount2 = ConsultantDiscount.objects.create(
            percent=20,
            code="discountcode2",
        )
        self.consultant_discount2.consultants.set([
            self.consultant1_profile,
        ])

        # Cart consultant discounts
        self.cart_consultant_discount1 = CartConsultantDiscount.objects.create(
            cart=self.cart1, consultant_discount=self.consultant_discount1)

        self.consultant_comment1 = ConsultantComment.objects.create(
            user=self.user1,
            consultant=self.consultant1_profile,
            message="Message 1")
        self.consultant_comment2 = ConsultantComment.objects.create(
            user=self.user1,
            consultant=self.consultant2_profile,
            message="Message 2")
        self.consultant_comment3 = ConsultantComment.objects.create(
            user=self.user2,
            consultant=self.consultant2_profile,
            message="Message 3")
        self.consultant_admin_comment1 = ConsultantAdminComment.objects.create(
            comment=self.consultant_comment1, message="Admin message 1")
        self.consultant_admin_comment2 = ConsultantAdminComment.objects.create(
            comment=self.consultant_comment2, message="Admin message 2")
        self.sold_time_slot_sale1 = SoldTimeSlotSale.objects.create(
            sold_to=self.user1,
            consultant=self.consultant1_profile,
            start_time=timezone.now() + timezone.timedelta(days=2),
            end_time=timezone.now() + timezone.timedelta(days=2, hours=1),
            price=self.consultant1_profile.time_slot_price)

        self.sold_time_slot_sale2 = SoldTimeSlotSale.objects.create(
            sold_to=self.user2,
            consultant=self.consultant1_profile,
            start_time=timezone.now() + timezone.timedelta(days=2, hours=1),
            end_time=timezone.now() + timezone.timedelta(days=2, hours=2),
            price=self.consultant1_profile.time_slot_price)

        self.sold_time_slot_sale3 = SoldTimeSlotSale.objects.create(
            sold_to=self.user2,
            consultant=self.consultant2_profile,
            start_time=timezone.now() + timezone.timedelta(days=2),
            end_time=timezone.now() + timezone.timedelta(days=2, hours=1),
            price=self.consultant2_profile.time_slot_price)

        self.sold_time_slot_rate_1 = SoldTimeSlotRate.objects.create(
            sold_time_slot=self.sold_time_slot_sale1, rate=4)
        self.sold_time_slot_rate_2 = SoldTimeSlotRate.objects.create(
            sold_time_slot=self.sold_time_slot_sale2, rate=2.5)

        self.room1 = Room.objects.create(
            sold_time_slot=self.sold_time_slot_sale1, )
        self.room2 = Room.objects.create(
            sold_time_slot=self.sold_time_slot_sale2)

        # Setup ------
        self.client = APIClient()
PAYERS = 'payers'
EARNERS = 'earners'
ORGS = 'orgs'
KEYWORDS = 'keywords'
TOKENS = 'tokens'
COUNTRIES = 'countries'
CITIES = 'cities'
CONTINENTS = 'continents'

TIMES = [ALL, WEEKLY, QUARTERLY, YEARLY, MONTHLY]
BREAKDOWNS = [
    FULFILLED, ALL, PAYERS, EARNERS, ORGS, KEYWORDS, TOKENS, COUNTRIES, CITIES,
    CONTINENTS
]

WEEKLY_CUTOFF = timezone.now() - timezone.timedelta(
    days=(30 if settings.DEBUG else 7))
MONTHLY_CUTOFF = timezone.now() - timezone.timedelta(days=30)
QUARTERLY_CUTOFF = timezone.now() - timezone.timedelta(days=90)
YEARLY_CUTOFF = timezone.now() - timezone.timedelta(days=365)


def default_ranks():
    """Generate a dictionary of nested dictionaries defining default ranks.

    Returns:
        dict: A nested dictionary mapping of all default ranks with empty dicts.

    """
    return_dict = {}
    for time in TIMES:
        for breakdown in BREAKDOWNS:
Example #53
0
def create_excel(model, records_id, request_id):
    if model == "record":
        records = Record.objects.filter(id__in=records_id)
    elif model == "recordoks":
        records = RecordOks.objects.filter(id__in=records_id)
    user = User.objects.get(pk=request_id)
    wb = xlwt.Workbook(encoding='utf-8')
    ws = wb.add_sheet('Выборка')
    ws.col(0).width = 256 * 36
    ws.col(3).width = 256 * 22
    ws.col(6).width = 256 * 18
    ws.col(8).width = 256 * 12
    ws.col(9).width = 256 * 32
    ws.col(10).width = 256 * 12
    row_num = 0
    font_style = xlwt.XFStyle()
    font_style.font.bold = True
    columns = [
        'Дата размещение объявления', 'Цена', 'Площадь', 'Кадастровый номер',
        'Адрес', 'Описание', 'Номер телефона', 'Сайт', 'URL',
        'Дата обращение к странице сайта', 'Скриншоты'
    ]
    for i, column in enumerate(columns):
        ws.write(row_num, i, column, font_style)
    columns = [
        'DEAL_DATE', 'DEAL_PRICE', 'VALUE', 'CADASTRAL_NUMBER', 'REGION'
    ]
    row_num += 1
    for i, column in enumerate(columns):
        ws.write(row_num, i, column, font_style)
    for record in records:
        row_num += 1
        if record.date_added:
            date_added = datetime.strftime(record.date_added, "%Y-%m-%d")
        else:
            date_added = ""
        if record.source_date_added:
            source_date_added = datetime.strftime(record.source_date_added,
                                                  "%Y-%m-%d")
        else:
            source_date_added = ""
        file = record.get_file()
        if file:
            file = file.split("/")[-1]
        record_list = [
            source_date_added,
            str(record.price_rub).replace(".", ","),
            str(record.area).replace(".", ","), record.cadastre_number,
            record.raw_address, record.raw_text, record.phone_number,
            record.site, record.source_url, date_added, file
        ]
        for index, record_write in enumerate(record_list):
            ws.write(row_num, index, record_write)
    path = f"ziparchive/{records.count()}_{timezone.now()}.xls"
    wb.save(os.path.abspath(path))
    user_file = UserFiles.objects.create(
        user=user,
        date_create=timezone.now(),
        is_active=True,
        count_files=records.count(),
        status="Готово",
        file=f"ziparchive/{path.split('/')[-1]}",
        date_expired=timezone.now() + timezone.timedelta(days=1))
Example #54
0
def uretimkontrol(request):
    mac = request.user_agent.os.family

    ip = get_client_ip(request)
    ip == '192.168.1.36'

    grup = request.user.grup
    birim = request.user.birim

    #Uretim.objects.all().delete()  #Test sonuçlarını silmek için bu yorumu açabilirsiniz
    fullname = request.user.first_name + ' ' + request.user.last_name
    if request.method == 'POST':
        if request.POST.dict()['tur'] == 'valfmontaj':
            veris = json.loads(request.POST.dict()['veri'])
            print(veris)
            t = Uretim(tur='valfmontaj',
                       okunan_deger=veris[0],
                       personel=request.user.get_full_name())
            t.save(force_insert=True)
            b = Bildirim(tur="baslangic", kisi=request.user.get_full_name())
            b.save(force_insert=True)
        elif request.POST.dict()['tur'] == 'kurlenme':
            veris = json.loads(request.POST.dict()['veri'])
            '''neval
                        if not Uretim.objects.all():
                            vsn = 1
                        else:
                            a = Uretim.objects.all().order_by('-vsn').values()[0]
                            s = a['vsn']
                            vsn = s + 1
                        v = Valf(vsn=vsn, is_emri=veris[0])
                        v.save(force_insert=True)
                        e = Emir.objects.get(is_emri=veris[0])
                        e.durum = 'Aktif'
                        e.save()
                        t = Uretim(tur='montaj_kurlenme' ,vsn = vsn, is_emri = veris[0] ,personel = request.user.get_full_name(),alt_nipel_no = veris[1],bakir_membran_no = veris[2],ust_nipel_no = veris[3],manometre_no = veris[4],basincanahtari_no = veris[5],montaj_kurlenme_zamani=timezone.now()+timezone.timedelta(minutes=10))
                        t.save(force_insert=True)
                        return HttpResponse(str(vsn))
                        '''
            print("deneme")

            e = Emir.objects.get(is_emri=veris[0])
            e.durum = 'Aktif'
            e.save()
            is_emri_adi = veris[0]
            emir = Emir.objects.get(is_emri=is_emri_adi)
            personel_id = request.user.id

            alt_nipel_no = veris[1]
            bakir_membran_no = veris[2]
            ust_nipel_no = veris[3]
            manometre_no = veris[4]
            basincanahtari_no = veris[5]

            print("deneme2")

            try:
                kayit_tarihi = timezone.now()
                kurlenme_bitis = timezone.now() + timezone.timedelta(
                    minutes=10)

                valf_montaj = Valf_montaj(montaj_personel_id=personel_id,
                                          alt_nipel_no=alt_nipel_no,
                                          bakir_membran_no=bakir_membran_no,
                                          ust_nipel_no=ust_nipel_no,
                                          manometre_no=manometre_no,
                                          basincanahtari_no=basincanahtari_no,
                                          montaj_tarihi=kayit_tarihi,
                                          kurlenme_bitis_tarihi=kurlenme_bitis)
                valf_montaj.save()

                valf = Valf(is_emri=emir, valf_montaj=valf_montaj)
                valf.save()

                return HttpResponse(str(valf.id))
            except Exception as err:
                print(" KAyıt HAstası >  ", err)

        elif request.POST.dict()['tur'] == 'valftest':
            try:

                valf_seri_no = json.loads(request.POST.dict()['valf_seri_no'])
                uygun = json.loads(request.POST.dict()['uygun'])

                valf = Valf.objects.get(id=valf_seri_no)

                personel_id = User.objects.get(id=request.user.id)
                test_tarihi = timezone.now()

                acma = str(uygun)
                kapama = str(uygun)
                sebep = str(uygun)
                if (uygun == True):
                    sebep = None
                valf_test = Valf_test(test_personel=personel_id,
                                      test_tarihi=test_tarihi,
                                      uygun=uygun)

                valf_test.save()
                valf.valf_test = valf_test
                valf.save()
            except Exception as err:
                print(err)

        elif request.POST.dict()['tur'] == 'valfgovde':

            veri = json.loads(request.POST.dict()['veri'])
            '''neval
                        v = Valf.objects.get(vsn=veri[3])
                        is_emri = v.is_emri
                        print('veri[5],sodyum miktarı:: ',veri[5] )
                        t = Uretim.objects.get(vsn=veri[3])
                        t.tur='govde_kurlenme'
                        t.tork_degeri = veri[0]
                        t.uygunluk = veri[1]
                        t.sebep = veri[2]
                        t.tsn = veri[4]
                        t.personel = request.user.get_full_name()
                        t.govde_kurlenme_zamani=timezone.now()+timezone.timedelta(minutes=10)
                        # t = Uretim(tur='valfgovde',tork_degeri = veri[0] ,is_emri=is_emri, uygunluk = veri[1] , sebep = veri[2],
                        #           vsn = veri[3],tsn = veri[4], personel = request.user.get_full_name(),govde_kurlenme_zamani=timezone.now()+timezone.timedelta(minutes=10))
                        t.save()
                        '''
            valf_seri_no = veri[3]
            valf = Valf.objects.get(id=valf_seri_no)
            valf.durum = 'valf_govde'
            valf.save()

            personel_id = request.user.id
            kayit_tarihi = timezone.now()
            kurlenme_bitis = timezone.now() + timezone.timedelta(minutes=10)
            tork = veri[0]
            tup_seri_no = veri[4]
            sodyum_miktari = veri[5]
            uygunluk = veri[1]
            sebep = veri[2]
            if (uygunluk == 'on'):
                sebep = None

            valf_govde = Valf_govde(valf=valf,
                                    personel_id=personel_id,
                                    kayit_tarihi=kayit_tarihi,
                                    kurlenme_bitis=kurlenme_bitis,
                                    tork=tork,
                                    tup_seri_no=tup_seri_no,
                                    sodyum_miktari=sodyum_miktari,
                                    uygunluk=uygunluk,
                                    sebep=sebep)
            valf_govde.save()

        elif request.POST.dict()['tur'] == 'fm200':
            veri = json.loads(request.POST.dict()['veri'])
            '''neval
                        v = Valf.objects.get(vsn=veri[4])
                        is_emri = v.is_emri
                        print(veri)
                        t = Uretim.objects.get(vsn=veri[4])
                        t.tur='fm200_kurlenme'
                        t.bos_agirlik = veri[0]
                        t.rekorlu_agirlik = veri[1]
                        t.fm200 = veri[2]
                        t.azot = veri[3]
                        t.personel = request.user.get_full_name()
                        t.fm200_kurlenme_zamani=timezone.now()+timezone.timedelta(minutes=10) 
                        t.save()
                        '''

            valf_seri_no = veri[4]
            valf = Valf.objects.get(id=valf_seri_no)
            valf.durum = 'valf_fm200'
            valf.save()

            personel_id = request.user.id
            kayit_tarihi = timezone.now()
            kurlenme_bitis = timezone.now() + timezone.timedelta(minutes=10)
            bos_agirlik = veri[0]
            rekorlu_agirlik = veri[1]
            fm200 = veri[2]
            azot = veri[3]
            valf_fm200 = Valf_fm200(valf=valf,
                                    personel_id=personel_id,
                                    kayit_tarihi=kayit_tarihi,
                                    kurlenme_bitis=kurlenme_bitis,
                                    bos_agirlik=bos_agirlik,
                                    rekorlu_agirlik=rekorlu_agirlik,
                                    fm200=fm200,
                                    azot=azot)
            valf_fm200.save()

        elif request.POST.dict()['tur'] == 'havuztest':
            veri = json.loads(request.POST.dict()['veri'])
            '''neval
                        print(veri)
                        v = Valf.objects.get(vsn=veri[0])
                        is_emri = v.is_emri
                        t = Uretim(tur='havuztest',vsn = veri[0],tsn = veri[0],is_emri=is_emri , uygunluk = veri[1] , 
                        acma = veri[2], kapatma = veri[3],sebep = veri[4], personel = request.user.get_full_name())
                        t.save(force_insert=True)
                        '''
            print("veri", veri)

            valf_seri_no = veri[0]
            valf = Valf.objects.get(id=valf_seri_no)
            valf.durum = 'valf_havuz_test'
            valf.save()

            personel_id = request.user.id
            kayit_tarihi = timezone.now()
            uygunluk = veri[1]
            tup_cidar_sicaklik = veri[2]
            tup_basinc = veri[3]
            sebep = veri[4]
            if (uygunluk):
                sebep = None

            valf_havuz = Valf_havuz(valf=valf,
                                    personel_id=personel_id,
                                    kayit_tarihi=kayit_tarihi,
                                    tup_cidar_sicaklik=tup_cidar_sicaklik,
                                    tup_basinc=tup_basinc,
                                    uygunluk=uygunluk,
                                    sebep=sebep)
            valf_havuz.save()

        elif request.POST.dict()['tur'] == 'finalmontaj':
            veri = json.loads(request.POST.dict()['veri'])
            '''neval
                        
                        print(veri)
                        v = Valf.objects.get(vsn=veri[1])
                        is_emri = v.is_emri
                        t = Uretim.objects.get(vsn=veri[1])
                        t.tur='finalmontaj'
                        t.etiket_seri_no = veri[0]
                        t.fsn = veri[2]
                        t.funye_seri_omaj = veri[3]
                        t.basinc_anahtari_omaj = veri[4]
                        t. personel = request.user.get_full_name()
                        #t = Uretim(tur='finalmontaj',etiket_seri_no = veri[0],is_emri=is_emri , vsn = veri[1] , fsn = veri[2],
                        #          funye_seri_omaj = veri[3],basinc_anahtari_omaj = veri[4], personel = request.user.get_full_name())
                        t.save()
                        tup_sayisi_str=Emir.objects.filter(is_emri=is_emri).values()[0]['tup_sayisi']
                        '''

            valf_seri_no = veri[1]
            valf = Valf.objects.get(id=valf_seri_no)
            valf.durum = 'valf_final_montaj'
            valf.save()

            personel_id = request.user.id
            kayit_tarihi = timezone.now()
            etiket_seri_no = veri[0]
            funye_seri_no = veri[2]
            funye_seri_omaj = veri[3]
            basinc_anahtari_omaj = veri[4]
            valf_final_montaj = Valf_final_montaj(
                valf=valf,
                personel_id=personel_id,
                kayit_tarihi=kayit_tarihi,
                etiket_seri_no=etiket_seri_no,
                funye_seri_no=funye_seri_no,
                funye_seri_omaj=funye_seri_omaj,
                basinc_anahtari_omaj=basinc_anahtari_omaj)
            valf_final_montaj.save()

            emir = Emir.objects.get(is_emri=valf.is_emri)
            emir_tup_sayisi = int(emir.tup_sayisi)
            emir_biten_valf_sayi = Valf.objects.filter(
                is_emri=emir, durum='valf_final_montaj').count()
            print('emir_biten_valf_sayi', emir_biten_valf_sayi)
            print('emir_tup_sayisi', emir_tup_sayisi)
            if (emir_biten_valf_sayi == emir_tup_sayisi):

                emir.durum = 'Bitmiş'
                emir.save()

                b = Bildirim(tur="bitis", kisi=request.user.get_full_name())
                b.save(force_insert=True)

    now = timezone.now()

    #montajkurlenmesi=Valf_montaj.objects.filter(kurlenme_bitis_tarihi__gte=now)
    montajkurlenmesi = Valf_montaj.objects.all()
    # govdekurlenmesi=Valf_govde.objects.filter(kurlenme_bitis__gte=now)
    fm200kurlenmesi = Valf_fm200.objects.filter(
        fm200_kurlenme_bitis_tarihi__gte=now)
    acikemirleri = Emir.objects.filter(durum__in=("Aktif", "Başlanmamış"))
    aktifemirler = Emir.objects.filter(durum="Aktif")
    ####Duplikasyonu önlemek için yaptık ###############
    govde_emir = list(
        dict.fromkeys(
            Valf.objects.filter(valf_govde_id__isnull=False).values_list(
                'is_emri_id', flat=True)))
    ###################################################

    #return render(request,'uretim-kontrol.html',{ 'acikemirleri':acikemirleri,  'grup': grup, 'birim': birim, 'ip': ip,'now':now, 'kurlenmes':montajkurlenmesi,'fm200kurlenmes':fm200kurlenmesi, 'govdekurlenmes': govdekurlenmesi ,'server' : server})
    return render(
        request, 'uretim-kontrol.html', {
            'grup': grup,
            'birim': birim,
            'ip': ip,
            'now': now,
            'server': server,
            'acikemirleri': acikemirleri,
            'fm200kurlenmes': fm200kurlenmesi,
            'kurlenmes': montajkurlenmesi,
            'aktifemirler': aktifemirler,
            'govde_emir': govde_emir
        })
Example #55
0
 def is_expired(self) -> bool:
     """Check if invite is older than INVITE_DAYS_VALIDITY days."""
     return self.created_at < timezone.now() - timezone.timedelta(
         INVITE_DAYS_VALIDITY)
Example #56
0
 def starting_within(self, days=0, weeks=0):
     today = timezone.now()
     today_with_range = today + timezone.timedelta(days=days, weeks=weeks)
     return self.filter(start_date__range=(today, today_with_range))
Example #57
0
def downloader(url, using_tor=True):
    urls_bulk = []
    print 'downloading {}'.format(url)
    outlink_obj, created = OutLink.objects.get_or_create(url=url)
    if url.startswith("mailto"):
        return
    # ################### CHECK DOMAIN TIMEOUT  ########################
    url_parse_object = urlparse(url)
    domain_string = url_parse_object.netloc
    try:
        domain, created = Domain.objects.get_or_create(domain=domain_string)
        if not created and domain.timeout and domain.last_attemp:
            if domain.last_attempt + timezone.timedelta(
                    seconds=settings.REQUEST_DOMAIN_FALLBACK_TIME
            ) < timezone.now():
                print('still in timeout')
                return
    except Exception as e:
        print "something went wrong at while checking if domain in timeout: {}".format(
            url)
        return
    if outlink_obj.download_status != OutLink.DownloadStatus.Completed:
        try:
            Page.objects.using('pages').get(url_hash=get_url_hash(url))
            outlink_obj.download_status = True
            outlink_obj.save()
            print 'outlink download status changed'
            return
        except Page.DoesNotExist:
            session = requests.session()
            session.headers = {
                'User-Agent':
                user_agents[random.randint(0,
                                           len(user_agents) - 1)]
            }
            if using_tor:
                session.proxies = {
                    'http': 'socks5h://localhost:9050',
                    'https': 'socks5h://localhost:9050'
                }
                response = session.get(url)
            else:
                response = session.get(url)
            if response.status_code == 200:
                soup = Soup(url, response)
                if soup.soup:
                    outlink_obj.download_status = OutLink.DownloadStatus.Completed
                    outlink_obj.save()
                    page, created = Page.objects.using('pages').get_or_create(
                        url=url, content=soup.html)
                    # print 'Page object created {}'.format(url)
                    if not created:
                        return
                    external_urls = soup.get_absolute_internal_links()
                    for url in external_urls:
                        if url.startswith("mailto") or url.startswith(
                                "tel:") or url.startswith("javascript:"):
                            continue
                        elif '#' in url:
                            if urlparse(url).path == url_parse_object.path:
                                continue
                            url = url.split('#')[0]
                        url_hash = get_url_hash(url)

                        # ### for performance boosting keep some local info about the outlinks.
                        # If the outlink exists locally then do not write at the remote DB. This will make the
                        # remote less busy.
                        outlink, created = OutLink.objects.using(
                            'pages').get_or_create(url_hash=url_hash, url=url)
                        if created:
                            urls_bulk.append(url)

                    try:
                        for url in urls_bulk:
                            OutLink.objects.create(url=url)
                    except Exception as e:
                        print(e)
                print '{} outlinks created '.format(len(urls_bulk))
            elif 300 <= response.status_code < 400:
                outlink_obj.download_status = True
                outlink_obj.is_300 = True

            elif 400 <= response.status_code < 500:
                outlink_obj.download_status = True
                outlink_obj.is_404 = True

            elif 500 <= response.status_code < 600:
                outlink_obj.download_status = True
                outlink_obj.is_500 = True
            else:
                outlink_obj.download_status = True
            outlink_obj.save()
    def test_complete_model_is_complete(self):
        target = Task()
        target.complete_time = timezone.now() - timezone.timedelta(days=1)

        self.assertTrue(target.is_complete)
Example #59
0
 def get_context_data(self, **kwargs):
     context = super().get_context_data(**kwargs)
     five_min_delta = timezone.now() - timezone.timedelta(minutes=5)
     animal = self.model.objects.filter(pk=self.kwargs['pk'])
     context['visit_in_five_min'] = animal.filter(visitinganimals__visit_time__gte=five_min_delta).count()
     return context
Example #60
0
 def active_invites(self) -> QuerySet:
     return self.invites.filter(
         created_at__gte=timezone.now() -
         timezone.timedelta(days=INVITE_DAYS_VALIDITY))