def test_post_muti_resource(self):
     """
     批量创建
     :return:
     """
     res = self.post('/tag',
                     json=[
                         {
                             u"name": u'muti_create1'
                         },
                         {
                             u"name": u'muti_create2'
                         },
                         {
                             u"name": u'muti_create3'
                         },
                         {
                             u"name": u'not_found_1'
                         },
                     ])
     assert res.status_code == 201
     assert len(loads(res.data)) == 4
     assert len(
         loads(
             self.req.get('/tag', query_string={
                 'name': "%muti_create%",
             }).data)['items']) == 3
     assert self.session.query(self.Tag).count() == 4
     assert len(loads(self.req.get('/tag').data)['items']) == 4
 def test_put_one_resource(self):
     """
     单个修改
     :return:
     """
     old_res = self.post('/tag', json={u"name": u'one_update1'})
     assert old_res.status_code == 201
     assert isinstance(loads(old_res.data), dict)
     old_items = loads(
         self.req.get('/tag', query_string={
             'name': "%one_update%",
         }).data)['items']
     assert len(old_items) == 1
     old_item = old_items[0]
     new_item = dict(old_item)
     new_item['name'] += '_update'
     res = self.put('/tag', json=new_item)
     assert res.status_code == 200
     assert isinstance(loads(res.data), dict)
     now_items = loads(
         self.req.get('/tag', query_string={
             'name': "%one_update%",
         }).data)['items']
     assert now_items
     for item in now_items:
         assert item['name'].endswith('_update')
 def test_put_existing_resource(self):
     """Send HTTP PUT for an existing resource (should be updated)."""
     self.post_response()
     response = self.req.put('/tag/1',
                             headers={"Content-Type": 'application/json'},
                             data=dumps({u'name': u'Jeff Knupp2'}))
     assert response.status_code == 200
     response = self.get_response('/tag/1', 200)
     assert loads(response.data)[u'name'] == u'Jeff Knupp2'
     assert loads(response.data)[u'id'] == 1
 def test_post(self):
     """Test simple HTTP POST"""
     response = self.post_response()
     assert loads(response.data) == {
         'id': 1,
         'name': 'Jeff Knupp',
     }
Exemple #5
0
    def handle_read(self):
        if self.content_len is None:
            self.read_buffer += self.recv(8192)

            try:
                if not self.parse_http_request(self.read_buffer):
                    # Failed to parse headers. Wait for next portion.
                    return
            except ParsingHTTPError as err:
                self._readable = False
                self.send_http_error(err.code, err.message)
                return
            except Exception as err:
                self.log_message('Exception: %s', err)
                self._readable = False
                self.send_http_error(500, 'Internal Server Error')
                return
        else:
            self.data += self.recv(8192)

        if len(self.data) < self.content_len:
            return
        elif len(self.data) > self.content_len:
            self.data = self.data[:self.content_len]

        self._readable = False
        request = None
        try:
            request = loads(self.data, [JsonRpcNotification, JsonRpcRequest],
                            encoding=self.server.encoding)
            method = self.server.interface(self.server, request, self)
            method()
        except Exception, err:
            self.on_error(request, err)
Exemple #6
0
    def handle(self):
        '''
        Handles an Json-RPC request.
        '''
        self.command = None
        self.requestline = ''
        self.request_version = self.default_request_version
        self.close_connection = 1

        try:
            self.raw_requestline = self.rfile.readline()
            if not self.raw_requestline:
                return

            if not self.parse_request():
                return

            if self.command != 'POST':
                self.send_error(501, 'Unsupported method (%r)' % self.command)
                return

            data = self.rfile.read(int(self.headers.get('content-length', 0)))
        except socket.timeout:
            self.send_error(408, 'Request timed out')
            return

        request = None
        try:
            request = loads(data, [JsonRpcNotification, JsonRpcRequest],
                            encoding=self.server.encoding)
            method = self.server.interface(self.server, request, self)
            method()
        except Exception, err:
            self.on_error(request, err)
 def post_response(self):
     """Return the response generated from a generic POST request. Do basic
     validation on the response."""
     response = self.req.post('/tag',
                              headers={"Content-Type": 'application/json'},
                              data=dumps({u'name': u'Jeff Knupp'}))
     assert response.status_code == 201
     assert loads(response.data)[u'name'] == u'Jeff Knupp'
     return response
 def test_put_new_resource(self):
     """Send HTTP PUT for a resource which doesn't exist (should be
     created)."""
     response = self.req.put('/tag/2',
                             headers={"Content-Type": 'application/json'},
                             data=dumps({
                                 u'id': 2,
                                 u'name': u'Jeff Knupp'
                             }))
     assert response.status_code == 201
     assert loads(response.data)['name'] == u'Jeff Knupp'
