def query():
    """
    given {start_time, end_time, grid_id [optional]}
    return -> [{grid_id, volume}, ...]
    """
    start_time = datetime.strptime(request.query.get('start_time'), '%Y-%m-%dT%H:%M:%SZ')
    end_time = datetime.strptime(request.query.get('end_time'), '%Y-%m-%dT%H:%M:%SZ')
    grid_id = request.query.get('grid_id')

    mg = MongoDB()
    mg.connect()

    print('querying grid volumes...')

#     if grid_id:
#         results = mg.group_by([{'$match': {'created_at': {'$gt': start_time, '$lt': end_time}, 'grid_id': grid_id}},
#                                {'$group': {'_id': '$grid_id', 'count': {'$sum': 1}}}
#                                ])
#     else:
#         results = mg.group_by([{'$match': {'created_at': {'$gt': start_time, '$lt': end_time}}},
#                                {'$group': {'_id': '$grid_id', 'count': {'$sum': 1}}}
#                                ])
#    group and count distinct user:
    results = mg.group_by([ {'$match': {'created_at': {'$gt': start_time, '$lt': end_time}}},
                            {'$group': {'_id':{ 'grid_id':'$grid_id', 'user_id':'$user_id' }, 'count': {'$sum': 1} } },
                            {'$group': {'_id': '$_id.grid_id', 'count': {'$sum': 1}}}
                          ])

    ret = []
    for result in results:
        ret.append({'grid_id': result['_id'], 'volume': result['count']})

    response.content_type = 'application/json'
    return json_dumps(ret, indent=2)
def all_grids():
    mg = MongoDB()
    mg.connect()
    griddb = GridDB()
    print('querying grid volumes...')
    results = mg.group_by([{'$match': {'created_at': {'$gt': datetime.strptime('2012-10-15T20:00:02Z', '%Y-%m-%dT%H:%M:%SZ'),
                                                      '$lt': datetime.strptime('2012-11-15T20:00:02Z', '%Y-%m-%dT%H:%M:%SZ')}}}])   # print(results)
    griddb.add(results)

    ret = Grid.get_raw_pandas_ts(results, 'D')

    STL.seasonal_decomposition(ret)
def single_grid(grid_id):
    mg = MongoDB()
    mg.connect()
    start_time = datetime.strptime('2012-10-15T20:00:02Z', '%Y-%m-%dT%H:%M:%SZ')
    end_time = datetime.strptime('2012-11-15T20:00:02Z', '%Y-%m-%dT%H:%M:%SZ')

    print('querying grid volumes...')
    # results = mg.group_by([{'$match': {'created_at': {'$gt': start_time, '$lt': end_time}, 'grid_id': grid_id}},
    #                       {'$group': {'_id': '$grid_id', 'count': {'$sum': 1}}}])
    results = mg.group_by([{'$match': {'created_at': {'$gt': datetime.strptime('2012-10-15T00:00:00Z', '%Y-%m-%dT%H:%M:%SZ'),
                                                       '$lt': datetime.strptime('2012-11-15T00:00:00Z', '%Y-%m-%dT%H:%M:%SZ')},
                                       'grid_id': grid_id}}])   # print(results)
    print(results)
    ret = Grid.get_raw_pandas_ts(results, 'H')
    # print('------------')
    # print(ret)
    print(STL.seasonal_decomposition(ret))
    print("tweets loaded")

    # for grid_id in grid_db.grid_cache:
    #     print(grid_id, grid_db.grid_cache[grid_id].get_ts(grid_db.get_tweets(), 'H'))
    exit()
    mg = MongoDB()
    mg.connect()

    print("querying grid volumes...")

    results = mg.group_by(
        [
            {
                "$match": {
                    "created_at": {
                        "$gt": datetime.strptime("2012-10-15T20:00:02Z", "%Y-%m-%dT%H:%M:%SZ"),
                        "$lt": datetime.strptime("2012-10-22T20:00:02Z", "%Y-%m-%dT%H:%M:%SZ"),
                    }
                }
            }
        ]
    )  # print(results)

    # results = mg.group_by([{'$match': {'created_at': {'$gt': datetime.strptime('2012-10-15T20:00:02Z', '%Y-%m-%dT%H:%M:%SZ'),
    #                                                   '$lt': datetime.strptime('2012-11-15T20:00:02Z', '%Y-%m-%dT%H:%M:%SZ')}, 'grid_id': '34013011500'}}])   # print(results)
    ret = Grid.get_raw_pandas_ts(results, "D")
    # print('ret: ', ret)
    # for result in Grid.get_ts(results, 'H'):
    # print(result[0])
    #     # print('result: ', result)
    #     for tup in result:
    #     obj = []