Exemplo n.º 1
0
def test_error_response(mock):
    mock.return_value = TestResponse(status_code=500, data={'errors': {'detail': 'Internal server error'}})
    with assert_raises(SanError):
        san.get(
            "prices/santiment_usd",
            from_date="2018-06-01",
            to_date="2018-06-05",
            interval="1d"
        )
Exemplo n.º 2
0
def crypto_p(crypto, start, end):
    df = san.get('projects/all')
    ii = df.index[df['name'] == crypto]
    li = str(df['slug'][ii]).split()
    df1 = san.get("ohlcv/" + li[1],
                  from_date=start,
                  to_date=end,
                  interval="1d")
    df1 = df1.assign(returns=df1['closePriceUsd'] -
                     df1['openPriceUsd'])  #Returns Calculation per day
    return (df1)
Exemplo n.º 3
0
def test_top_transfers():
    result = san.get('top_transfers/santiment',
                     from_date=params['from_date'],
                     to_date=params['to_date'],
                     interval='1d')

    assert len(result) != 0
Exemplo n.º 4
0
def get_san_metric(start,
                   end,
                   metric,
                   asset,
                   interval,
                   iterate_over_days=120,
                   convert_index=True):
    ''' Iterates over days and gets the metric data. '''
    start = datetime.datetime.strptime(start, '%Y-%m-%d').date()
    end = datetime.datetime.strptime(end, '%Y-%m-%d').date()
    df = pd.DataFrame(None)

    for i in range(int(np.ceil((end - start).days / iterate_over_days))):
        start_date = str(start +
                         datetime.timedelta(days=iterate_over_days * i))
        end_date = str(
            min(
                end, start + datetime.timedelta(days=iterate_over_days *
                                                (i + 1) - 1)))

        df_batch = san.get(f'{metric}/{asset}',
                           from_date=start_date,
                           to_date=end_date,
                           interval=interval)
        df = df.append(df_batch)
        if convert_index:
            df.index = df.index.astype('datetime64[ns]')

    return df
Exemplo n.º 5
0
def test_get_without_transform(mock):
    api_call_result = {
        'query_0': [{
            'balance': 212664.33000000002,
            'datetime': '2019-05-23T00:00:00Z'
        }, {
            'balance': 212664.33000000002,
            'datetime': '2019-05-24T00:00:00Z'
        }, {
            'balance': 212664.33000000002,
            'datetime': '2019-05-25T00:00:00Z'
        }]
    }

    # The value is passed by refference, that's why deepcopy is used for
    # expected
    mock.return_value = TestResponse(status_code=200,
                                     data=deepcopy(api_call_result))

    res = san.get("historical_balance/santiment",
                  address="0x1f3df0b8390bb8e9e322972c5e75583e87608ec2",
                  from_date="2019-05-23",
                  to_date="2019-05-26",
                  interval="1d")
    expected_df = convert_to_datetime_idx_df(api_call_result['query_0'])
    pdt.assert_frame_equal(res, expected_df, check_dtype=False)
Exemplo n.º 6
0
 def add_project(self, project):
     self.asset_list.append(project)
     self.portfolio[project] = san.get(
         "ohlcv/" + project,
         from_date=self.start_date,
         to_date=self.end_date).closePriceUsd.pct_change()
     self.portfolio = self.portfolio.replace([np.inf, -np.inf], 0)
Exemplo n.º 7
0
def test_prices(mock):
    api_call_result = {
        'query_0': [{
            'priceUsd': '1.234634930555555',
            'priceBtc': '0.0001649780416666666',
            'datetime': '2018-06-01T00:00:00Z'
        }, {
            'priceUsd': '1.2551352777777771',
            'priceBtc': '0.00016521851041666669',
            'datetime': '2018-06-02T00:00:00Z'
        }, {
            'priceUsd': '1.251881943462897',
            'priceBtc': '0.000162902558303887',
            'datetime': '2018-06-03T00:00:00Z'
        }, {
            'priceUsd': '1.2135782638888888',
            'priceBtc': '0.0001600935277777778',
            'datetime': '2018-06-04T00:00:00Z'
        }]
    }
    mock.return_value = TestResponse(status_code=200,
                                     data=deepcopy(api_call_result))

    res = san.get("prices/santiment_usd",
                  from_date="2018-06-01",
                  to_date="2018-06-05",
                  interval="1d")

    df = convert_to_datetime_idx_df(api_call_result['query_0'])
    pdt.assert_frame_equal(res, df, check_dtype=False)
Exemplo n.º 8
0
def test_news():
    result = san.get('news/' + params['project_slug'],
                     from_date='2019-04-18',
                     to_date='2019-07-11',
                     size=5)
    assert len(result.index) >= 1
    assert 'DatetimeIndex' in str(type(result.index))
    assert result.empty == False
