Skip to content

Commit ee64618

Browse files
committed
init commit
1 parent 3e11ad1 commit ee64618

File tree

24 files changed

+351
-497
lines changed

24 files changed

+351
-497
lines changed

requirements.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
click==8.0.4
2+
Flask==2.0.3
3+
itsdangerous==2.1.2
4+
Jinja2==3.1.1
5+
MarkupSafe==2.1.1
6+
typer==0.4.0
7+
Werkzeug==2.0.3

src/components/actions/base/action.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import datetime
2+
from logging import getLogger, DEBUG
3+
4+
from utils.log import CONSOLE_HANDLER
5+
6+
logger = getLogger(__name__)
7+
logger.addHandler(CONSOLE_HANDLER)
8+
logger.setLevel(DEBUG)
9+
10+
11+
class ActionManager:
12+
def __init__(self):
13+
self._actions = []
14+
15+
def get(self, action_name: str):
16+
"""
17+
Gets action from manager that matches given name
18+
:param action_name: name of action
19+
:return: Action()
20+
"""
21+
for action in self._actions:
22+
if action.name == action_name:
23+
return action
24+
25+
raise ValueError(f'Cannot find action with name {action_name}')
26+
27+
28+
am = ActionManager()
29+
30+
31+
class ActionLogEvent:
32+
def __init__(self, status, msg):
33+
self.timestamp = datetime.datetime.now()
34+
self.status = status
35+
self.msg = msg
36+
37+
38+
class Action:
39+
objects = am
40+
41+
def __init__(self):
42+
self.name = 'Unnamed Action'
43+
self.logs = []
44+
45+
def __str__(self):
46+
return f'{self.name}'
47+
48+
def get_logs(self):
49+
"""
50+
Gets run logs in descending order
51+
:return: list
52+
"""
53+
return self.logs
54+
55+
def run(self, *args, **kwargs):
56+
"""
57+
Runs, logs action
58+
"""
59+
self.logs.append(ActionLogEvent('INFO', 'action run'))
60+
logger.info(f'ACTION TRIGGERED --->\t{str(self)}')
61+
pass
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from components.actions.base.action import Action
2+
3+
4+
class TemplateActionClass(Action):
5+
def __init__(self):
6+
super().__init__()
7+
self.name = '_TemplateAction_'
8+
9+
def run(self, *args, **kwargs):
10+
super(Action).run(*args, **kwargs)
11+
"""
12+
Custom run method. Add your custom logic here.
13+
"""
14+
print(self.name, '---> action has run!')
15+
16+
17+
template_action = TemplateActionClass()

src/components/events/base/event.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# configure logging
2+
from logging import getLogger, DEBUG
3+
4+
from utils.log import CONSOLE_HANDLER
5+
6+
logger = getLogger(__name__)
7+
logger.addHandler(CONSOLE_HANDLER)
8+
logger.setLevel(DEBUG)
9+
10+
11+
class Event:
12+
def __init__(self):
13+
self.name = 'Unnamed Event'
14+
self._actions = []
15+
self.logs = []
16+
17+
def __str__(self):
18+
return f'{self.name}'
19+
20+
def register_action(self, action):
21+
"""
22+
Will implement checking here eventually (tm)
23+
:param action: Action() to register
24+
"""
25+
self._actions.append(action)
26+
27+
def trigger_actions(self):
28+
logger.info(f'EVENT TRIGGERED --->\t{str(self)}')
29+
for action in self._actions:
30+
action.run()
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from components.events.base.event import Event
2+
3+
4+
class TemplateEventClass(Event):
5+
def __init__(self):
6+
super().__init__()
7+
self.name = '_TemplateEvent_'
8+
9+
10+
template_event = TemplateEventClass()

src/components/schemas/order.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from components.schemas.schema import Schema
2+
3+
4+
class Order(Schema):
5+
def __init__(self):
6+
super().__init__()
7+
self.order_type = str
8+
self.side = str
9+
self.quantity = int
10+
self.symbol = str
11+
self.price = float

src/components/schemas/schema.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
class Schema:
3+
def __init__(self):
4+
pass
5+
6+
def as_json(self):
7+
pass

src/main.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# initialize our Flask application
2+
from logging import getLogger, DEBUG
3+
4+
from flask import Flask, request, jsonify, render_template
5+
6+
from utils.log import CONSOLE_HANDLER
7+
8+
app = Flask(__name__)
9+
10+
# configure logging
11+
logger = getLogger(__name__)
12+
logger.addHandler(CONSOLE_HANDLER)
13+
logger.setLevel(DEBUG)
14+
15+
16+
@app.route("/", methods=["GET"])
17+
def dashboard():
18+
if request.method == 'GET':
19+
return render_template('dashboard.html')
20+
21+
@app.route("/webhook", methods=["POST"])
22+
def webhook():
23+
if request.method == 'POST':
24+
logger.info(f'Request Data: {request.get_json()}')
25+
return jsonify(str('success'))
26+
27+
28+
if __name__ == '__main__':
29+
app.run(debug=True)

src/tests/__init__.py

Whitespace-only changes.

src/tests/test_tvwb.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import os
2+
from unittest import TestCase
3+
4+
5+
class TestCLI(TestCase):
6+
# change dir before running tests
7+
8+
os.chdir('..')
9+
10+
def test_newevent(self):
11+
from tvwb import newevent
12+
assert newevent(name='TestEvent')
13+
self.assertRaises(ValueError, newevent, name='!')
14+
self.assertRaises(ValueError, newevent, name='@')
15+
self.assertRaises(ValueError, newevent, name='#')
16+
self.assertRaises(ValueError, newevent, name='test event')
17+
self.assertRaises(ValueError, newevent, name='test-event')
18+
self.assertRaises(ValueError, newevent, name='test_event')
19+
20+
def test_newaction(self):
21+
from tvwb import newaction
22+
assert newaction(name='TestAction')
23+
self.assertRaises(ValueError, newaction, name='!')
24+
self.assertRaises(ValueError, newaction, name='@')
25+
self.assertRaises(ValueError, newaction, name='#')
26+
self.assertRaises(ValueError, newaction, name='test action')
27+
self.assertRaises(ValueError, newaction, name='test-action')
28+
self.assertRaises(ValueError, newaction, name='test_action')

0 commit comments

Comments
 (0)