I have made at fasstapi at https://lectio-fastapi.herokuapp.com/docs#/
from fastapi import FastAPI
from starlette.responses import JSONResponse
from . import lectio
app = FastAPI()
@app.get("/")
def read_root():
return {'msg': 'welcome to the lectio-fastapi', 'success': True}
@app.post("/school_ids/{lectio_school_name}")
def get_school_id(lectio_school_name: str):
json_object = lectio.lectio_search_webpage_for_schools(lectio_school_name)
return JSONResponse(content=json_object)
@app.post("/message_send/{lectio_school_id, lectio_user, lectio_password}")
def test_login(lectio_school_id: int, lectio_user: str, lectio_password: str):
browser = lectio.get_webdriver()
lectio_login_result = lectio.lectio_login(lectio_school_id, lectio_user, lectio_password, browser)
return lectio_login_result
@app.get("/message_send/")
def send_msg():
return {'msg': 'message_send function for lectio', 'success': True}
@app.post("/message_send/{lectio_school_id, lectio_user, lectio_password, send_to, subject, msg, msg_can_be_replied}")
def send_msg(lectio_school_id: int, lectio_user: str, lectio_password: str, send_to :str, subject: str, msg: str, msg_can_be_replied: bool):
browser = lectio.get_webdriver()
lectio_login_result = lectio.lectio_login(lectio_school_id, lectio_user, lectio_password,browser)
if lectio_login_result['success']:
lectio_send_msg_result = lectio.lectio_send_msg(send_to, subject, msg, msg_can_be_replied, lectio_school_id, browser)
return lectio_send_msg_result
else:
return {'msg': 'Login failed, wrong username, password and school_id combination ', 'success': False}
def main():
pass
if __name__ == "__main__":
main()
When I test on the fastapi site it works like a charm.
But when I try to access it from another python program i get 405 when posting
import requests
from requests.structures import CaseInsensitiveDict
API_ENDPOINT = "https://lectio-fastapi.herokuapp.com/" #link to fastapi
def lectio_root():
url = API_ENDPOINT
print(url)
headers = CaseInsensitiveDict()
headers["accept"] = "application/json"
headers["Content-Type"] = "application/json"
resp = requests.get(url, headers=headers)
print(resp.text)
return resp
def lectio_send_msg(lectio_school_id: int, lectio_user: str, lectio_password: str, send_to :str, subject: str, msg: str, msg_can_be_replied: bool):
url = API_ENDPOINT+"message_send/"
print(url)
headers = CaseInsensitiveDict()
headers["accept"] = "application/json"
headers["Content-Type"] = "application/json"
payload = '{"lectio_school_id": ' + str(lectio_school_id) + ', "lectio_user": ' + lectio_user + ', "lectio_password": ' + lectio_password + ', "send_to": ' + send_to + ', "subject": ' + subject + ', "msg": ' + msg + ', "msg_can_be_replied": ' + str(msg_can_be_replied) + '}'
resp_get = requests.get(url, headers=headers)
resp_post = requests.post(url, data=payload, headers=headers)
print(resp_get.text)
print(resp_get)
print(resp_post.text)
return resp_post
def main():
lectio_school_id = 235
lectio_user = 'test_user'
lectio_password = 'test_password'
send_to = 'Mr test'
subject = 'test subject'
msg = 'test msg'
msg_can_be_replied = False
print(lectio_root())
print(lectio_send_msg(lectio_school_id, lectio_user, lectio_password, send_to, subject, msg, msg_can_be_replied))
if __name__ == '__main__':
main()
the output I am getting is:
https://lectio-fastapi.herokuapp.com/
{"msg":"welcome to the lectio-fastapi","success":true}
<Response [200]>
https://lectio-fastapi.herokuapp.com/message_send/
{"msg":"message_send function for lectio","success":true}
<Response [200]>
{"detail":"Method Not Allowed"}
<Response [405]>
And I am expecting to get these returns:
{'success': True}
{'msg': 'Login failed, wrong username, password and school_id combination ', 'success': False}
It seems like to me I need to define something more in FastAPI to get my post function to work. But not sure what is missing.