@@ -116,21 +116,30 @@ def has_role(self, role: str) -> bool:
116116 return role in [r .name for r in list (self .roles )]
117117
118118
119- @event .listens_for (Person .organisation , "set" , raw = True , propagate = True )
120- def before_person_update (target , value , oldvalue , initiator ):
119+ # associate the listener function with SomeClass,
120+ # to execute during the "before_insert" hook
121+ @event .listens_for (User , "before_insert" )
122+ @event .listens_for (Guest , "before_insert" )
123+ @event .listens_for (User , "before_update" )
124+ @event .listens_for (Guest , "before_update" )
125+ def my_before_person_organisation (mapper , connection , target ):
121126 # execute a stored procedure upon INSERT,
122127 # apply the value to the row to be inserted
123- value = value . strip (). lower ()
128+ value = target . organisation . strip ()
124129 try :
125- org = (
126- target .session .query (Organization )
127- .filter (func .lower (Organization .name ) == value )
128- .one ()
129- )
130- except NoResultFound :
131- neworg = Organization (name = value )
132- target .session .add (neworg )
133- org = neworg .name
130+ org = connection .execute (
131+ text ("select name from organizations WHERE name ilike '%s' " % value )
132+ ).scalar ()
133+ if org is None :
134+ org = connection .execute (
135+ text (
136+ "insert into organizations(name) values('%s') RETURNING name"
137+ % value
138+ )
139+ ).scalar ()
140+
141+ except :
142+ pass
134143 assert org is not None , NO_ORGANIZATION_ADDED
135144
136145
0 commit comments