def create_marker_user(event_key, message_key, user_key): """Scan over the given set of groups, sending the broadcast to everyone in those groups. """ from sosbeacon.utils import insert_tasks from sosbeacon.event.contact_marker import ContactMarker from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.student import Student from sosbeacon.student import DEFAULT_STUDENT_ID methods = set() if message_key.get().message_type == 'eo': methods.add(user_key.get().email) else: methods.add(user_key.get().phone) methods.add(user_key.get().email) marker = get_marker_for_methods(event_key, methods) student_key = ndb.Key(Student, "%s-%s" % (DEFAULT_STUDENT_ID, user_key.id()), namespace='_x_') if not marker: # TODO: What needs set? short_id = str(ContactMarker.allocate_ids(size=1, parent=event_key)[0]) key_id = "%s:%s" % (event_key.id(), user_key.id()) marker = ContactMarker( id=key_id, event=event_key, first_name=user_key.get().first_name, last_name=user_key.get().last_name, students={str(student_key.id()): []}, short_id=short_id, methods=[user_key.get().email, user_key.get().phone], count_comment=0, count_visit=0, is_user=True) marker.acknowledged = True marker.put() tasks = [] for method in methods: # TODO: Batch tasks or start tasks.append( get_broadcast_method_to_user_task(event_key, message_key, user_key, method)) if len(tasks) > 10: insert_tasks(tasks, USER_TX_QUEUE) tasks = [] if tasks: insert_tasks(tasks, USER_TX_QUEUE)
def create_marker_user(event_key, message_key, user_key): """Scan over the given set of groups, sending the broadcast to everyone in those groups. """ from sosbeacon.utils import insert_tasks from sosbeacon.event.contact_marker import ContactMarker from sosbeacon.event.contact_marker import get_marker_for_methods from sosbeacon.student import Student from sosbeacon.student import DEFAULT_STUDENT_ID methods = set() if message_key.get().message_type == "eo": methods.add(user_key.get().email) else: methods.add(user_key.get().phone) methods.add(user_key.get().email) marker = get_marker_for_methods(event_key, methods) student_key = ndb.Key(Student, "%s-%s" % (DEFAULT_STUDENT_ID, user_key.id()), namespace="_x_") if not marker: # TODO: What needs set? short_id = str(ContactMarker.allocate_ids(size=1, parent=event_key)[0]) key_id = "%s:%s" % (event_key.id(), user_key.id()) marker = ContactMarker( id=key_id, event=event_key, first_name=user_key.get().first_name, last_name=user_key.get().last_name, students={str(student_key.id()): []}, short_id=short_id, methods=[user_key.get().email, user_key.get().phone], count_comment=0, count_visit=0, is_user=True, ) marker.acknowledged = True marker.put() tasks = [] for method in methods: # TODO: Batch tasks or start tasks.append(get_broadcast_method_to_user_task(event_key, message_key, user_key, method)) if len(tasks) > 10: insert_tasks(tasks, USER_TX_QUEUE) tasks = [] if tasks: insert_tasks(tasks, USER_TX_QUEUE)
class TestUpdateMarkerPair(unittest.TestCase): """Ensure update_marker_pair updates the two markers, and remerges if a marker is out of date. """ def setUp(self): from google.appengine.datastore.datastore_stub_util import \ TimeBasedHRConsistencyPolicy from sosbeacon.event.contact_marker import ContactMarker self.testbed = testbed.Testbed() self.testbed.activate() self.testbed.setup_env(app_id='testapp') self.testbed.init_datastore_v3_stub( consistency_policy=TimeBasedHRConsistencyPolicy()) self.testbed.init_memcache_stub() self.marker1 = ContactMarker( id='a', students={'a': 'student_a'}, methods=['method_a'] ) self.marker2 = ContactMarker( id='b', students={'b': 'student_b'}, methods=['method_b'], ) def test_both_valid(self): """Test that the two markers are put if both are valid.""" from sosbeacon.event.contact_marker import update_marker_pair self.marker1.put() self.marker2.put() update_marker_pair(self.marker1, self.marker2) def test_exception_raised_if_one_ood(self): """Test that the an exception is raised is a marker is stale.""" from sosbeacon.event.contact_marker import update_marker_pair self.marker1.put() self.marker2.put() evil_marker1 = self.marker1.key.get(use_cache=False) evil_marker1.put(use_cache=False) self.assertRaisesRegexp( Exception, "revision out of date.", update_marker_pair, self.marker1, self.marker2)
class TestUpdateMarkerPair(unittest.TestCase): """Ensure update_marker_pair updates the two markers, and remerges if a marker is out of date. """ def setUp(self): from google.appengine.datastore.datastore_stub_util import \ TimeBasedHRConsistencyPolicy from sosbeacon.event.contact_marker import ContactMarker self.testbed = testbed.Testbed() self.testbed.activate() self.testbed.setup_env(app_id='testapp') self.testbed.init_datastore_v3_stub( consistency_policy=TimeBasedHRConsistencyPolicy()) self.testbed.init_memcache_stub() self.marker1 = ContactMarker(id='a', students={'a': 'student_a'}, methods=['method_a']) self.marker2 = ContactMarker( id='b', students={'b': 'student_b'}, methods=['method_b'], ) def test_both_valid(self): """Test that the two markers are put if both are valid.""" from sosbeacon.event.contact_marker import update_marker_pair self.marker1.put() self.marker2.put() update_marker_pair(self.marker1, self.marker2) def test_exception_raised_if_one_ood(self): """Test that the an exception is raised is a marker is stale.""" from sosbeacon.event.contact_marker import update_marker_pair self.marker1.put() self.marker2.put() evil_marker1 = self.marker1.key.get(use_cache=False) evil_marker1.put(use_cache=False) self.assertRaisesRegexp(Exception, "revision out of date.", update_marker_pair, self.marker1, self.marker2)