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" )
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)
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
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
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)
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)
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)
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
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
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
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))
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
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
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
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]])
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
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
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
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])
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
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
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
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
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'])
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
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] ]
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
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'])
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