Ralph Bean avatar Ralph Bean committed bda5403

No force delete for object relations.

Comments (0)

Files changed (3)

tests/test_widgets.py

         'child': twf.Form(
             child=twf.GridLayout(
                 children=[
-                    twf.HiddenField(id='id'),
+                    twf.HiddenField(id='id', validator=twc.IntValidator),
                     twf.TextField(id='name'),
                 ])
             ),

tw2/sqla/utils.py

     return obj
 
 
-def from_list(entity, objects, data):
+def from_list(entity, objects, data, force_delete=False):
     """
     Update a list of mapped objects with data from a JSON-style nested dict/list
     structure.
 
     for d in obj_map.values():
         objects.remove(d)
-        d.query.session.delete(d)
+        if force_delete:
+            # Only fully delete 'unreferenced' objects if explicitly told to do
+            # so.  You would *not* want to do this in a database of friends
+            # where sally and suzie stop being friends but you do not want suzie
+            # deleted from the database alltogether.
+            d.query.session.delete(d)
 
 
 def update_or_create(cls, data):

tw2/sqla/widgets.py

         
     @classmethod
     def validated_request(cls, req, data):
-        utils.from_list(cls.entity, cls.entity.query.all(), data)
+        utils.from_list(cls.entity, cls.entity.query.all(), data,
+                        force_delete=True)
         transaction.commit()
         if hasattr(cls, 'redirect'):
             return webob.Response(request=req, status=302, location=cls.redirect)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.