Skip to content

Commit 5f521dd

Browse files
committed
Fixes #10 Add CLI commands to generate API definition
1 parent 5153909 commit 5f521dd

File tree

5 files changed

+89
-4
lines changed

5 files changed

+89
-4
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ __pycache__/
2020

2121
# Files generated for development
2222
.env
23+
timetracker-api-postman-collection.json
24+
swagger.json

README.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,21 @@ automatically [pip](https://pip.pypa.io/en/stable/) as well.
4747
```
4848
4949
- Open `http://127.0.0.1:5000/` in a browser. You will find in the presented UI
50-
a link to the swagger.json with the definition of the api.
50+
a link to the swagger.json with the definition of the api.
51+
52+
53+
## CLI
54+
55+
There are available commands aware of the API that can be verify useful for you. You
56+
can check them out by running
57+
58+
```angular2
59+
python cli.py
60+
```
61+
62+
If you want to run an specific command, e.g. `gen_swagger_json`, specify it as a param
63+
as well as its correspondent options.
64+
65+
```angular2
66+
python cli.py gen_swagger_json -f ~/Downloads/swagger.json
67+
```

cli.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#!/usr/bin/env python3
2+
3+
print("****************")
4+
print("TimeTracker CLI")
5+
print("****************")
6+
7+
import os
8+
9+
from flask import json
10+
from time_tracker_api import create_app
11+
from flask_script import Manager
12+
from time_tracker_api.api import api
13+
14+
app = create_app()
15+
cli_manager = Manager(app)
16+
17+
18+
@cli_manager.command
19+
@cli_manager.option('-f', '--filename', help='Path of the swagger file. By default swagger.json')
20+
def gen_swagger_json(filename='swagger.json'):
21+
""" Exports swagger specifications in json format """
22+
schema_json_data = json.dumps(api.__schema__)
23+
save_data(schema_json_data, filename)
24+
25+
26+
@cli_manager.command
27+
@cli_manager.option('-f', '--filename', dest='filename', help='Path of the postman collection file.'
28+
'By default it is timetracker-api-postman-collection.json')
29+
def gen_postman_collection(filename='timetracker-api-postman-collection.json'):
30+
""" Generates a Postman collection for the API """
31+
data = api.as_postman(urlvars=False, swagger=True)
32+
postman_collection_json_data = json.dumps(data)
33+
parsed_json = postman_collection_json_data.replace("http://localhost", '{{timetracker_api_host}}')
34+
save_data(parsed_json, filename)
35+
36+
37+
def save_data(data, filename):
38+
""" Save text content to a file """
39+
if filename:
40+
try:
41+
real_path = os.path.expanduser(filename)
42+
with open(real_path, "w") as f:
43+
f.write(data)
44+
print("%s was generated successfully" % real_path)
45+
except OSError as err:
46+
print("Error while generating '%s': %s" % filename, err)
47+
else:
48+
print(data)
49+
50+
51+
if __name__ == "__main__":
52+
cli_manager.run()

requirements/prod.txt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
1+
# requirements/prod.txt
2+
3+
# For production releases
4+
5+
#Required by Flask
16
Flask==1.1.1
2-
flask-restplus==0.13.0
37
flake8==3.7.9
8+
WSGIserver==1.3
49
Werkzeug==0.16.1
5-
gunicorn==20.0.4
10+
Jinja2==2.11.1
11+
12+
#WSGI server
13+
gunicorn==20.0.4
14+
15+
#Swagger support for Restful API
16+
flask-restplus==0.13.0
17+
18+
#CLI support
19+
Flask-Script==2.0.6

run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
from time_tracker_api import create_app
66

77
app = create_app()
8-
print("BPM Projects API server was created")
8+
print("TimeTracker API server was created")

0 commit comments

Comments
 (0)