4141from gsoc .common .utils .tools import build_send_reminder_json
4242from gsoc .settings import PROPOSALS_PATH , BASE_DIR
4343from settings_local import ADMINS
44+ from gsoc .common .utils .googleoauth import getCreds
4445
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' ]
5046
5147# Util Functions
5248
@@ -66,27 +62,6 @@ def validate_date(value):
6662 except GsocEndDate .DoesNotExist :
6763 pass
6864
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-
9065
9166# Patching
9267
@@ -596,13 +571,25 @@ class Timeline(models.Model):
596571 calendar_id = models .CharField (max_length = 255 , null = True , blank = True )
597572
598573 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+ )
606593
607594
608595class Builder (models .Model ):
@@ -611,15 +598,28 @@ class Builder(models.Model):
611598 ("build_post_blog_reminders" , "build_post_blog_reminders" ),
612599 ("build_revoke_student_perms" , "build_revoke_student_perms" ),
613600 ("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" )
614604 )
615605
616606 category = models .CharField (max_length = 40 , choices = categories )
617607 activation_date = models .DateTimeField (null = True , blank = True )
618608 built = models .BooleanField (default = None , null = True )
619609 data = models .TextField ()
620610 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
623623 )
624624
625625 def __str__ (self ):
@@ -649,26 +649,30 @@ def calendar_link(self):
649649 return None
650650
651651 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 ,
665675 )
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 ()
672676
673677 def delete_from_calendar (self ):
674678 if self .event_id :
@@ -722,26 +726,30 @@ class Meta:
722726 category = models .IntegerField (choices = categories , null = True , blank = True )
723727
724728 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
738752 )
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 ()
745753
746754 def delete_from_calendar (self ):
747755 if self .event_id :
0 commit comments