Skip to content

Commit 58bcda0

Browse files
committed
#1 Use FastAPI (done) [Start the project with the initial structure]
0 parents  commit 58bcda0

File tree

5 files changed

+326
-0
lines changed

5 files changed

+326
-0
lines changed

.gitignore

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
2+
# Created by https://www.toptal.com/developers/gitignore/api/python,pycharm+all,redis
3+
# Edit at https://www.toptal.com/developers/gitignore?templates=python,pycharm+all,redis
4+
5+
### PyCharm+all ###
6+
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
7+
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
8+
9+
# User-specific stuff
10+
.idea/**/workspace.xml
11+
.idea/**/tasks.xml
12+
.idea/**/usage.statistics.xml
13+
.idea/**/dictionaries
14+
.idea/**/shelf
15+
16+
# AWS User-specific
17+
.idea/**/aws.xml
18+
19+
# Generated files
20+
.idea/**/contentModel.xml
21+
22+
# Sensitive or high-churn files
23+
.idea/**/dataSources/
24+
.idea/**/dataSources.ids
25+
.idea/**/dataSources.local.xml
26+
.idea/**/sqlDataSources.xml
27+
.idea/**/dynamic.xml
28+
.idea/**/uiDesigner.xml
29+
.idea/**/dbnavigator.xml
30+
31+
# Gradle
32+
.idea/**/gradle.xml
33+
.idea/**/libraries
34+
35+
# Gradle and Maven with auto-import
36+
# When using Gradle or Maven with auto-import, you should exclude module files,
37+
# since they will be recreated, and may cause churn. Uncomment if using
38+
# auto-import.
39+
# .idea/artifacts
40+
# .idea/compiler.xml
41+
# .idea/jarRepositories.xml
42+
# .idea/modules.xml
43+
# .idea/*.iml
44+
# .idea/modules
45+
# *.iml
46+
# *.ipr
47+
48+
# CMake
49+
cmake-build-*/
50+
51+
# Mongo Explorer plugin
52+
.idea/**/mongoSettings.xml
53+
54+
# File-based project format
55+
*.iws
56+
57+
# IntelliJ
58+
out/
59+
60+
# mpeltonen/sbt-idea plugin
61+
.idea_modules/
62+
63+
# JIRA plugin
64+
atlassian-ide-plugin.xml
65+
66+
# Cursive Clojure plugin
67+
.idea/replstate.xml
68+
69+
# Crashlytics plugin (for Android Studio and IntelliJ)
70+
com_crashlytics_export_strings.xml
71+
crashlytics.properties
72+
crashlytics-build.properties
73+
fabric.properties
74+
75+
# Editor-based Rest Client
76+
.idea/httpRequests
77+
78+
# Android studio 3.1+ serialized cache file
79+
.idea/caches/build_file_checksums.ser
80+
81+
### PyCharm+all Patch ###
82+
# Ignores the whole .idea folder and all .iml files
83+
# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360
84+
85+
.idea/
86+
87+
# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023
88+
89+
*.iml
90+
modules.xml
91+
.idea/misc.xml
92+
*.ipr
93+
94+
# Sonarlint plugin
95+
.idea/sonarlint
96+
97+
### Python ###
98+
# Byte-compiled / optimized / DLL files
99+
__pycache__/
100+
*.py[cod]
101+
*$py.class
102+
103+
# C extensions
104+
*.so
105+
106+
# Distribution / packaging
107+
.Python
108+
build/
109+
develop-eggs/
110+
dist/
111+
downloads/
112+
eggs/
113+
.eggs/
114+
lib/
115+
lib64/
116+
parts/
117+
sdist/
118+
var/
119+
wheels/
120+
share/python-wheels/
121+
*.egg-info/
122+
.installed.cfg
123+
*.egg
124+
MANIFEST
125+
126+
# PyInstaller
127+
# Usually these files are written by a python script from a template
128+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
129+
*.manifest
130+
*.spec
131+
132+
# Installer logs
133+
pip-log.txt
134+
pip-delete-this-directory.txt
135+
136+
# Unit test / coverage reports
137+
htmlcov/
138+
.tox/
139+
.nox/
140+
.coverage
141+
.coverage.*
142+
.cache
143+
nosetests.xml
144+
coverage.xml
145+
*.cover
146+
*.py,cover
147+
.hypothesis/
148+
.pytest_cache/
149+
cover/
150+
151+
# Translations
152+
*.mo
153+
*.pot
154+
155+
# Django stuff:
156+
*.log
157+
local_settings.py
158+
db.sqlite3
159+
db.sqlite3-journal
160+
161+
# Flask stuff:
162+
instance/
163+
.webassets-cache
164+
165+
# Scrapy stuff:
166+
.scrapy
167+
168+
# Sphinx documentation
169+
docs/_build/
170+
171+
# PyBuilder
172+
.pybuilder/
173+
target/
174+
175+
# Jupyter Notebook
176+
.ipynb_checkpoints
177+
178+
# IPython
179+
profile_default/
180+
ipython_config.py
181+
182+
# pyenv
183+
# For a library or package, you might want to ignore these files since the code is
184+
# intended to run in multiple environments; otherwise, check them in:
185+
# .python-version
186+
187+
# pipenv
188+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
189+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
190+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
191+
# install all needed dependencies.
192+
#Pipfile.lock
193+
194+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
195+
__pypackages__/
196+
197+
# Celery stuff
198+
celerybeat-schedule
199+
celerybeat.pid
200+
201+
# SageMath parsed files
202+
*.sage.py
203+
204+
# Environments
205+
.env
206+
.venv
207+
env/
208+
venv/
209+
ENV/
210+
env.bak/
211+
venv.bak/
212+
213+
# Spyder project settings
214+
.spyderproject
215+
.spyproject
216+
217+
# Rope project settings
218+
.ropeproject
219+
220+
# mkdocs documentation
221+
/site
222+
223+
# mypy
224+
.mypy_cache/
225+
.dmypy.json
226+
dmypy.json
227+
228+
# Pyre type checker
229+
.pyre/
230+
231+
# pytype static type analyzer
232+
.pytype/
233+
234+
# Cython debug symbols
235+
cython_debug/
236+
237+
### Redis ###
238+
# Ignore redis binary dump (dump.rdb) files
239+
240+
*.rdb
241+
242+
# End of https://www.toptal.com/developers/gitignore/api/python,pycharm+all,redis

