Skip to content

Commit d21a12a

Browse files
Initial setup
0 parents  commit d21a12a

7 files changed

Lines changed: 106 additions & 0 deletions

File tree

.github/workflows/ci.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
me: API workflow
2+
3+
on: [push, pull_request]
4+
5+
jobs:
6+
build:
7+
runs-on: ubuntu-latest
8+
name: Test python API
9+
steps:
10+
- uses: actions/checkout@v4
11+
- uses: actions/setup-python@v2
12+
with:
13+
python-version: '3.10'
14+
- name: Install requirements
15+
run: pip install -r api/requirements.txt
16+
- name: Run tests and collect coverage
17+
run: pytest --cov=api.calculator --cov-report=xml

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
*.py[oc]
2+
__pycache__
3+
.coverage
4+
.pytest_cache/
5+
coverage.xml
6+
node_modules/
7+
coverage/

api/__init__.py

Whitespace-only changes.

api/app.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from flask import (
2+
Flask,
3+
request,
4+
)
5+
6+
from calculator.calculator import Calculator
7+
8+
app = Flask(__name__)
9+
10+
@app.route('/api/add', methods=['POST'])
11+
def add():
12+
return operation('add', 2)
13+
14+
@app.route('/api/subtract', methods=['POST'])
15+
def subtract():
16+
return operation('subtract', 2)
17+
18+
@app.route('/api/multiply', methods=['POST'])
19+
def multiply():
20+
return operation('multiply', 2)
21+
22+
@app.route('/api/divide', methods=['POST'])
23+
def divide():
24+
return operation('divide', 2)
25+
26+
def operation(method, num_factors):
27+
factors = []
28+
if num_factors == 2:
29+
factors.append(float(request.json.get('x')))
30+
factors.append(float(request.json.get('y')))
31+
32+
return str(getattr(Calculator, method)(*factors))
33+
34+
35+
app.run(host='0.0.0.0', port=8080)

api/calculator.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
ass Calculator:
2+
def add(x, y):
3+
return x + y
4+
5+
def subtract(x, y):
6+
return x - y
7+
8+
def multiply(x, y):
9+
return x * y
10+
11+
def divide(x, y):
12+
if y == 0:
13+
return 'Cannot divide by 0'
14+
return x * 1.0 / y

api/requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
flask
2+
pytest-cov

api/test_calculator.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from .calculator import Calculator
2+
3+
4+
def test_add():
5+
assert Calculator.add(1, 2) == 3.0
6+
assert Calculator.add(1.0, 2.0) == 3.0
7+
assert Calculator.add(0, 2.0) == 2.0
8+
assert Calculator.add(2.0, 0) == 2.0
9+
assert Calculator.add(-4, 2.0) == -2.0
10+
11+
def test_subtract():
12+
assert Calculator.subtract(1, 2) == -1.0
13+
assert Calculator.subtract(2, 1) == 1.0
14+
assert Calculator.subtract(1.0, 2.0) == -1.0
15+
assert Calculator.subtract(0, 2.0) == -2.0
16+
assert Calculator.subtract(2.0, 0.0) == 2.0
17+
assert Calculator.subtract(-4, 2.0) == -6.0
18+
19+
def test_multiply():
20+
assert Calculator.multiply(1, 2) == 2.0
21+
assert Calculator.multiply(1.0, 2.0) == 2.0
22+
assert Calculator.multiply(0, 2.0) == 0.0
23+
assert Calculator.multiply(2.0, 0.0) == 0.0
24+
assert Calculator.multiply(-4, 2.0) == -8.0
25+
26+
def test_divide():
27+
assert Calculator.divide(1, 2) == 0.5
28+
assert Calculator.divide(1.0, 2.0) == 0.5
29+
assert Calculator.divide(0, 2.0) == 0
30+
assert Calculator.divide(-4, 2.0) == -2.0
31+
# assert Calculator.divide(2, 0) == 'Cannot divide by 0'

0 commit comments

Comments
 (0)