Найти - Пользователи
Полная версия: Как создать файл и читать из него данные
Начало » Python для новичков » Как создать файл и читать из него данные
1
Mishaa.90
Всем привет, подскажите, как можно сделать следующее:
1. Отправить метод POST

2. Создать текстовый файл в котором хранить 5 шт place_id полученных из 1 пункта (не писать портянку вызывая 5 раз метод, сделать красиво)

3. Отправить метод Get который будет читать place_id из текстового файла (из него, не их переменной первого запроса) и убедиться что данные place_id существуют

4. Отправить метод DELETE, с помощью которого удалить 2-й и 4-й place_id из текстового файла, полученного в результате выполнения предыдущего задания (удалить значит не стереть, это значит что в файле по прежнему 5 значений, но 2-я и 4-я локация не существуют)

5. Отправить метод Get который будет читать place_id из текстового файла, и сделает отбор на существующие и несуществующие локации

6. Создать новый файл и поместить в него 3 существующих локации (place_id), которые были отобраны в результате метода GET

Вот пытался, пока безрезультатно:



Mishaa.90
 mport requests
class Test_new_location():
    """Работа с новой локацией"""
    def test_create_new_location(self):
        """Создание новой локации"""
        base_url = "https://rahulshettyacademy.com"          # базовая url
        key = "?key=qaclick123"             # Параметр для всех запросов (из документации)
        """Создание новой локации"""
        post_resourse = "/maps/api/place/add/json"           #  Ресурс метода POST
        post_url = base_url + post_resourse + key
        print(post_url)
    #
        json_for_create_new_location = {
            "location": {
                "lat": -38.383494,
                "lng": 33.427362
            }, "accuracy": 50,
            "name": "Frontline house",
            "phone_number": "(+91) 983 893 3937",
            "address": "29, side layout, cohen 09",
            "types": [
                "shoe park",
                "shop"
            ],
            "website": "http://google.com",
            "language": "French-IN"
        }
        result_post = requests.post(post_url, json = json_for_create_new_location)
        print("Статус-код : " + str(result_post.status_code))
        check_post = result_post.json()
        place_id = check_post.get("place_id")
        print("Place_id : " + place_id)
        for i in range(1, 6):
            print(result_post.text)
            place = open('post.txt', 'a')
            place.write(place_id)
            place.write(" \n")
            place.close()
        """Проверка создания новой локации"""
        get_resourse = "/maps/api/place/get/json"
        fw = open('post.txt', 'r')
        text = fw.read()
        fw.close()
        print(text)
        get_url = base_url + get_resourse + key + "&place_id=" + text
        print(get_url)
        result_get = requests.get(get_url)
        print(result_get.text)
        print("Статус-код : " + str(result_get.status_code))
        assert 200 == result_get.status_code
        if result_get.status_code == 200:
            print("Успешно!!! Проверка создания новой локации прошла успешно")
        else:
            print("Провал!!! Запрос ошибочный")
test = Test_new_location()
test.test_create_new_location()
py.user.next
Mishaa.90
Всем привет, подскажите, как можно сделать следующее:
1. Отправить метод POST
Метод POST нельзя отправить. Можно что-то отправить методом POST или методом GET, какие-то данные.

Mishaa.90
2. Создать текстовый файл в котором хранить 5 шт place_id полученных из 1 пункта
Видимо, методом POST надо переслать серверной части инструкцию, которая заставляет серверную часть создать текстовый файл у себя в хранилище и поместить в этот текстовый файл данные, переданные клиентом в параметрах инструкции.

И всё в таком духе. Ты задание уточни до деталей сначала. Потому что в данном виде написана просто какая-то чушь, будто методы можно передавать куда-то там. И ты явно не понимаешь, где и что создаётся.
Mishaa.90
py.user.next
да, это и есть задание, я его просто скопировал по пунктам). Вот и я не могу до конца разобраться. Тестируем API, отправляя методы get, post, put, delete. Надо создать новую локацию, путем отправки метода post, и при создании возникает place_id у новой локации, который каждый раз разный. Вот надо 5 раз отправить запрос post? чтобы создать 5 различных place_id (циклом, как я понял), и записать их построчно в текстовый файл. Затем, как создан файл с 5 различными place_id, отправляем метод get к созданным локациям, используя place_id из текстового файла. Затем отправляем метод delete для удаления 2х place id из файла. Как-то так наверно
py.user.next
Mishaa.90
да, это и есть задание, я его просто скопировал по пунктам)
Значит, писал его какой-то дурак, как минимум. Но я думаю, что это с английского перевод, сделанный через дебильный переводчик, построенный на какой-нибудь дебильной нейросети очередной.

