Advertisement
kira_111

Untitled

Mar 1st, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1.  
  2. def postSave(self, parsed):
  3. extra_columns = {}
  4.  
  5. for org in self.data.mentor_for:
  6. for column in org.proposal_extra:
  7. extra_columns.setdefault(org.key.id(), []).append(column)
  8.  
  9. for _, properties in parsed.iteritems():
  10. if 'org_key' not in properties or 'full_proposal_key' not in properties:
  11. logging.warning("Missing key in '%s'", properties)
  12. continue
  13.  
  14. org_key_name = properties.pop('org_key')
  15. proposal_key = properties.pop('full_proposal_key')
  16.  
  17. valid_columns = set(extra_columns.get(org_key_name, []))
  18. remove_properties = []
  19.  
  20. for key, value in properties.iteritems():
  21. if key not in valid_columns:
  22. logging.warning("Invalid property '%s'", key)
  23. remove_properties.append(key)
  24. try:
  25. cleaning.sanitize_html_string(value)
  26. except Exception:
  27. remove_properties.append(key)
  28.  
  29. for prop in remove_properties:
  30. properties.pop(prop)
  31.  
  32. def update_proposal_txn():
  33. proposal = db.get(db.Key(proposal_key))
  34.  
  35. if not proposal:
  36. logging.warning("Invalid proposal_key '%s'", proposal_key)
  37. return
  38.  
  39. data = {}
  40.  
  41. if proposal.extra:
  42. # we have to loads in the txn, should be fast enough
  43. data = json.loads(proposal.extra)
  44.  
  45. data.update(properties)
  46.  
  47. proposal.extra = json.dumps(data)
  48. proposal.put()
  49.  
  50. db.run_in_transaction(update_proposal_txn)
  51.  
  52. return True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement