# from waitress import serve # from flask import Flask, request, jsonify import uvicorn from fastapi import FastAPI, Request from dotenv import load_dotenv import logging from pydantic import BaseModel from typing import List from utils import handle_request class GiteaRequest(BaseModel): ref: str before: str after: str compare_url: str commits: List[dict] total_commits: int head_commit: dict repository: dict name: str full_name: str app = FastAPI() @app.get('/') async def root(): return {'message': 'Welcome to Gitea Runner'} @app.post('/test') async def test(request: Request): """ Test connection to server. """ logging.debug('Content-Type: ', request.headers.get('content-type')) return {'status': 'success'} @app.post('/event') def handle_event(request: Request): """ Handle event from webhook """ request_json = request.json() handle_request(request_json) return {'status': 'received task'} # @app.post('/execute') # @app.before_request # def check_media_type(): # """ # Ignore requests that do not have Content-Type = application/json in header. # """ # content_type = request.headers.get('Content-Type') # if content_type is None or not content_type.lower().startswith('application/json'): # logging.error( # f"request with wrong content type made by {request.remote_addr}" # ) # return jsonify(status='unsupported media type'), 415 # @app.route('/test', methods=['POST']) # def test(): # logging.debug('Content-Type: ' + request.headers.get('Content-Type')) # logging.debug(request.get_json(force=True)) # return jsonify(status='success', sender=request.remote_addr), 200 if __name__ == '__main__': load_dotenv() # prepare variables # serve( # app=app, # host=listen_ip, # port=listen_port # ) uvicorn.run( app=app, host='0.0.0.0' )