ReadMe.rst

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
Install requirements
2+
====================
3+
4+
$ pip install -r requirements.txt
5+
6+
7+
Run server
8+
==========
9+
10+
$ uvicorn main:app
11+
12+
13+
Run tests
14+
=========
15+
16+
$ pytest
17+
18+
Browse
19+
======
20+
21+
http://127.0.0.1:8000/docs
22+
23+
http://127.0.0.1:8000/score/
24+
25+
26+
Knowledge links
27+
===============
28+
29+
30+
https://fastapi.tiangolo.com/tutorial/metadata/
31+

main.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from fastapi import FastAPI
2+
3+
description = """
4+
## Description
5+
Github Score Application to rank repositories. 🚀
6+
## Available APIs
7+
The following is a list of available APIs.
8+
"""
9+
10+
tags_metadata = [
11+
{
12+
"name": "score",
13+
"description": "The main API to score",
14+
},
15+
]
16+
17+
app = FastAPI(
18+
title="Github Score App",
19+
description=description,
20+
version="0.0.1",
21+
openapi_tags=tags_metadata
22+
)
23+
24+
25+
@app.get("/score/", tags=["score"])
26+
async def score():
27+
"""
28+
*Example:*
29+
30+
curl -X 'GET' 'http://127.0.0.1:8000/score/' -H 'accept: application/json'
31+
"""
32+
# @todo: Implement real score API
33+
return {"score": 100}
34+
35+

requirements.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
pytest==6.2.5
2+
fastapi==0.68.1
3+
uvicorn==0.15.0
4+
requests==2.26.0

test_main.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from fastapi.testclient import TestClient
2+
3+
from main import app
4+
5+
client = TestClient(app)
6+
7+
8+
def test_score():
9+
"""
10+
Test `score` API
11+
"""
12+
response = client.get("/")
13+
assert response.status_code == 200
14+
assert response.json() == {"score": 100}

0 commit comments

Comments
 (0)