예제 #1
0
 def _create_node_container(cls) -> DockerContainer:
     container = DockerContainer(
         cls.IMAGE,
     )
     if cls.PORT:
         container.ports[8732] = cls.PORT
     return container
예제 #2
0
def test_docker_generic_db():
    mongo_container = DockerContainer(image_name="mongo",
                                      version="latest",
                                      container_name="mongodb")
    mongo_container.bind_ports(27017, 27017)

    with mongo_container:

        @wait_container_is_ready()
        def connect():
            return MongoClient("mongodb://0.0.0.0:27017")

        db = connect().primer
        result = db.restaurants.insert_one({
            "address": {
                "street": "2 Avenue",
                "zipcode": "10075",
                "building": "1480",
                "coord": [-73.9557413, 40.7720266]
            },
            "borough": "Manhattan",
            "cuisine": "Italian",
            "name": "Vella",
            "restaurant_id": "41704620"
        })
        print(result.inserted_id)
        cursor = db.restaurants.find({"borough": "Manhattan"})
        for document in cursor:
            print(document)
예제 #3
0
파일: file.py 프로젝트: qooba/feast
 def _setup_minio(self):
     self.minio = DockerContainer(self.minio_image)
     self.minio.with_exposed_ports(9000).with_exposed_ports(9001).with_env(
         "MINIO_ROOT_USER", self.access_key
     ).with_env("MINIO_ROOT_PASSWORD", self.secret).with_command(
         'server /data --console-address ":9001"'
     )
     self.minio.start()
     log_string_to_wait_for = (
         "API"  # The minio container will print "API: ..." when ready.
     )
     wait_for_logs(container=self.minio, predicate=log_string_to_wait_for, timeout=5)
예제 #4
0
 def _create_node_container(cls) -> DockerContainer:
     return DockerContainer(cls.IMAGE, )
예제 #5
0
class S3FileDataSourceCreator(DataSourceCreator):
    f: Any
    minio: DockerContainer
    bucket = "feast-test"
    access_key = "AKIAIOSFODNN7EXAMPLE"
    secret = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
    minio_image = "minio/minio:RELEASE.2021-08-17T20-53-08Z"

    def __init__(self, _: str):
        self._setup_minio()

    def _setup_minio(self):
        self.minio = DockerContainer(self.minio_image)
        self.minio.with_exposed_ports(9000).with_exposed_ports(9001).with_env(
            "MINIO_ROOT_USER", self.access_key).with_env(
                "MINIO_ROOT_PASSWORD", self.secret).with_command(
                    'server /data --console-address ":9001"')
        self.minio.start()
        log_string_to_wait_for = (
            "API"  # The minio container will print "API: ..." when ready.
        )
        wait_for_logs(container=self.minio,
                      predicate=log_string_to_wait_for,
                      timeout=5)

    def _upload_parquet_file(self, df, file_name, minio_endpoint):
        self.f = tempfile.NamedTemporaryFile(suffix=".parquet", delete=False)
        df.to_parquet(self.f.name)

        client = Minio(
            minio_endpoint,
            access_key=self.access_key,
            secret_key=self.secret,
            secure=False,
        )
        if not client.bucket_exists(self.bucket):
            client.make_bucket(self.bucket)
        client.fput_object(
            self.bucket,
            file_name,
            self.f.name,
        )

    def create_data_source(
        self,
        df: pd.DataFrame,
        destination_name: Optional[str] = None,
        suffix: Optional[str] = None,
        timestamp_field="ts",
        created_timestamp_column="created_ts",
        field_mapping: Dict[str, str] = None,
    ) -> DataSource:
        filename = f"{destination_name}.parquet"
        port = self.minio.get_exposed_port("9000")
        host = self.minio.get_container_host_ip()
        minio_endpoint = f"{host}:{port}"

        self._upload_parquet_file(df, filename, minio_endpoint)

        return FileSource(
            file_format=ParquetFormat(),
            path=f"s3://{self.bucket}/{filename}",
            timestamp_field=timestamp_field,
            created_timestamp_column=created_timestamp_column,
            field_mapping=field_mapping or {"ts_1": "ts"},
            s3_endpoint_override=f"http://{host}:{port}",
        )

    def create_saved_dataset_destination(self) -> SavedDatasetFileStorage:
        port = self.minio.get_exposed_port("9000")
        host = self.minio.get_container_host_ip()

        return SavedDatasetFileStorage(
            path=f"s3://{self.bucket}/persisted/{str(uuid.uuid4())}",
            file_format=ParquetFormat(),
            s3_endpoint_override=f"http://{host}:{port}",
        )

    def get_prefixed_table_name(self, suffix: str) -> str:
        return f"{suffix}"

    def create_offline_store_config(self) -> FeastConfigBaseModel:
        return FileOfflineStoreConfig()

    def teardown(self):
        self.minio.stop()
        self.f.close()
예제 #6
0
def test_container_port():
    cont = DockerContainer("selenium/hub", "latest", "selenium_hub")
    cont.start()

    assert cont.get_host_info(4444) > 0