예제 #1
0
def update_object(collection, id):
    id = int(id)

    if collection not in CRUD_COLLECTIONS:
        return respond({'error': 'Page not found'}, 404)

    if id in NON_MODIFIABLE[collection]:
        return respond({'error': 'Cannot be modified'}, 400)

    data = request.json
    if data is None or data == {}:
        return respond({'error': 'Please provide the data to update'}, 400)

    db = MongoAPI(DATABASE, collection)
    if not db.exists({'_id': id}):
        return respond({'error': 'The collection has no record with the provided ID'}, 400)

    content_to_update = {}
    for field_name in UPDATEABLE_FIELDS[collection]:
        if field_name in data:
            content_to_update[field_name] = int(data[field_name]) if type(data[field_name]) == str and data[field_name].isdigit() else data[field_name]

    if len(content_to_update) > 0:
        response = db.update({'_id': id}, content_to_update)
        return respond(response, 200)
    else:
        return respond({'error': 'You can only update {} for {}'.format(', '.join(UPDATEABLE_FIELDS[collection]), collection)}, 400)
예제 #2
0
def get_objects(collection):
    if collection not in CRUD_COLLECTIONS:
        return respond({'error': 'Page not found'}, 404)

    db = MongoAPI(DATABASE, collection)
    response = db.read()
    return respond(response, 200)
예제 #3
0
def mongo_read():
    '''GET request handler'''
    data = request.json
    if data is None or data == {} or 'Order_ID' not in data:
        return Response(response=json.dumps(
            {"Error": "Please provide order information"}),
                        status=400,
                        mimetype='application/json')
    list_of_orders_id = data["Order_ID"]
    api = MongoAPI(deployment)
    response = api.find_orders(list_of_orders_id)
    return Response(response=response, status=200, mimetype='application/json')
예제 #4
0
def mongo_delete():
    '''DELETE request handler'''
    data = request.json
    if data is None or data == {} or 'Order_ID' not in data:
        return Response(response=json.dumps(
            {"Error": "Please provide order information"}),
                        status=400,
                        mimetype='application/json')
    api = MongoAPI(deployment)
    response = api.delete_order(data)
    return Response(response=json.dumps(response),
                    status=200,
                    mimetype='application/json')
예제 #5
0
def add_object(collection):
    if collection not in CRUD_COLLECTIONS:
        return respond({'error': 'Page not found'}, 404)

    data = request.json
    if data is None or data == {}:
        return respond({'error': 'Please provide the data to add'}, 400)

    content_to_add = {}

    for field_name in REQUIRED_FIELDS[collection]:
        if field_name not in data:
            return respond({'error': 'Please provide {}'.format(field_name)}, 400)
        else:
            content_to_add[field_name] = int(data[field_name]) if type(data[field_name]) == str and data[field_name].isdigit() else data[field_name]

    for field_name in WRITEABLE_FIELDS[collection]:
        if field_name in data:
            content_to_add[field_name] = int(data[field_name]) if type(data[field_name]) == str and data[field_name].isdigit() else data[field_name]

    db = MongoAPI(DATABASE, collection)
    response = db.write(content_to_add)
    return respond(response, 200)
예제 #6
0
def delete_object(collection, id):
    id = int(id)

    if collection not in CRUD_COLLECTIONS:
        return respond({'error': 'Page not found'}, 404)

    if id in NON_MODIFIABLE[collection]:
        return respond({'error': 'Cannot be modified'}, 400)

    db = MongoAPI(DATABASE, collection)
    if not db.exists({'_id': id}):
        return respond({'error': 'The collection has no record with the provided ID'}, 400)

    for check in EXISTENCE_CHECKS_BEFORE_DELETE[collection]:
        child_db = MongoAPI(DATABASE, check.collection)
        if child_db.exists({check.field_name: id}):
            return respond({'error': 'Please first remove all the {} for this entity'.format(check.collection)}, 400)

    response = db.delete({'_id': id})
    return respond(response, 200)
예제 #7
0
from mongoapi import MongoAPI
import time
def modify_time(time):
    if ':' in time:#such as 20:30
        time=str(datetime.date.today())+' '+time
        date_time=datetime.datetime.strptime(time,'%Y-%m-%d %H:%M')
    else:
        if time.find('-')!=4:#such as 11-27
            time='2021-'+time
        else:#such as 2020-11-27
            pass
        date_time=datetime.datetime.strptime(time,'%Y-%m-%d').date()
    return date_time

#连接mongodb,新建‘hupu’db,新建‘post’collection
connection=MongoAPI('hupu','post')

#爬取前10页帖子信息
for i in range(1,11):
    url="http://bbs.hupu.com/bxj-"+str(i)
    headers={
        'user-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36",

    }
    r=requests.get(url,headers=headers)
    #print(r.content)

    html=r.content.decode('utf-8')
    soup=BeautifulSoup(html,'lxml')
    all_info=soup.find("ul",class_="for-list")
    all_theme_tag=all_info.find_all("li")
예제 #8
0
        data_list.append([
            title, site, author, posttime, postlink, reply, view, last_reply,
            date_time
        ])  #date_time不是str形式
    return data_list


link1 = "https://bbs.hupu.com/bxj-"
for i in range(1, 11):  #虎扑步行街第十一页就要登陆了
    link = link1 + str(i)
    soup = get_page(link)
    post_all = soup.find("ul", class_="for-list")
    post_list = post_all.find_all(
        'li')  #find()查找第一个匹配结果出现的地方,find_all()找到所有匹配结果出现的地方。
    data_list = get_data(post_list)

    hupu_post = MongoAPI("localhost", 27017, "hupu", "post")
    for each in data_list:
        hupu_post.update({'帖子链接:': each[1]}, {
            '帖子名:': each[0],
            '帖子链接:': each[1],
            '作者:': each[2],
            '发帖时间:': each[3],
            '作者主页:': each[4],
            '回复数:': each[5],
            '浏览量:': each[6],
            '最新回复:': each[7],
            '最新回复时间': str(each[8])
        })
        # print(each)
    time.sleep(3)  #3秒一页