Mishaa.90
Вот и я не могу до конца разобраться.
Ну, вот код ты выложил, он ничем не лучше, чем это задание.

Mishaa.90
Тестируем API
А ты знаешь, что такое API? API чего ты тестируешь? Ты знаешь, что API он всегда у чего-то, а не просто сам по себе?

Mishaa.90
отправляя методы get, post, put, delete
Ты не можешь отправлять методы. Можно отправлять данные каким-то методом. Методом POST отправить такие-то данные. Или методом PUT отправить такие-то данные.

Mishaa.90
Вот надо 5 раз отправить запрос post?
POST-запрос можно отправить один раз, в этот POST-запрос можно вставить пять кусков данных.

Но я думаю, что ты даже не понимаешь, куда отправлять POST-запрос. Кто эти данные потом будет разбирать, когда получит их. Для тебя это тёмный лес, потому что ты даже не представляешь архитектуры, что вообще происходит при передаче, от кого и кому что передаётся, кто посылает POST-запрос и кому он посылает этот POST-запрос. По твоему коду ахинейному всё это видно очень хорошо.

Mishaa.90
Как-то так наверно
Поэтому я тебе сначала предлагаю разобраться самому, куда ты там влез, в учёбу или в работу, о чём там вообще речь идёт, а потом приходить на форумы и отвлекать людей.
Mishaa.90
Что такое API знаю, не надо тут изображать из себя самого умного. Есть чем помочь -подскажи, нет - лучше не пиши
py.user.next
Просто за тебя тут делать это всё, а потом тебе ещё объяснять это всё, потому что ты ноль, какой смысл? Иди и задавай вопросы тому дураку - автору задания. Мы тут при чём?
xam1816
  
import asyncio
import time
 
import aiohttp
import aiofiles
 
base_url = r"https://rahulshettyacademy.com"
key = r"?key=qaclick123"
post_resourse = "/maps/api/place/add/json"
get_resourse = "/maps/api/place/get/json"
del_resourse = '/maps/api/place/delete/json'
 
async def get_place_id(session):
    print('post')
    json_for_create_new_location = {
        "location": {
            "lat": -38.383494,
            "lng": 33.427362
        }, "accuracy": 50,
        "name": "Frontline house",
        "phone_number": "(+91) 983 893 3937",
        "address": "29, side layout, cohen 09",
        "types": [
            "shoe park",
            "shop"
        ],
        "website": "http://google.com",
        "language": "French-IN"
    }
    url = base_url + post_resourse + key
    async with session.post(url, json=json_for_create_new_location) as response:
        if response.ok:
            data = await response.json()
            if data['status'] == "OK":
                return data
 
async def validate_place_id(session, place_id):
    print('get')
    url = base_url + get_resourse + key + "&place_id=" + place_id
    async with session.get(url) as response:
        if response.ok:
            return place_id
 
async def delete_place_id(session, place_id):
    print('del')
    json = {'place_id': place_id}
    url = base_url + del_resourse + key
    async with session.delete(url, json=json) as response:
        if response.ok:
            data = await response.json()
            return data
 
async def main():
    async with aiohttp.ClientSession() as session:
        post_tasks = [get_place_id(session) for i in range(5)]
        async with aiofiles.open('place_id.txt', 'w') as f:
            for cor in asyncio.as_completed(post_tasks):
                data = await cor
                if data:
                    await f.write(f"{data['place_id']}\n")
                    print('write')
                else:
                    print('error')
 
        async with aiofiles.open('place_id.txt', 'r') as f:
            place_id_lst = [place_id.strip() for place_id in await f.readlines()]
            get_tasks = [
                validate_place_id(session, place_id) for place_id in place_id_lst
            ]
            get_result = await asyncio.gather(*get_tasks)
            print(get_result)
            if all(get_result):
                print('location create all')
            del_result = await asyncio.gather(delete_place_id(session, place_id_lst[1]),
                                              delete_place_id(session, place_id_lst[3]))
            print(del_result)
 
            async with aiofiles.open('place_id_2.txt', 'w') as wf:
                get_tasks = [
                    validate_place_id(session, place_id) for place_id in place_id_lst
                ]
                for cor in asyncio.as_completed(get_tasks):
                    data = await cor
                    if data:
                        await wf.write(f"{data}\n")
 
if __name__ == '__main__':
    s = time.time()
    asyncio.run(main())
    print(f'time {time.time() - s:.2f} s')
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB