@@ -199,20 +199,6 @@ def create_screenshot_file(self, is_thumbnail=False):
199199 )
200200 return screenshot_file
201201
202- def save (self , * args , ** kwargs ):
203- def test_exists (pk ):
204- if list (self .__class__ .objects .filter (pk = pk )):
205- new_id = create_slug_hash_6 ()
206- test_exists (new_id )
207- else :
208- return pk
209-
210- if self ._state .adding :
211- self .id = create_slug_hash_6 ()
212- self .id = test_exists (self .id )
213-
214- super ().save (* args , ** kwargs )
215-
216202 def image_twitter (self ):
217203 if bool (self .screenshot ):
218204 return get_thumbnail (
@@ -235,53 +221,58 @@ def __str__(self):
235221 else :
236222 return self .title
237223
224+ def save (self , * args , ** kwargs ):
225+ def test_exists (pk ):
226+ if list (self .__class__ .objects .filter (pk = pk )):
227+ new_id = create_slug_hash_6 ()
228+ test_exists (new_id )
229+ else :
230+ return pk
231+
232+ if self ._state .adding :
233+ self .id = create_slug_hash_6 ()
234+ self .id = test_exists (self .id )
235+
236+ if self .data :
237+ storage = OverwriteStorage ()
238+ if self .permission is int (SnapshotPermission .PUBLIC ):
239+ self .create_meta (storage )
240+ else :
241+ storage .delete (f'snapshot-meta/{ self .id } .html' )
242+
243+ super ().save (* args , ** kwargs )
238244
239- @receiver (post_save , sender = Snapshot )
240- def save_screenshot_handler (sender , ** kwargs ):
241- instance = kwargs .get ('instance' )
245+ if hasattr (settings , 'SAVE_SCREENSHOT_ENABLED' ) and settings .SAVE_SCREENSHOT_ENABLED is True :
246+ self .create_screenshot ()
242247
243- def save_screenshot ():
244- post_save .disconnect (save_screenshot_handler , sender = Snapshot )
248+ super ().save (* args , ** kwargs )
249+
250+ def create_screenshot (self ):
245251 # only create snapshot if data changed
246- if instance .data_changed ([
252+ if self .data_changed ([
247253 'data' , 'screenshot_generated' , 'thumbnail_generated'
248- ]) or not bool (instance .thumbnail_generated ):
249- if not 'resources' in instance .data :
250- return
251- try :
252- # disconnect to break save recursive loop
253- post_save .disconnect (save_screenshot_handler , sender = Snapshot )
254- screenshot_file = instance .create_screenshot_file ()
255- thumbnail_file = instance .create_screenshot_file (is_thumbnail = True )
256- instance .screenshot_generated = screenshot_file
257- instance .thumbnail_generated = thumbnail_file
258- instance .save ()
259- finally :
260- # always reconnect signal
261- post_save .connect (save_screenshot_handler , sender = Snapshot )
262-
263- def save_meta (storage ):
254+ ]) or not bool (self .thumbnail_generated ):
255+ print ('resources' , 'resources' in self .data )
256+ if not 'resources' in self .data :
257+ raise ValueError ('no resources key in data' )
258+
259+ screenshot_file = self .create_screenshot_file ()
260+ thumbnail_file = self .create_screenshot_file (is_thumbnail = True )
261+ self .screenshot_generated = screenshot_file
262+ self .thumbnail_generated = thumbnail_file
263+
264+ def create_meta (self , storage ):
264265 domain = Site .objects .get_current ().domain
265266 proto = 'https' if settings .USE_HTTPS else 'http'
266267 meta = f'''
267- <meta property="og:title" content="{ instance .title_data } ">
268- <meta property="og:description" content="{ instance .description_data } ">
268+ <meta property="og:title" content="{ self .title_data } ">
269+ <meta property="og:description" content="{ self .description_data } ">
269270<meta property="og:type" content="website">
270- <meta property="og:url" content="{ proto } ://{ domain } { instance .get_absolute_url ()} ">
271- <meta property="og:image" content="{ proto } ://{ domain } /{ instance .image_facebook ()} ">
272- <meta name="twitter:image" content="{ proto } ://{ domain } /{ instance .image_twitter ()} ">
271+ <meta property="og:url" content="{ proto } ://{ domain } { self .get_absolute_url ()} ">
272+ <meta property="og:image" content="{ proto } ://{ domain } /{ self .image_facebook ()} ">
273+ <meta name="twitter:image" content="{ proto } ://{ domain } /{ self .image_twitter ()} ">
273274'''
274- storage .save (f'snapshot-meta/{ instance .id } .html' , ContentFile (meta ))
275-
276- if hasattr (settings , 'SAVE_SCREENSHOT_ENABLED' ) and settings .SAVE_SCREENSHOT_ENABLED is True :
277- save_screenshot ()
278-
279- if instance .data :
280- storage = OverwriteStorage ()
281- if instance .permission is int (SnapshotPermission .PUBLIC ):
282- save_meta (storage )
283- else :
284- storage .delete (f'snapshot-meta/{ instance .id } .html' )
275+ storage .save (f'snapshot-meta/{ self .id } .html' , ContentFile (meta ))
285276
286277
287278class Workspace (models .Model ):
0 commit comments