예제 #9
0
class FlaskTestCase(unittest.TestCase):
    '''Basic API tests class'''
    def setUp(self):
        '''Test setup'''
        self.app = app.test_client()
        self.api = MongoAPI("localhost")
        self.api.clear_db()

    def test_index(self):
        '''Ensure that Flask was set up correctly'''
        response = self.app.get('/', content_type='application/json')
        self.assertEqual('UP', response.json['Status'])

    def test_database_add(self):
        '''Ensure POST method DB add order is working'''
        # Given
        payload = json.dumps({
            "Order_ID": 1,
            "Order_list": ["apple", "banana", "orange"],
            "Total_price": 570.24,
            "Phone": "+380501234567",
            "Email": "*****@*****.**"
        })
        possible_response1 = "Order successfully writed"
        possible_response2 = "Order allredy exist"

        # When
        response = self.app.post('/ordersdb',
                                 headers={"Content-Type": "application/json"},
                                 data=payload)

        # Then
        self.assertEqual(possible_response1, response.json['Status'])
        self.assertEqual(response.status_code, 200)

        # When
        response = self.app.post('/ordersdb',
                                 headers={"Content-Type": "application/json"},
                                 data=payload)

        # Then
        self.assertEqual(possible_response2, response.json['Status'])
        self.assertEqual(response.status_code, 200)
        self.api.clear_db()

    def test_database_update(self):
        '''Ensure PUT method DB update order is working'''
        # Given
        payload1 = json.dumps({
            "Order_ID": 1,
            "Order_list": ["apple", "banana", "orange"],
            "Total_price": 570.24,
            "Phone": "+380501234567",
            "Email": "*****@*****.**"
        })
        payload2 = json.dumps({
            "Order_ID": 1,
            "Order_list": ["apple", "banana", "pineapple"],
            "Total_price": 657.24,
            "Phone": "+380501234567",
            "Email": "*****@*****.**"
        })
        possible_response1 = "Order successfully updated"
        possible_response2 = "Nothing was updated"

        # When
        self.app.post('/ordersdb',
                      headers={"Content-Type": "application/json"},
                      data=payload1)
        response = self.app.put('/ordersdb',
                                headers={"Content-Type": "application/json"},
                                data=payload2)

        # Then
        self.assertEqual(possible_response1, response.json['Status'])
        self.assertEqual(response.status_code, 200)

        # When
        response = self.app.put('/ordersdb',
                                headers={"Content-Type": "application/json"},
                                data=payload2)

        # Then
        self.assertEqual(possible_response2, response.json['Status'])
        self.assertEqual(response.status_code, 200)
        self.api.clear_db()

    def test_database_get(self):
        '''Ensure GET method DB find order is working'''
        # Given
        payload1 = json.dumps({
            "Order_ID": 1,
            "Order_list": ["apple", "banana", "orange"],
            "Total_price": 570.24,
            "Phone": "+380501234567",
            "Email": "*****@*****.**"
        })
        payload2 = json.dumps({
            "Order_ID": 2,
            "Order_list": ["apple", "banana", "pineapple"],
            "Total_price": 657.24,
            "Phone": "+380576543210",
            "Email": "*****@*****.**"
        })
        payload3 = json.dumps({"Order_ID": [1, 2]})

        possible_response1 = 1
        possible_response2 = 2

        # When
        self.app.post('/ordersdb',
                      headers={"Content-Type": "application/json"},
                      data=payload1)
        self.app.post('/ordersdb',
                      headers={"Content-Type": "application/json"},
                      data=payload2)
        response = self.app.get('/ordersdb',
                                headers={"Content-Type": "application/json"},
                                data=payload3)

        # Then
        self.assertEqual(possible_response1, response.json[0]['Order_ID'])
        self.assertEqual(possible_response2, response.json[1]['Order_ID'])
        self.assertEqual(response.status_code, 200)
        self.api.clear_db()

    def test_database_delete(self):
        '''Ensure DELETE method DB delete order is working'''
        # Given
        payload1 = json.dumps({
            "Order_ID": 1,
            "Order_list": ["apple", "banana", "orange"],
            "Total_price": 570.24,
            "Phone": "+380501234567",
            "Email": "*****@*****.**"
        })

        payload2 = json.dumps({"Order_ID": 1})

        possible_response1 = "Order successfully deleted"
        possible_response2 = "Order not found"

        # When
        self.app.post('/ordersdb',
                      headers={"Content-Type": "application/json"},
                      data=payload1)
        response = self.app.delete(
            '/ordersdb',
            headers={"Content-Type": "application/json"},
            data=payload2)

        # Then
        self.assertEqual(possible_response1, response.json['Status'])
        self.assertEqual(response.status_code, 200)

        # When
        response = self.app.delete(
            '/ordersdb',
            headers={"Content-Type": "application/json"},
            data=payload2)

        self.assertEqual(possible_response2, response.json['Status'])
        self.assertEqual(response.status_code, 200)
        self.api.clear_db()

    def cleanUp(self):
        '''Test cleanup'''
        self.api.clear_db()
예제 #10
0
 def setUp(self):
     '''Test setup'''
     self.app = app.test_client()
     self.api = MongoAPI("localhost")
     self.api.clear_db()