コード例 #1
0
ファイル: message.py プロジェクト: SOSbeacon/SchoolBeacon-GAE
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)
コード例 #2
0
ファイル: message.py プロジェクト: SOSbeacon/SchoolBeacon-GAE
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)
コード例 #3
0
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)
コード例 #4
0
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)