예제 #1
0
    def test__on_recv(self):
        client = ZmqObject(['tcp://localhost:5555'], zmq.REQ)

        msg = MBMessage('foo', 'action_bar', None, {
            'first_arg': 2,
            'second_arg': 3
        }, {'multiplier': 6})

        zmq_msg = msg.to_json()

        worker = self.worker

        worker_thread = threading.Thread(target=worker.start)
        worker_thread.start()

        time.sleep(2)

        client.zmq_connect()
        client.zmq_send(zmq_msg)

        result = worker.decode_msg(client.zmq_recv())

        client.socket.close()

        self.assertEqual(result.payload, 30)
예제 #2
0
    def post(self):
        post_data = json.loads(self.request.body)

        email = post_data.get('email')
        username = post_data.get('username')
        password = post_data.get('password')

        api_msg = MBMessage(None, 'authenticate',
                            {'username': email or username},
                            {'password': password}, self.context())

        resp = yield self.dispatch(api_msg)

        resp_msg = MBMessage(resp.msg_id,
                             resp.action,
                             api_msg.target,
                             resp.payload,
                             resp.context,
                             merge_target=False)

        self.mb_cookies(resp)

        self.set_header('Content-Type', 'application/json')
        self.write(resp_msg.to_json())
        self.finish()
예제 #3
0
    def test_repr(self):
        msg = MBMessage()

        msg.encode(self.msg_id,
                   self.action,
                   self.target,
                   self.payload,
                   self.context)

        repr_ = "MBMessage from joe: be-awesome(foo=bar,bar=foo)"
        self.assertTrue(str(msg), repr_)
예제 #4
0
    def decode_api_msg(self, msg_data):
        context = getattr(self, 'context', {})

        if callable(context):
            context = context()

        if isinstance(msg_data, str):
            msg = MBMessage(msg_data)
        else:
            msg = MBMessage(*msg_data)

        msg.context = context

        return msg
예제 #5
0
파일: api.py 프로젝트: entropiae/urlist
        def _unmarshal(raw_response):
            resp = GoHandler.hyperdrive_decode(go_handlers, raw_response)

            if not resp:
                logging.info("GO ERROR")

                return None

            resp_msg = MBMessage(resp.msg_id, resp.action, resp.target,
                                 resp.payload, resp.context, merge_target=False)

            self.mb_cookies(resp)

            return resp_msg.to_json()
예제 #6
0
    def decode_api_msg(self, msg_data):
        context = getattr(self, 'context', {})

        if callable(context):
            context = context()

        if isinstance(msg_data, str):
            msg = MBMessage(msg_data)
        else:
            msg = MBMessage(*msg_data)

        msg.context = context

        return msg
예제 #7
0
    def get(self, user_id, mode=None):
        user_id = _smart_user_id(self, user_id)

        ctx = self.context()

        if not user_id:
            user_id = ctx.get('current_user_id')

        if mode not in ["list", "url", "lists", "urls"]:
            mode = "list"

        api_msg = MBMessage(None, 'fetch_user_network', {
            'user_id': user_id,
            'mode': mode
        }, {}, ctx)

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #8
0
    def make_response(self, raw_response):
        response_body = raw_response.body

        try:
            response_payload = json.loads(response_body)
        except ValueError:
            return None

        if not isinstance(response_payload, dict):
            return None

        response_code = response_payload.get("ResponseCode", None)
        payload = response_payload.get("Payload")

        callback = response_payload.get("Callback")

        if callback:
            payload = "{}({});".format(callback, json.dumps(payload))

        if not response_code:
            action = self.action
        else:
            action = response_code

        return MBMessage(self.api_msg.msg_id, action, {}, payload or {},
                         self.api_msg.context)
예제 #9
0
    def test_init_encode(self):
        msg = MBMessage(
                   self.msg_id,
                   self.action,
                   self.target,
                   self.payload,
                   self.context)

        result = msg.to_json()
        excepted = json.dumps([msg.msg_id,
                               msg.action,
                               self.target,
                               msg.payload,
                               {}, msg.timestamp,])

        self.assertEqual(result, excepted)
예제 #10
0
    def get(self):
        api_msg = MBMessage(None, 'ping', {}, {}, self.context())

        resp = yield self.dispatch(api_msg)

        self.set_header('Content-Type', 'application/json')
        self.write(resp.payload)
        self.finish()