Exemplo n.º 9
0
def test_eth_spent_over_time():
    result = san.get('eth_spent_over_time/' + params['project_slug'],
                     from_date=params['from_date'],
                     to_date=params['to_date'],
                     interval=params['interval'])
    assert len(result.index) >= 1
    assert 'DatetimeIndex' in str(type(result.index))
    assert result.empty == False
Exemplo n.º 10
0
def test_token_top_transactions():
    result = san.get('token_top_transactions/' + params['project_slug'],
                     from_date='2019-06-18',
                     to_date='2019-07-11',
                     limit=5)
    assert len(result.index) >= 1
    assert 'DatetimeIndex' in str(type(result.index))
    assert result.empty == False
Exemplo n.º 11
0
def _test_ordinary_function(query, slug=params['project_slug']):
    result = san.get(query + '/' + slug,
                     from_date=params['from_date'],
                     to_date=params['to_date'],
                     interval=params['interval'])
    assert result.empty == False
    assert len(result.index) >= 1
    assert 'DatetimeIndex' in str(type(result.index))
Exemplo n.º 12
0
def test_historical_balance():
    result = san.get('historical_balance/' + params['project_slug'],
                     address=params['address'],
                     from_date=params['from_date'],
                     to_date=params['to_date'],
                     interval=params['interval'])
    assert len(result.index) >= 1
    assert 'DatetimeIndex' in str(type(result.index))
    assert result.empty == False
Exemplo n.º 13
0
def test_top_holders_percent_of_total_supply():
    result = san.get('top_holders_percent_of_total_supply/' +
                     params['project_slug'],
                     number_of_holders=10,
                     from_date=params['from_date'],
                     to_date=params['to_date'])
    assert len(result.index) >= 1
    assert 'DatetimeIndex' in str(type(result.index))
    assert result.empty == False
Exemplo n.º 14
0
    def metrics(self, metric):
        metric_data = pd.DataFrame()
        for asset in self.asset_list:
            metric_data[asset] = san.get(metric + "/" + asset,
                                         from_date=self.start_date,
                                         to_date=self.end_date).iloc[:, 0]

        self.metrics[metric] = metric_data
        return metric_data
Exemplo n.º 15
0
def loadSantimentMetric(metric, asset, start, end, interval, args):
  data = san.get(
    (metric + '/' + asset.slug)
  , from_date = start.isoformat()
  , to_date   = end.isoformat()
  , interval  = intervalISOFormat(interval)
  )

  cacheSantimentMetric(metric, asset, start, interval, data[metric_dic[metric]])
Exemplo n.º 16
0
def test_ohlcv():
    ohlcv_df = san.get("{}/{}".format('ohlcv', params['project_slug']),
                       from_date=params['from_date'],
                       to_date=params['to_date'],
                       interval=params['interval'])

    assert len(ohlcv_df.index) >= 1
    assert 'DatetimeIndex' in str(type(ohlcv_df.index))
    assert ohlcv_df.empty == False
Exemplo n.º 17
0
def test_emerging_trends():
    get_metric_df = san.get('emerging_trends',
                            from_date=params['from_date'],
                            to_date=params['to_date'],
                            interval='1d',
                            size=5)

    assert len(get_metric_df) >= 1
    assert 'DatetimeIndex' in str(type(get_metric_df.index))
    assert get_metric_df.empty == False
Exemplo n.º 18
0
def test_get_metric():
    get_metric_df = san.get('daily_active_addresses/' + params['project_slug'],
                            from_date=params['from_date'],
                            to_date=params['to_date'],
                            interval='2d',
                            aggregation='AVG')

    assert len(get_metric_df) >= 1
    assert 'DatetimeIndex' in str(type(get_metric_df.index))
    assert get_metric_df.empty == False
Exemplo n.º 19
0
def loadPrice(metric, asset, start, end, interval, args):
  data = san.get(
    ('prices/' + asset.slug)
  , from_date = start.isoformat()
  , to_date   = end.isoformat()
  , interval  = intervalISOFormat(interval)
  )

  # Cache all the data
  fillMissingData(start, end, interval, data)
  cacheSantimentMetric(metric, asset, start, interval, data[UNIT])
Exemplo n.º 20
0
def test_top_social_gainers_losers():
    tsgl_df = san.get('top_social_gainers_losers',
                      from_date=params['from_date'],
                      to_date=params['to_date'],
                      size=5,
                      time_window='2d',
                      status='ALL')

    assert len(tsgl_df) >= 1
    assert 'DatetimeIndex' in str(type(tsgl_df.index))
    assert tsgl_df.empty == False
Exemplo n.º 21
0
def test_eth_top_transactions():
    transaction_types = ['ALL', 'IN', 'OUT']
    for item in transaction_types:
        result = san.get('eth_top_transactions/' + params['project_slug'],
                         from_date='2019-06-11',
                         to_date='2019-07-11',
                         limit=5,
                         transaction_type=item)
        assert len(result.index) >= 1
        assert 'DatetimeIndex' in str(type(result.index))
        assert result.empty == False
