@@ -331,14 +331,14 @@ class SignatureRoles(Base):
331
331
role_name = Column (String , unique = True )
332
332
role_method = Column (Enum ('signature' , 'relationship' , 'group' , 'static' ), default = 'relationship' )
333
333
form_name = Column (String )
334
- preceded_by_id = Column (Integer , ForeignKey ('signature_roles.id' ))
335
- succeeded_by_id = Column (Integer , ForeignKey ('signature_roles.id' ))
334
+ preceded_by_id = Column (Integer , ForeignKey ('signature_roles.id' ), nullable = True )
335
+ succeeded_by_id = Column (Integer , ForeignKey ('signature_roles.id' ), nullable = True )
336
336
on_approve = Column (Enum ('step_up' , 'finish' ), default = 'finish' )
337
337
on_deny = Column (Enum ('restart' , 'step_down' , 'kill' ), default = 'restart' )
338
338
on_return = Column (Enum ('restart' , 'step_down' ), default = 'restart' )
339
339
comments_required = Column (Boolean , default = False )
340
340
341
- last_updated = Column (DateTime , nullable = False , default = tz_aware_datetime , onupdate = datetime . utcnow )
341
+ last_updated = Column (DateTime , nullable = False , default = tz_aware_datetime , onupdate = tz_aware_datetime )
342
342
created_on = Column (DateTime , nullable = False , default = tz_aware_datetime )
343
343
344
344
preceded_by = relationship ("SignatureRoles" , remote_side = [id ], foreign_keys = [preceded_by_id ], backref = "preceding_role" )
@@ -348,6 +348,61 @@ class SignatureRoles(Base):
348
348
relationship_target = Column (Integer , ForeignKey ('relationship_types.id' ))
349
349
static_target = Column (Integer , ForeignKey ('user.id' ))
350
350
351
+
352
+ def to_dict (self ):
353
+ """
354
+ Converts a signature role into a dictionary format.
355
+ """
356
+
357
+
358
+ id = Column (Integer , primary_key = True )
359
+ role_name = Column (String , unique = True )
360
+ role_method = Column (Enum ('signature' , 'relationship' , 'group' , 'static' ), default = 'relationship' )
361
+ form_name = Column (String )
362
+ preceded_by_id = Column (Integer , ForeignKey ('signature_roles.id' ), )
363
+ succeeded_by_id = Column (Integer , ForeignKey ('signature_roles.id' ), nullable = True )
364
+ on_approve = Column (Enum ('step_up' , 'finish' ), default = 'finish' )
365
+ on_deny = Column (Enum ('restart' , 'step_down' , 'kill' ), default = 'restart' )
366
+ on_return = Column (Enum ('restart' , 'step_down' ), default = 'restart' )
367
+ comments_required = Column (Boolean , default = False )
368
+
369
+ last_updated = Column (DateTime , nullable = False , default = tz_aware_datetime , onupdate = tz_aware_datetime )
370
+ created_on = Column (DateTime , nullable = False , default = tz_aware_datetime )
371
+
372
+ preceded_by = relationship ("SignatureRoles" , remote_side = [id ], foreign_keys = [preceded_by_id ], backref = "preceding_role" )
373
+ succeeded_by = relationship ("SignatureRoles" , remote_side = [id ], foreign_keys = [succeeded_by_id ], backref = "succeeding_role" )
374
+
375
+ group_target = Column (Integer , ForeignKey ('group.id' ))
376
+ relationship_target = Column (Integer , ForeignKey ('relationship_types.id' ))
377
+ static_target = Column (Integer , ForeignKey ('user.id' ))
378
+
379
+ role_dict = {
380
+ "id" :self .id ,
381
+ "role_name" :self .role_name ,
382
+ "role_method" :self .role_method ,
383
+ "form_name" :self .form_name ,
384
+ "on_approve" :self .on_approve ,
385
+ "on_deny" :self .on_deny ,
386
+ "on_return" :self .on_return ,
387
+ "comments_required" :self .comments_required ,
388
+ "last_updated" :self .last_updated ,
389
+ "created_on" :self .created_on ,
390
+ "preceded_by" :self .preceded_by ,
391
+ "succeeded_by" :self .succeeded_by ,
392
+ }
393
+
394
+ # We exclude the `signature` target option, which is targeted at the
395
+ # owning user..
396
+ if self .role_method == "group" :
397
+ role_dict ['target' ] = self .group_target
398
+ elif self .role_method == "relationship" :
399
+ role_dict ['target' ] = self .relationship_target
400
+ elif self .role_method == "static" :
401
+ role_dict ['target' ] = self .static_target
402
+
403
+ return role_dict
404
+
405
+
351
406
# Create a custom Signing class from sqlalchemy_signing
352
407
Signing = create_signing_class (Base , tz_aware_datetime )
353
408
@@ -366,8 +421,8 @@ class SignatureRoles(Base):
366
421
if create_all :
367
422
Base .metadata .create_all (bind = engine )
368
423
369
- return { # this approach is a little bit of syntactic salt to ensure we
370
- "User" : User , # purposefully merge new models into the mainline code
424
+ return { # This approach is a little bit of syntactic salt to ensure we
425
+ "User" : User , # purposefully merge new models into the mainline code.
371
426
"Group" : Group ,
372
427
"TransactionLog" : TransactionLog ,
373
428
"SignatureRoles" : SignatureRoles ,
0 commit comments