Ejemplo n.º 1
0
def time_series_adjusted_download(symbol, update=False):
    outputsize = ParamOutputSize.FULL.value
    if update:
        outputsize = ParamOutputSize.COMPACT.value
    datatype = DataType.JSON.value
    symbol = symbol.upper()
    url = 'https://www.alphavantage.co/query?' \
          'function=TIME_SERIES_DAILY_ADJUSTED&' \
          'symbol={0}&outputsize={1}&datatype={2}&apikey={3}' \
        .format(symbol, outputsize, datatype, GlobalConfigModel.retrieve('ALPHA_VANTAGE_KEY'))

    r = requests.get(url)

    json_string = r.text
    obj = json.loads(json_string)['Time Series (Daily)']

    with DB_CONFIG.transaction() as txn:
        for key, value in obj.items():
            m_open = str_to_float(value['1. open'])
            high = str_to_float(value['2. high'])
            low = str_to_float(value['3. low'])
            close = str_to_float(value['4. close'])
            adjusted_close = str_to_float(value['5. adjusted close'])

            percent = adjusted_close / close

            TimeSeriesDailyAdjustedModel.insert(
                symbol=symbol,
                date=key,

                open=m_open,
                high=high,
                low=low,
                close=close,

                adjusted_open=float_to_float(m_open * percent),
                adjusted_high=float_to_float(high * percent),
                adjusted_low=float_to_float(low * percent),
                adjusted_close=adjusted_close,

                volume=int(value['6. volume']),
                dividend_amount=str_to_float(value['7. dividend amount']),
                split_coefficient=str_to_float(value['8. split coefficient'])
            ).on_conflict_ignore().execute()
        txn.commit()
Ejemplo n.º 2
0
class JobScheduler:
    SCHEDULER_NUM = 1
    SCHEDULER_TIME_ZONE = GlobalConfigModel.retrieve('SCHEDULER_TIME_ZONE')

    def __init__(self):
        self.scheduler = BackgroundScheduler(
            {'apscheduler.timezone': JobScheduler.SCHEDULER_TIME_ZONE})
        self.scheduler_num = JobScheduler.SCHEDULER_NUM
        JobScheduler.SCHEDULER_NUM += 1
        self.scheduler.start()
        self.jobs = {}

    def create_job(self,
                   name,
                   app_id,
                   func,
                   triggers,
                   metadata,
                   args=None,
                   on_error=OnError.RETRY):
        if name not in self.jobs:
            job = Job(name=name,
                      app_id=app_id,
                      func=func,
                      triggers=triggers,
                      scheduler_num=self.scheduler_num,
                      args=args,
                      on_error=on_error,
                      scheduler=self.scheduler,
                      metadata=metadata)
            self.jobs[name] = job
            job.run()
            return True
        return False

    def remove_job(self, name):
        if name in self.jobs:
            job = self.jobs[name]
            job.remove()
            del self.jobs[name]

    def get_str_jobs(self):
        return [job.get_info() for job in self.jobs.values()]
Ejemplo n.º 3
0
import bcrypt

from database.config.global_config_model import GlobalConfigModel

MASTER_SESSION_ID = GlobalConfigModel.retrieve('SESSION_ID').encode()
ALLOWED_SESSIONS = set()


def authenticate(func):
    def inner(*args, **kwargs):
        session_id = args[-1].get('session_id', None)

        # Validate session id is present
        if session_id is None:
            return {'error': 'No session id'}, 401

        # Validate session id is correct
        if session_id not in ALLOWED_SESSIONS:
            if not bcrypt.checkpw(session_id.encode(), MASTER_SESSION_ID):
                return {'error': 'Session id incorrect'}, 401
            ALLOWED_SESSIONS.add(session_id)
        return func(*args, **kwargs)

    return inner


class Gateway:
    def __init__(self, app_manager, messenger):
        self.app_manager = app_manager
        self.messenger = messenger
Ejemplo n.º 4
0
 def __init__(self):
     super().__init__()
     self.reddit = praw.Reddit(client_id=GlobalConfigModel.retrieve('CLIENT_ID'),
                               client_secret=GlobalConfigModel.retrieve('CLIENT_SECRET'),
                               user_agent='Test Script2')