Exemplo n.º 22
0
def test_price_volume_difference():
    currencies = ['USD', 'BTC']
    for item in currencies:
        result = san.get('price_volume_difference/' + params['project_slug'],
                         from_date=params['from_date'],
                         to_date=params['to_date'],
                         interval=params['interval'],
                         currency=item)
        assert len(result.index) >= 1
        assert 'DatetimeIndex' in str(type(result.index))
        assert result.empty == False
Exemplo n.º 23
0
def test_social_dominance():
    sources = ['ALL', 'REDDIT', 'TELEGRAM']
    for item in sources:
        result = san.get('social_dominance/' + params['project_slug'],
                         from_date=params['from_date'],
                         to_date=params['to_date'],
                         interval=params['interval'],
                         source=item)
        assert len(result.index) >= 1
        assert 'DatetimeIndex' in str(type(result.index))
        assert result.empty == False
Exemplo n.º 24
0
def loadSocialVolume(metric, asset, start, end, interval, args):
  assert len(args) > 0

  data = san.get(
    ('social_volume/' + asset.slug)
  , from_date = start.isoformat()
  , to_date   = end.isoformat()
  , interval  = intervalISOFormat(interval)
  , social_volume_type = SOCIAL_VOLUME_TYPES[args[0]]
  )

  cacheSantimentMetric(metric , asset, start, interval, data['mentionsCount'])
Exemplo n.º 25
0
    def __init__(self,
                 start_date="2017-01-01",
                 end_date=datetime.datetime.now().strftime("%Y-%m-%d"),
                 asset_list=[]):
        """ Takes in list of project slugs"""

        self.start_date = start_date
        self.end_date = end_date
        self.asset_list = asset_list
        self.portfolio = pd.DataFrame()
        self.benchmark = san.get("ohlcv/bitcoin",
                                 from_date=start_date,
                                 to_date=end_date).closePriceUsd.pct_change()

        for portfolio_asset in asset_list:
            self.portfolio[portfolio_asset] = san.get(
                "ohlcv/" + portfolio_asset,
                from_date=start_date,
                to_date=end_date).closePriceUsd.pct_change()
            self.portfolio = self.portfolio.replace([np.inf, -np.inf], 0)
            self.metrics = dict()
 def get_metric(self, metric, interval="1d"):
     """
     Retrieve a Santiment Metric
     
     - returns a DataFrame with 1 column
     """
     data = san.get(metric + '/' + self.project,
                    from_date=self.start_date,
                    to_date=self.end_date,
                    interval=interval)
     data = data.rename(columns={data.columns[0]: metric})
     return data
Exemplo n.º 27
0
def filter_projects_by_marketcap(number):
    projects = san.get('projects/all')
    slugs = projects['slug'].values
    caps = []
    for i in range(len(slugs) // BATCH_SIZE):
        slugs_sub = slugs[BATCH_SIZE * i:BATCH_SIZE * (i + 1)]
        caps += get_marketcap_batch(slugs_sub)
        logging.info("Batch %s executed", i)
    results = zip(slugs, caps)
    return [
        x[0]
        for x in sorted(results, key=lambda k: k[1], reverse=True)[:number]
    ]
Exemplo n.º 28
0
def test_social_volume():
    social_volume_types = [
        'TELEGRAM_CHATS_OVERVIEW', 'TELEGRAM_DISCUSSION_OVERVIEW'
    ]
    for item in social_volume_types:
        result = san.get('social_volume/' + params['project_slug'],
                         from_date=params['from_date'],
                         to_date=params['to_date'],
                         interval=params['interval'],
                         social_volume_type=item)
        assert len(result.index) >= 1
        assert 'DatetimeIndex' in str(type(result.index))
        assert result.empty == False
Exemplo n.º 29
0
def loadSocialChartData(metric, asset, start, end, interval, args):
  assert len(args) > 1

  data = san.get(
    ('topic_search/chart_data')
  , source      = SOCIAL_SOURCE_TYPES[args[0]]
  , search_text = args[1]
  , from_date   = start.isoformat()
  , to_date     = end.isoformat()
  , interval    = intervalISOFormat(interval)
  )

  cacheSantimentMetric(metric, asset, start, interval, data['chartData'])
Exemplo n.º 30
0
def getSocialMessages(metric, asset, time, args):
  assert len(args) > 1

  start    = getSanStartTime(time)
  end      = getSanEndTime(time)
  interval = getSanInterval()

  data = san.get(
    ('topic_search/messages')
  , source      = SOCIAL_SOURCE_TYPES[args[0]]
  , search_text = args[1]
  , from_date   = start.isoformat()
  , to_date     = end.isoformat()
  , interval    = intervalISOFormat(interval)
  )

  return data['messages'].values