from flask_restful import Resource from flask_restful import fields, marshal_with, marshal_with_field, marshal from sqlalchemy.orm import load_only, contains_eager, joinedload from sqlalchemy import sql import datetime from feed_status import util from feed_status.connectors import mysql from feed_status.models.orm import dim_store from feed_status.models import ingestion_feed import json ingestion_feeds_fields = { 'storeName': fields.String(attribute='dim_store.storeName'), 'feed_name': fields.String, 'update_freq': fields.Integer, 'status_source_db': fields.String, 'enabled': fields.Integer, } class IngestionFeeds(Resource): @marshal_with(ingestion_feeds_fields) def get(self): session = mysql.art_relations_session() ingestion_feeds = session.query( ingestion_feed.IngestionFeed).\ filter(ingestion_feed.IngestionFeed.enabled == 1).\ options(joinedload(ingestion_feed.IngestionFeed.dim_store)).all() session.close() return ingestion_feeds ingestion_feed_status_fields = { 'data': fields.List( fields.Nested( { 'feed_id': fields.String(attribute='feed_id'), 'feedName': fields.String(attribute='feed_name'), 'status': fields.Raw, 'delivery_date': fields.String })), 'dates': fields.List(fields.String) } class IngestionFeedStatus(Resource): @marshal_with(ingestion_feed_status_fields) def get(self, feed_name): days_count = 60 delta = datetime.timedelta(days=days_count-1) from_date = datetime.datetime.now().date() - delta to_date = datetime.datetime.now().date() - datetime.timedelta(days=1) if feed_name == 'all': ingestion_feeds = ingestion_feed.get_active_feeds() else: ingestion_feeds = ingestion_feed.get_feed(feed_name) for feed in ingestion_feeds: feed.status = ingestion_feed.get_feed_ingestion_history( feed, from_date, to_date) dates = util.generate_default_date_dict(days_count, 1) dates = list(dates.keys()) return { 'data': ingestion_feeds, 'dates': dates }