Exemple #9
0
 def http_response(self, request, response):
     '''
     Processes the given Json-RPC response.
     '''
     if response.code == 200:
         message = loads(response.read(), [JsonRpcResponse],
                         encoding=self.context.client.encoding)
         if request.id != message.id:
             raise JsonRpcResponseError(data={'id': message.id})
         return message.result
     raise JsonRpcProtocolError(response.code, response.msg,
                                data={'exception': response.read()})
Exemple #10
0
 def ctx_select(cls, session, query):
     result = {}
     a = query.sqlaq()
     if a:
         q = 'select dataset.address,tag.name,dataset.value from context dataset inner join tag on tag.id=dataset.tag where dataset.id in (select dataset.id from context dataset inner join tag on tag.id=dataset.tag where (%s)) and (%s)'%(query.sqlq(), a)
     else:
         q = 'select dataset.address,tag.name,dataset.value from context dataset inner join tag on tag.id=dataset.tag where dataset.id in (select dataset.id from context dataset inner join tag on tag.id=dataset.tag where (%s))'%(query.sqlq())
     for address,k,v in session.database.execute(q, query.sqld()+query.sqlad()):
         if address not in result:
             result[address] = {}
         result[address][k] = base.loads(v)   # XXX
     return result
 def test_put_muti_resource(self):
     """
     批量修改
     :return:
     """
     old_res = self.post('/tag',
                         json=[
                             {
                                 u"name": u'muti_update1'
                             },
                             {
                                 u"name": u'muti_update2'
                             },
                             {
                                 u"name": u'muti_update3'
                             },
                         ])
     assert old_res.status_code == 201
     assert len(loads(old_res.data)) == 3
     old_items = loads(
         self.req.get('/tag', query_string={
             'name': "%muti_update%",
         }).data)['items']
     assert len(old_items) == 3
     new_items = []
     for item in old_items:
         new_dict = dict(item)
         new_dict['name'] += '_update'
         new_items.append(new_dict)
     res = self.put('/tag', json=new_items)
     assert res.status_code == 200
     assert len(loads(res.data)) == 3
     now_items = loads(
         self.req.get('/tag', query_string={
             'name': "%muti_update%",
         }).data)['items']
     assert now_items
     for item in now_items:
         assert item['name'].endswith('_update')
Exemple #12
0
 def test_get_sub_collection_and_data_not_change(self):
     """
     测试获取子资源,并且确认子资源未更改
     :return:
     """
     result = loads(self.get('/Track/@CollectionKeyAttributeTestCase_name/PlaylistCollection').data)
     assert len(result['items']) == result['total'] == 3
     self.assertListItemEqual(result['items'], [
         {
             u'PlaylistId': 1,
             u'Name': u'Music'
         },
         {
             u'PlaylistId': 17,
             u'Name': u'Heavy Metal Classic'
         },
         {
             u'PlaylistId': 12,
             u'Name': u'Classical'
         },
     ])
 def test_get_expanded_resource(self):
     """Does GETing a resource return the 'Link' header field?"""
     response = self.get_response('/tracks/1', 200, params={'_expand': 1})
     assert 'Album' in loads(response.data)
 def test_get_object_attribute(self):
     """Test simple HTTP GET"""
     response = self.get_response('/tracks/347', 200)
     response = self.get_response('/tracks/347/Genre', 200)
     assert loads(response.data)[u'Name'] == 'Rock'
 def test_get_with_sort(self):
     """Test simple HTTP GET"""
     response = self.get_response('/artists', 200, params={'_sort': 'Name'})
     assert loads(response.data)[u'items'][0]['Name'] == 'A Cor Do Som'
 def test_get_with_like_filter(self):
     """Test simple HTTP GET"""
     response = self.get_response('/artists',
                                  200,
                                  params={'Name': '%AC%DC%'})
     assert len(loads(response.data)[u'items']) == 1
 def test_get_with_limit(self):
     """Test simple HTTP GET"""
     response = self.get_response('/artists', 200, params={'_num': 10})
     assert len(loads(response.data)[u'items']) == 10
 def test_get(self):
     """Test simple HTTP GET"""
     response = self.get_response('/artists', 200)
     assert len(loads(response.data)[u'items']) == 275
     assert loads(response.data)[u'total'] == 275