Skip to content

Commit a009180

Browse files
committed
Added: [untested] to_dict method for signature roles (#62)
1 parent dbc3517 commit a009180

File tree

1 file changed

+60
-5
lines changed

1 file changed

+60
-5
lines changed

libreforms_fastapi/utils/sqlalchemy_models.py

+60-5
Original file line numberDiff line numberDiff line change
@@ -331,14 +331,14 @@ class SignatureRoles(Base):
331331
role_name = Column(String, unique=True)
332332
role_method = Column(Enum('signature', 'relationship', 'group', 'static'), default='relationship')
333333
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)
336336
on_approve = Column(Enum('step_up', 'finish'), default='finish')
337337
on_deny = Column(Enum('restart', 'step_down', 'kill'), default='restart')
338338
on_return = Column(Enum('restart', 'step_down'), default='restart')
339339
comments_required = Column(Boolean, default=False)
340340

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)
342342
created_on = Column(DateTime, nullable=False, default=tz_aware_datetime)
343343

344344
preceded_by = relationship("SignatureRoles", remote_side=[id], foreign_keys=[preceded_by_id], backref="preceding_role")
@@ -348,6 +348,61 @@ class SignatureRoles(Base):
348348
relationship_target = Column(Integer, ForeignKey('relationship_types.id'))
349349
static_target = Column(Integer, ForeignKey('user.id'))
350350

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+
351406
# Create a custom Signing class from sqlalchemy_signing
352407
Signing = create_signing_class(Base, tz_aware_datetime)
353408

@@ -366,8 +421,8 @@ class SignatureRoles(Base):
366421
if create_all:
367422
Base.metadata.create_all(bind=engine)
368423

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.
371426
"Group": Group,
372427
"TransactionLog": TransactionLog,
373428
"SignatureRoles": SignatureRoles,

0 commit comments

Comments
 (0)