예제 #11
0
    def testActionOperationalError(self):
        worker = self.worker

        msg = MBMessage('foo', 'op_action', None, {'foo': 2}, {})

        result = worker._dispatch(msg)

        self.assertEqual(result, ('OperationalError', 'You are too ugly.'))
예제 #12
0
    def _mb_msg(self, action, cookies, list_hash, **kwargs):
        payload = ["test01", action, {'list_hash': list_hash}, kwargs, {}]

        url = '/'.join([api_url, 'motherbrain'])

        r = requests.post(url, data=json.dumps(payload), cookies=cookies)

        return MBMessage(r.content)
예제 #13
0
    def post(self, list_id=None):
        api_msg = MBMessage(None, 'fetch_list', {'list_hash': list_id},
                            {'url': self.get_argument('url')}, self.context())

        resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #14
0
    def testMessageDispatching(self):
        worker = self.worker

        msg = MBMessage('foo', 'action_foo', None, {'first_arg': 2}, {})

        result = worker._dispatch(msg)

        self.assertEqual(result, ('action_foo', 4))
예제 #15
0
    def testActionFailure(self):
        worker = self.worker

        msg = MBMessage('foo', 'fail_action', None, {'foo': 2}, {})

        result = worker._dispatch(msg)

        self.assertEqual(result,
                         ('Exception', 'integer division or modulo by zero'))
예제 #16
0
        def _unmarshal(raw_response):
            resp = GoHandler.hyperdrive_decode(go_handlers, raw_response)

            if not resp:
                logging.info("GO ERROR")

                return None

            resp_msg = MBMessage(resp.msg_id,
                                 resp.action,
                                 resp.target,
                                 resp.payload,
                                 resp.context,
                                 merge_target=False)

            self.mb_cookies(resp)

            return resp_msg.to_json()
예제 #17
0
파일: api.py 프로젝트: entropiae/urlist
    def post(self):
        api_msg = self.decode_api_msg(self.request.body)

        go = GoHandler.can_handle(self, api_msg)
        if go:
            resp = yield go.dispatch()

            resp_msg = go.make_response(resp)
        else:
            resp = yield self.dispatch(api_msg)

            resp_msg = MBMessage(resp.msg_id, resp.action,
                                 api_msg.target, resp.payload, resp.context, merge_target=False)

            self.mb_cookies(resp)

        self.set_header('Content-Type', 'application/json')
        self.write(resp_msg.to_json())
        self.finish()
예제 #18
0
    def get(self):
        query = self.get_argument('q') or self.get_argument('query')

        api_msg = MBMessage(None, 'users_autocomplete', {'query': query}, {},
                            self.context())

        resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #19
0
    def testMessageDispatchingWithContext(self):
        worker = self.worker

        msg = MBMessage('foo', 'action_bar', None, {
            'first_arg': 2,
            'second_arg': 3
        }, {'multiplier': 6})

        result = worker._dispatch(msg)

        self.assertEqual(result, ('action_bar', 30))
예제 #20
0
    def get(self, activation_code):
        api_msg = MBMessage(None, 'activate_account',
                            {}, {'activation_code': activation_code},
                            self.context())

        resp = yield self.dispatch(api_msg)

        self.clear_all_cookies()
        self.mb_cookies(resp)

        webclient_url = self.user_options.get('server', 'webclient_url')
        self.redirect(webclient_url)
예제 #21
0
    def test_decode(self):
        msg = MBMessage()

        msg.encode(self.msg_id,
                   self.action,
                   self.target,
                   self.payload,
                   self.context)

        json = msg.to_json()

        msg.decode(json)

        self.assertEqual(json, msg.to_json())
예제 #22
0
    def get(self):
        query = self.get_argument('q') or self.get_argument('query')
        scope = self.get_argument('scope', 'me')

        if scope == 'me':
            api_msg = MBMessage(None, 'search_url', {'query': query}, {},
                                self.context())
        else:
            api_msg = MBMessage(None, 'beta_search_url', {'query': query},
                                {'scope': scope}, self.context())

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #23
0
    def get(self):
        self.set_header('Content-Type', 'application/json')

        context = self.context()
        user_id = context.get('current_user_id')

        api_msg = MBMessage(None, 'fetch_user', {'user_id': user_id}, {},
                            self.context())

        resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #24
