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)
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)
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')
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')
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)
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)
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")
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秒一页
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()
def setUp(self): '''Test setup''' self.app = app.test_client() self.api = MongoAPI("localhost") self.api.clear_db()