@@ -240,81 +240,74 @@ def associate_user_group(
240240 User .objects .get (username = instance ).groups .add (Group .objects .get (name = 'bco_drafter' ))
241241 User .objects .get (username = instance ).groups .add (Group .objects .get (name = 'bco_publisher' ))
242242
243- # Link user creation to token generation.
244- # Source: https://www.django-rest-framework.org/api-guide/authentication/#generating-tokens
245- @receiver (
246- post_save ,
247- sender = User
248- )
249- def create_auth_token (
250- sender ,
251- instance = None ,
252- created = False ,
253- ** kwargs
254- ):
255- if created :
256243
244+ @receiver (post_save , sender = User )
245+ def create_auth_token (sender , instance = None , created = False , ** kwargs ):
246+ """Link user creation to token generation.
247+ Source: https://www.django-rest-framework.org/api-guide/authentication/#generating-tokens
248+ """
249+ if created :
257250 # The anonymous user's token is hard-coded
258251 # in server.conf.
259252 if instance .username == 'anon' :
260-
261253 # Create anon's record with the hard-coded key.
262- Token .objects .create (
263- user = instance ,
264- key = settings .ANON_KEY
265- )
266-
254+ Token .objects .create (user = instance , key = settings .ANON_KEY )
267255 else :
268-
269256 # Create a normal user's record.
270- Token .objects .create (
271- user = instance
272- )
257+ Token .objects .create (user = instance )
273258
274259
275260# --- Group --- #
276-
277-
278- # Link group deletion to permissions deletion.
279-
280- # pre_delete and NOT post_delete because we need
281- # to get the Group's information before deleting it.
282- @receiver (
283- pre_delete ,
284- sender = Group
285- )
286- def delete_group_perms (
287- sender ,
288- instance = None ,
289- ** kwargs
290- ):
261+ @receiver (pre_delete , sender = Group )
262+ def delete_group_perms (sender , instance = None , ** kwargs ):
263+ """
264+ Link group deletion to permissions deletion.
265+ pre_delete and NOT post_delete because we need
266+ to get the Group's information before deleting it.
267+ """
291268 for perm in ['add_members_' + instance .name , 'delete_members_' + instance .name ]:
292- Permission .objects .filter (
293- codename = perm
294- ).delete ()
269+ Permission .objects .filter (codename = perm ).delete ()
295270
296271
297272# --- Prefix --- #
273+ @receiver (post_save , sender = prefixes )
274+ def create_permissions_for_prefix (sender , instance = None , created = False , ** kwargs ):
275+ """Link prefix creation to permissions creation.
276+ Check to see whether or not the permissions
277+ have already been created for this prefix.
278+ Create the macro-level, draft, and publish permissions.
279+ Give FULL permissions to the prefix user owner
280+ and their group.
298281
282+ No try/except necessary here as the user's existence
283+ has already been verified upstream.
284+
285+ Source: https://stackoverflow.com/a/20361273
286+ """
299287
300- # Link prefix creation to permissions creation.
301- @receiver (
302- post_save ,
303- sender = prefixes
304- )
305- def create_permissions_for_prefix (
306- sender ,
307- instance = None ,
308- created = False ,
309- ** kwargs
310- ):
311288 if created :
289+ user = User .objects .get (username = instance .owner_user )
290+ user_group = Group .objects .get (name = instance .owner_user )
291+ draft = instance .prefix .lower () + '_drafters'
292+ publish = instance .prefix .lower () + '_publishers'
293+
294+ if len (Group .objects .filter (name = draft )) != 0 :
295+ drafters = Group .objects .get (name = draft )
296+ user .groups .add (drafters )
297+ else :
298+ Group .objects .create (name = draft )
299+ drafters = Group .objects .get (name = draft )
300+ user .groups .add (drafters )
312301
313- # Check to see whether or not the permissions
314- # have already been created for this prefix.
315- try :
302+ if len (Group .objects .filter (name = publish )) != 0 :
303+ publishers = Group .objects .get (name = publish )
304+ user .groups .add (publishers )
305+ else :
306+ Group .objects .create (name = publish )
307+ publishers = Group .objects .get (name = publish )
308+ user .groups .add (publishers )
316309
317- # Create the macro-level, draft, and publish permissions.
310+ try :
318311 for perm in ['add' , 'change' , 'delete' , 'view' , 'draft' , 'publish' ]:
319312 Permission .objects .create (
320313 name = 'Can ' + perm + ' BCOs with prefix ' + instance .prefix ,
@@ -324,102 +317,56 @@ def create_permissions_for_prefix(
324317 ),
325318 codename = perm + '_' + instance .prefix
326319 )
327-
328- # Give FULL permissions to the prefix user owner
329- # and their group.
330-
331- # No try/except necessary here as the user's existence
332- # has already been verified upstream.
333-
334- # Source: https://stackoverflow.com/a/20361273
335-
336- User .objects .get (
337- username = instance .owner_user
338- ).user_permissions .add (
339- Permission .objects .get (
340- codename = perm + '_' + instance .prefix
341- )
342- )
343-
344- Group .objects .get (
345- name = instance .owner_user
346- ).permissions .add (
347- Permission .objects .get (
348- codename = perm + '_' + instance .prefix
349- )
350- )
351-
320+ new_perm = Permission .objects .get (
321+ codename = perm + '_' + instance .prefix )
322+ user .user_permissions .add (new_perm )
323+ user_group .permissions .add (new_perm )
324+ publishers .permissions .add (new_perm )
325+ if perm == 'publish' :
326+ pass
327+ else :
328+ drafters .permissions .add (new_perm )
329+
352330 except PermErrors .IntegrityError :
353-
354331 # The permissions already exist.
355332 pass
356333
357334
358- # Link prefix deletion to permissions deletion.
359- @receiver (
360- post_delete ,
361- sender = prefixes
362- )
363- def delete_permissions_for_prefix (
364- sender ,
365- instance = None ,
366- ** kwargs
367- ):
368- # No risk of raising an error when using
369- # a filter.
370- Permission .objects .filter (
371- codename = 'add_' + instance .prefix
372- ).delete ()
373-
374- Permission .objects .filter (
375- codename = 'change_' + instance .prefix
376- ).delete ()
377-
378- Permission .objects .filter (
379- codename = 'delete_' + instance .prefix
380- ).delete ()
381-
382- Permission .objects .filter (
383- codename = 'view_' + instance .prefix
384- ).delete ()
335+ @receiver (post_delete , sender = prefixes )
336+ def delete_permissions_for_prefix (sender , instance = None , ** kwargs ):
337+ """Link prefix deletion to permissions deletion.
338+ No risk of raising an error when using
339+ a filter.
340+ """
385341
386- Permission .objects .filter (
387- codename = 'draft_' + instance .prefix
388- ).delete ()
389-
390- Permission .objects .filter (
391- codename = 'publish_' + instance .prefix
392- ).delete ()
342+ Permission .objects .filter (codename = 'add_' + instance .prefix ).delete ()
343+ Permission .objects .filter (codename = 'change_' + instance .prefix ).delete ()
344+ Permission .objects .filter (codename = 'delete_' + instance .prefix ).delete ()
345+ Permission .objects .filter (codename = 'view_' + instance .prefix ).delete ()
346+ Permission .objects .filter (codename = 'draft_' + instance .prefix ).delete ()
347+ Permission .objects .filter (codename = 'publish_' + instance .prefix ).delete ()
393348
394349
395350# --- Group info --- #
396-
397-
398351# Link group creation to permission creation.
399352@receiver (post_save , sender = group_info )
400- def create_group_perms (
401- sender ,
402- instance = None ,
403- created = False ,
404- ** kwargs
405- ):
353+ def create_group_perms (sender , instance = None , created = False , ** kwargs ):
406354 if created :
407355 # Check to see whether or not the permissions
408356 # have already been created for this prefix.
409357 try :
410358 # Create the permissions, then use group_info to give the group admin
411359 # the admin permissions.
412360 # Create the administrative permissions for the group.
413- for perm in ['add_members_' + Group . objects . get ( id = instance .group_id ). name ,
414- 'delete_members_' + Group . objects . get ( id = instance .group_id ). name ]:
361+ for perm in ['add_members_' + instance .group_id ,
362+ 'delete_members_' + instance .group_id ]:
415363 Permission .objects .create (
416364 name = 'Can ' + perm ,
417365 content_type = ContentType .objects .get (app_label = 'auth' , model = 'group' ),
418366 codename = perm )
419367 # Give the administrative permissions to the user
420368 # creating this group.
421- import pdb ; pdb .set_trace ()
422- User .objects .get (id = instance .owner_user_id ).user_permissions .add (Permission .objects .get (codename = perm ))
369+ User .objects .get (id = instance .id ).user_permissions .add (Permission .objects .get (codename = perm ))
423370
424371 except PermErrors .IntegrityError :
425372
@@ -428,8 +375,6 @@ def create_group_perms(
428375
429376
430377# --- BCO --- #
431-
432-
433378# Link draft creation to permission creation
434379@receiver (
435380 post_save ,
0 commit comments