41
41
from gsoc .common .utils .tools import build_send_reminder_json
42
42
from gsoc .settings import PROPOSALS_PATH , BASE_DIR
43
43
from settings_local import ADMINS
44
+ from gsoc .common .utils .googleoauth import getCreds
44
45
45
- from google .auth .transport .requests import Request
46
- from google .oauth2 .credentials import Credentials
47
- from google_auth_oauthlib .flow import InstalledAppFlow
48
-
49
- SCOPES = ['https://www.googleapis.com/auth/calendar' ]
50
46
51
47
# Util Functions
52
48
@@ -66,27 +62,6 @@ def validate_date(value):
66
62
except GsocEndDate .DoesNotExist :
67
63
pass
68
64
69
-
70
- def getCreds ():
71
- creds = None
72
- if os .path .exists (os .path .join (BASE_DIR , 'token.json' )):
73
- creds = Credentials .from_authorized_user_file (
74
- os .path .join (BASE_DIR , 'token.json' ),
75
- SCOPES
76
- )
77
- if not creds or not creds .valid :
78
- if creds and creds .expired and creds .refresh_token :
79
- creds .refresh (Request ())
80
- else :
81
- flow = InstalledAppFlow .from_client_secrets_file (
82
- os .path .join (BASE_DIR , 'credentials.json' ),
83
- SCOPES
84
- )
85
- creds = flow .run_local_server (port = 0 )
86
- with open (os .path .join (BASE_DIR , 'token.json' ), 'w' ) as token :
87
- token .write (creds .to_json ())
88
- return creds
89
-
90
65
91
66
# Patching
92
67
@@ -596,13 +571,25 @@ class Timeline(models.Model):
596
571
calendar_id = models .CharField (max_length = 255 , null = True , blank = True )
597
572
598
573
def add_calendar (self ):
599
- if not self .calendar_id :
600
- creds = getCreds ()
601
- service = build ("calendar" , "v3" , credentials = creds , cache_discovery = False )
602
- calendar = {"summary" : "GSoC @ PSF Calendar" , "timezone" : "UTC" }
603
- calendar = service .calendars ().insert (body = calendar ).execute ()
604
- self .calendar_id = calendar .get ("id" )
605
- self .save ()
574
+ builder_data = json .dumps ({
575
+ "timeline_id" : self .id ,
576
+ "calendar_id" : self .calendar_id
577
+ })
578
+ try :
579
+ builder = Builder .objects .get (
580
+ category = "build_add_timeline_to_calendar" ,
581
+ timeline = self
582
+ )
583
+ builder .activation_date = datetime .datetime .now ()
584
+ builder .calendar_id = self .calendar_id
585
+ builder .save ()
586
+ except Builder .DoesNotExist :
587
+ Builder .objects .create (
588
+ category = "build_add_timeline_to_calendar" ,
589
+ activation_date = datetime .datetime .now (),
590
+ data = builder_data ,
591
+ timeline = self
592
+ )
606
593
607
594
608
595
class Builder (models .Model ):
@@ -611,15 +598,28 @@ class Builder(models.Model):
611
598
("build_post_blog_reminders" , "build_post_blog_reminders" ),
612
599
("build_revoke_student_perms" , "build_revoke_student_perms" ),
613
600
("build_remove_user_details" , "build_remove_user_details" ),
601
+ ("build_add_timeline_to_calendar" , "build_add_timeline_to_calendar" ),
602
+ ("build_add_bpdd_to_calendar" , "build_add_bpdd_to_calendar" ),
603
+ ("build_add_event_to_calendar" , "build_add_event_to_calendar" )
614
604
)
615
605
616
606
category = models .CharField (max_length = 40 , choices = categories )
617
607
activation_date = models .DateTimeField (null = True , blank = True )
618
608
built = models .BooleanField (default = None , null = True )
619
609
data = models .TextField ()
620
610
last_error = models .TextField (null = True , default = None , blank = True )
621
- timeline = models .ForeignKey (
622
- Timeline , on_delete = models .CASCADE , null = True , blank = True
611
+ timeline = models .ForeignKey (Timeline , on_delete = models .CASCADE )
612
+ bpdd = models .ForeignKey (
613
+ 'BlogPostDueDate' ,
614
+ on_delete = models .CASCADE ,
615
+ null = True ,
616
+ blank = True
617
+ )
618
+ event = models .ForeignKey (
619
+ 'Event' ,
620
+ on_delete = models .CASCADE ,
621
+ null = True ,
622
+ blank = True
623
623
)
624
624
625
625
def __str__ (self ):
@@ -649,26 +649,30 @@ def calendar_link(self):
649
649
return None
650
650
651
651
def add_to_calendar (self ):
652
- creds = getCreds ()
653
- service = build ("calendar" , "v3" , credentials = creds , cache_discovery = False )
654
- event = {
655
- "summary" : self .title ,
656
- "start" : {"date" : self .start_date .strftime ("%Y-%m-%d" )},
657
- "end" : {"date" : self .end_date .strftime ("%Y-%m-%d" )},
658
- }
659
- cal_id = self .timeline .calendar_id if self .timeline else "primary"
660
- if not self .event_id :
661
- event = (
662
- service .events ()
663
- .insert (calendarId = cal_id , body = event )
664
- .execute ()
652
+ builder_data = json .dumps ({
653
+ "id" : self .id ,
654
+ "title" : self .title ,
655
+ "start_date" : str (self .start_date .strftime ('%Y-%m-%d' )),
656
+ "end_date" : str (self .end_date .strftime ('%Y-%m-%d' )),
657
+ "event_id" : self .event_id
658
+ })
659
+ try :
660
+ builder = Builder .objects .get (
661
+ category = "build_add_event_to_calendar" ,
662
+ timeline = self .timeline ,
663
+ event = self
664
+ )
665
+ builder .activation_date = datetime .datetime .now ()
666
+ builder .built = None
667
+ builder .data = builder_data
668
+ builder .save ()
669
+ except Builder .DoesNotExist :
670
+ Builder .objects .create (
671
+ category = "build_add_event_to_calendar" ,
672
+ activation_date = datetime .datetime .now (),
673
+ data = builder_data ,
674
+ timeline = self .timeline ,
665
675
)
666
- self .event_id = event .get ("id" )
667
- self .save ()
668
- else :
669
- service .events ().update (
670
- calendarId = cal_id , eventId = self .event_id , body = event
671
- ).execute ()
672
676
673
677
def delete_from_calendar (self ):
674
678
if self .event_id :
@@ -722,26 +726,30 @@ class Meta:
722
726
category = models .IntegerField (choices = categories , null = True , blank = True )
723
727
724
728
def add_to_calendar (self ):
725
- creds = getCreds ()
726
- service = build ("calendar" , "v3" , credentials = creds , cache_discovery = False )
727
- event = {
728
- "summary" : self .title ,
729
- "start" : {"date" : self .date .strftime ("%Y-%m-%d" )},
730
- "end" : {"date" : self .date .strftime ("%Y-%m-%d" )},
731
- }
732
- cal_id = self .timeline .calendar_id if self .timeline else "primary"
733
- if not self .event_id :
734
- event = (
735
- service .events ()
736
- .insert (calendarId = cal_id , body = event )
737
- .execute ()
729
+ builder_data = json .dumps ({
730
+ "id" : self .id ,
731
+ "title" : self .title ,
732
+ "date" : str (self .date .strftime ('%Y-%m-%d' )),
733
+ "event_id" : self .event_id
734
+ })
735
+ try :
736
+ builder = Builder .objects .get (
737
+ category = "build_add_bpdd_to_calendar" ,
738
+ timeline = self .timeline ,
739
+ bpdd = self
740
+ )
741
+ builder .activation_date = datetime .datetime .now ()
742
+ builder .built = None
743
+ builder .data = builder_data
744
+ builder .save ()
745
+ except Builder .DoesNotExist :
746
+ Builder .objects .create (
747
+ category = "build_add_bpdd_to_calendar" ,
748
+ activation_date = datetime .datetime .now (),
749
+ data = builder_data ,
750
+ timeline = self .timeline ,
751
+ bpdd = self
738
752
)
739
- self .event_id = event .get ("id" )
740
- self .save ()
741
- else :
742
- service .events ().update (
743
- calendarId = cal_id , eventId = self .event_id , body = event
744
- ).execute ()
745
753
746
754
def delete_from_calendar (self ):
747
755
if self .event_id :
0 commit comments