123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- from distutils.version import LooseVersion
- import os
- import pytest
- import pandas.util.testing as tm
- from pandas.io.parsers import read_csv
- @pytest.fixture
- def tips_file(datapath):
- """Path to the tips dataset"""
- return datapath('io', 'parser', 'data', 'tips.csv')
- @pytest.fixture
- def jsonl_file(datapath):
- """Path a JSONL dataset"""
- return datapath('io', 'parser', 'data', 'items.jsonl')
- @pytest.fixture
- def salaries_table(datapath):
- """DataFrame with the salaries dataset"""
- return read_csv(datapath('io', 'parser', 'data', 'salaries.csv'), sep='\t')
- @pytest.fixture
- def s3_resource(tips_file, jsonl_file):
- """Fixture for mocking S3 interaction.
- The primary bucket name is "pandas-test". The following datasets
- are loaded.
- - tips.csv
- - tips.csv.gz
- - tips.csv.bz2
- - items.jsonl
- A private bucket "cant_get_it" is also created. The boto3 s3 resource
- is yielded by the fixture.
- """
- pytest.importorskip('s3fs')
- boto3 = pytest.importorskip('boto3')
- botocore = pytest.importorskip('botocore')
- if LooseVersion(botocore.__version__) < LooseVersion("1.11.0"):
- # botocore leaks an uncatchable ResourceWarning before 1.11.0;
- # see GH 23731 and https://github.com/boto/botocore/issues/1464
- pytest.skip("botocore is leaking resources before 1.11.0")
- with tm.ensure_safe_environment_variables():
- # temporary workaround as moto fails for botocore >= 1.11 otherwise,
- # see https://github.com/spulec/moto/issues/1924 & 1952
- os.environ.setdefault("AWS_ACCESS_KEY_ID", "foobar_key")
- os.environ.setdefault("AWS_SECRET_ACCESS_KEY", "foobar_secret")
- moto = pytest.importorskip('moto')
- test_s3_files = [
- ('tips.csv', tips_file),
- ('tips.csv.gz', tips_file + '.gz'),
- ('tips.csv.bz2', tips_file + '.bz2'),
- ('items.jsonl', jsonl_file),
- ]
- def add_tips_files(bucket_name):
- for s3_key, file_name in test_s3_files:
- with open(file_name, 'rb') as f:
- conn.Bucket(bucket_name).put_object(
- Key=s3_key,
- Body=f)
- try:
- s3 = moto.mock_s3()
- s3.start()
- # see gh-16135
- bucket = 'pandas-test'
- conn = boto3.resource("s3", region_name="us-east-1")
- conn.create_bucket(Bucket=bucket)
- add_tips_files(bucket)
- conn.create_bucket(Bucket='cant_get_it', ACL='private')
- add_tips_files('cant_get_it')
- yield conn
- finally:
- s3.stop()
|