Ejemplo n.º 5
0
from common.enums import Variant
from database.config.global_config_model import GlobalConfigModel


DEFAULT_DURATION = GlobalConfigModel.retrieve('MESSAGE_DEFAULT_DURATION')
DEFAULT_VARIANT = Variant.INFO


class Messenger:

    def __init__(self, socketio):
        self.socketio = socketio

    def toast(self, toast):
        config = {'message': toast.message,
                  'duration': toast.duration,
                  'variant': toast.variant
                  }
        self.socketio.emit('toast-message', config)


class Toast:

    IDENTIFIER = '<TOAST>'

    def __init__(self, message, duration=DEFAULT_DURATION, variant=DEFAULT_VARIANT):
        self.message = message
        self.duration = duration
        self.variant = variant
Ejemplo n.º 6
0
import csv
import os

import requests

from apps.baseapp import App
from common.enums import APP, Variant
from common.messenger import Toast
from constants import EXCHANGES_DIR, STATIC_DIR, ROOT_DIR
from database.config.global_config_model import GlobalConfigModel

USER_AGENT = GlobalConfigModel.retrieve('USER_AGENT')


class ExchangeUpdater(App):
    """
        Updates CSV file of exchanges.
    """

    APP_ID = APP.EXCHANGE_UPDATER
    FILE_NAME = 'ALL.CSV'
    URL = 'https://api.nasdaq.com/api/screener/stocks?tableonly=true&limit=25&offset=0&download=true'
    HEADERS = {'User-Agent': USER_AGENT,
               'Referer': 'https://www.nasdaq.com',
               'Origin': 'https://www.nasdaq.com/',
               'Host': 'api.nasdaq.com'
               }

    def __init__(self):
        super().__init__()
        self.dir_path = os.path.join(ROOT_DIR, STATIC_DIR, EXCHANGES_DIR)
Ejemplo n.º 7
0
 def __init__(self):
     super().__init__()
     self.config_map = {**LocalConfigModel.retrieve_all(), **GlobalConfigModel.retrieve_all()}
Ejemplo n.º 8
0
 def refresh_config_map(self):
     self.config_map = {**LocalConfigModel.retrieve_all(), **GlobalConfigModel.retrieve_all()}
Ejemplo n.º 9
0
from enum import Enum
from threading import Timer

from twilio.rest import Client

from common.logger import log, LogLevel
from database.config.local_config_model import LocalConfigModel
from database.config.global_config_model import GlobalConfigModel

TWILIO_SID = GlobalConfigModel.retrieve('TWILIO_SID')
TWILIO_TOKEN = GlobalConfigModel.retrieve('TWILIO_TOKEN')
TWILIO_FROM_NUMBER = GlobalConfigModel.retrieve('TWILIO_FROM_NUMBER')
TWILIO_TO_NUMBER = GlobalConfigModel.retrieve('TWILIO_TO_NUMBER')


batch_messages = []
dead_switch = True


class When(Enum):
    ONCE = 0
    NOW = 1
    NEXT = 2
    BATCH = 3


def send(msg, requester=None, when=When.NOW):
    log_message = ''
    if requester:
        log_message += '(Requester: {0})'.format(requester)
    log_message += ' ' + msg
Ejemplo n.º 10
0
from flask import Flask, request, send_file
from flask_cors import CORS
from flask_socketio import SocketIO

from apps.app_manager import AppManager
from apps.gateway import Gateway
from common.logger import log
from common.messenger import Messenger
from database.config.global_config_model import GlobalConfigModel

app = Flask(__name__)
app.config['SECRET_KEY'] = GlobalConfigModel.retrieve('FLASK_SECRET_KEY')
socketio = SocketIO(app, cors_allowed_origins='*', cookie=False)
CORS(app)
gateway = Gateway(AppManager(), Messenger(socketio))
log('Flask', 'Deployed')


@app.route('/')
def main():
    return 'Luminarias Server'


@app.route('/<string:command>', methods=['POST'])
def raw(command):
    data = request.get_json()
    return gateway.raw(command, data)


@app.route('/<action>/<string:app_id>/<string:command>', methods=['POST'])
def enact(action, app_id, command):