0
    def get(self):
        api_msg = MBMessage(None, 'fetch_hashtags', {}, {}, self.context())

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #25
0
    def post(self):
        api_msg = self.decode_api_msg(self.request.body)

        go = GoHandler.can_handle(self, api_msg)
        if go:
            resp = yield go.dispatch()

            resp_msg = go.make_response(resp)
        else:
            resp = yield self.dispatch(api_msg)

            resp_msg = MBMessage(resp.msg_id,
                                 resp.action,
                                 api_msg.target,
                                 resp.payload,
                                 resp.context,
                                 merge_target=False)

            self.mb_cookies(resp)

        self.set_header('Content-Type', 'application/json')
        self.write(resp_msg.to_json())
        self.finish()
예제 #26
0
파일: workers.py 프로젝트: entropiae/urlist
    def test__on_recv(self):
        client = ZmqObject(['tcp://localhost:5555'], zmq.REQ)

        msg = MBMessage('foo', 'action_bar', None,
                        {'first_arg': 2, 'second_arg': 3},
                        {'multiplier': 6})

        zmq_msg = msg.to_json()

        worker = self.worker

        worker_thread = threading.Thread(target=worker.start)
        worker_thread.start()

        time.sleep(2)

        client.zmq_connect()
        client.zmq_send(zmq_msg)

        result = worker.decode_msg(client.zmq_recv())

        client.socket.close()

        self.assertEqual(result.payload, 30)
예제 #27
0
    def get(self, categories=None):
        api_msg = MBMessage(None, 'fetch_list_by_categories',
                            {'categories': categories}, {}, self.context())

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.guess_ctype()
        self.write(resp.payload)
        self.finish()
예제 #28
0
    def get(self, edition=None):
        ctx = self.context()

        api_msg = MBMessage(None, 'fetch_followmore', {}, {}, ctx)

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #29
0
    def login(self, handler):
        anonymous_user = handler.current_user

        is_new = False

        self._dump_oauth_data()

        oauth_user_id = handler.get_secure_cookie('oauth_user_id')
        oauth_provider = handler.get_secure_cookie('oauth_provider')

        email = self.oauth_data.get('email')

        handler.clear_all_cookies()

        if not self.account_exist(oauth_user_id, oauth_provider, email):
            origin = {
                'origin_id': str(anonymous_user.get('_id')),
                'origin_creation_time': anonymous_user.get('creation_time')
            }

            user_query = self.new(origin=origin)

            is_new = True
        else:
            user_query = self.update(oauth_user_id, oauth_provider)

        if not user_query:
            return None

        user = self.db.users.find_one(user_query, safe=True)

        if not user:
            return None

        self.set_secure_cookies(handler)

        if is_new:
            user_id = str(user.get('_id'))

            msg = MBMessage(None, 'welcome', {'user_id': user_id},
                            {'registered_with': oauth_provider},
                            {'current_user_id': user_id})

            handler.dispatch_and_forget(msg)

        return user
예제 #30
0
    def get(self, user_id=None):
        api_msg = MBMessage(None, 'fetch_user_profile', {'user_id': user_id},
                            {}, self.context())

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.guess_ctype()

        self.write(resp.payload)
        self.finish()
예제 #31
0
    def get(self, key=""):
        api_msg = MBMessage(None, 'fetch_landing', {}, {'key': key},
                            self.context())

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.guess_ctype()

        self.write(resp.payload)
        self.finish()
예제 #32
0
    def get(self, action):
        args_as_list = self.request.arguments

        payload = {k: v[0] for k, v in args_as_list.iteritems()}

        api_msg = MBMessage(None, action, {}, payload, self.context())

        go = GoHandler.can_handle(self, api_msg)

        if go:
            raw_resp = yield go.dispatch()
            resp = go.make_response(raw_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #33
0
    def get(self, category=None):
        ctx = self.context()

        api_msg = MBMessage(None, 'fetch_topusers',
                            {'category': category or choice(CATEGORIES)}, {},
                            ctx)

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()
예제 #34
0
    def get(self, user_id=None):
        if not user_id:
            user_id = self.context().get("current_user_id")

        api_msg = MBMessage(None, 'fetch_notifications', {'user_id': user_id},
                            {}, self.context())

        go = GoHandler.can_handle(self, api_msg)

        if go:
            go_resp = yield go.dispatch()

            resp = go.make_response(go_resp)
        else:
            resp = yield self.dispatch(api_msg)

        self.write(resp.payload)
        self.finish()