Skip to content

Commit

Permalink
made changes
Browse files Browse the repository at this point in the history
Signed-off-by: Pratiksha Sankhe <[email protected]>
  • Loading branch information
psankhe28 committed Sep 20, 2024
1 parent 338af10 commit fee8228
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 31 deletions.
48 changes: 48 additions & 0 deletions cloud_storage_handler/api/elixircloud/csh/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
"""Constants."""

from pydantic import BaseModel

from cloud_storage_handler.api.elixircloud.csh.models import MinioConfig


class MinioConstants(BaseModel):
"""All the constants related to MinIO for CSH."""

hostname: str = "localhost"
port: int = 9000
access_key: str = "minioadmin"
secret_key: str = "minioadmin"
bucket_name: str = "files"

class Config:
"""Configuration for MinioConstants class."""

frozen = True


class CshConstants(BaseModel):
"""All the constants related to CSH and related services.
Attributes:
foca_config_path: Path to FOCA configuration for CSH.
minio_constants: Constants related to MinIO configuration.
"""

foca_config_path: str = "CSH_FOCA_CONFIG_PATH"
minio_constants: MinioConstants = MinioConstants()

class Config:
"""Configuration for CshConstants class."""

frozen = True

def get_minio_config(self) -> MinioConfig:
"""Return MinIO configuration as a Pydantic model."""
minio_config = self.minio_constants
return MinioConfig(
hostname=minio_config.hostname,
port=minio_config.port,
access_key=minio_config.access_key,
secret_key=minio_config.secret_key,
bucket_name=minio_config.bucket_name,
)
10 changes: 5 additions & 5 deletions cloud_storage_handler/api/elixircloud/csh/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ class MinioConfig(BaseModel):
"""Configuration for MinIO.
Attributes:
hostname (str): The hostname where the MinIO server is running.
hostname : The hostname where the MinIO server is running.
Defaults to 'localhost'.
port (int): The port on which the MinIO server is running.
port : The port on which the MinIO server is running.
Must be between 1 and 65535. Defaults to 9000.
access_key (str): The access key used for authentication with MinIO.
access_key : The access key used for authentication with MinIO.
Defaults to 'minioadmin'.
secret_key (str): The secret key used for authentication with MinIO.
secret_key : The secret key used for authentication with MinIO.
Defaults to 'minioadmin'.
bucket_name (str): The name of the bucket where files are stored.
bucket_name : The name of the bucket where files are stored.
Must be at least 1 character long. Defaults to 'files'.
Examples:
Expand Down
3 changes: 3 additions & 0 deletions cloud_storage_handler/clients/minio.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ def get_minio_client():
client = init_client.get_client()
init_client.create_bucket()
return client


minio_client = get_minio_client()
50 changes: 26 additions & 24 deletions cloud_storage_handler/clients/minio_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,22 @@
from foca import Foca
from minio import Minio

from cloud_storage_handler.api.elixircloud.csh.constants import CshConstants
from cloud_storage_handler.api.elixircloud.csh.models import MinioConfig
from cloud_storage_handler.exceptions import ConfigNotFoundError
from cloud_storage_handler.utils import get_config_path

logger = logging.getLogger(__name__)


class MinioConfig:
class MinioConfigurationData:
"""Handles the loading and parsing of MinIO configuration files."""

def __init__(self, config_file=None):
"""Initialize MinioConfig with a configuration file.
Args:
config_file (str): Path to the configuration file. If not provided,
config_file : Path to the configuration file. If not provided,
uses the default path.
"""
config_file = config_file or get_config_path()
Expand All @@ -28,62 +30,62 @@ def get_minio_config(self):
"""Retrieve the MinIO configuration.
Returns:
dict: A dictionary containing the MinIO configuration.
A dictionary containing the MinIO configuration.
"""
try:
return self.get_minio_from_config()
except ConfigNotFoundError:
return self.get_default_minio_config()

def get_default_minio_config(self):
def get_default_minio_config(self) -> MinioConfig:
"""Get the default minio configuration."""
logger.warning(
"Minio configuration not found in config. Using default configuration."
)
return {
"hostname": "localhost",
"port": 9000,
"access_key": "minioadmin",
"secret_key": "minioadmin",
"bucket_name": "files",
}

def get_minio_from_config(self):
csh_constants = CshConstants()
minio_config = csh_constants.get_minio_config()
return minio_config

def get_minio_from_config(self) -> MinioConfig:
"""Returns minio configuration from config."""
if not self.config.custom:
raise ConfigNotFoundError("Custom configuration not found.")

minio_config_data = self.config.custom.get("minio")
if not minio_config_data:
minio_config = self.config.custom.get("minio")
if not minio_config:
raise ConfigNotFoundError(
"MinIO configuration not found in custom configuration."
)

return minio_config_data
return MinioConfig(
hostname=minio_config["hostname"],
port=minio_config["port"],
access_key=minio_config["access_key"],
secret_key=minio_config["secret_key"],
bucket_name=minio_config["bucket_name"],
)


class MinioClient:
"""A class to manage MinIO client configuration and bucket creation."""

def __init__(self):
"""Initialize the MinIO client and create bucket if necessary."""
config = MinioConfig().get_minio_config()
config = MinioConfigurationData().get_minio_config()
print(config)
self.client = Minio(
endpoint=f"{config['hostname']}:{config['port']}",
access_key=config["access_key"],
secret_key=config["secret_key"],
endpoint=f"{config.hostname}:{config.port}",
access_key=config.access_key,
secret_key=config.secret_key,
secure=False,
)
self.bucket_name = config["bucket_name"]
self.bucket_name = config.bucket_name

# Create bucket if it doesn't exist
self.create_bucket()

def create_bucket(self):
"""Creation of bucket using the configured bucket name."""
if self.client is None:
raise RuntimeError("MinIO client is not initialized.")

if not self.client.bucket_exists(self.bucket_name):
self.client.make_bucket(self.bucket_name)
logger.info(f"Bucket '{self.bucket_name}' created.")
Expand Down
4 changes: 2 additions & 2 deletions cloud_storage_handler/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from connexion import FlaskApp
from foca import Foca

from cloud_storage_handler.clients.minio import get_minio_client
from cloud_storage_handler.clients.minio import minio_client

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -49,7 +49,7 @@ def init_app() -> FlaskApp:
def main() -> None:
"""Run FOCA application."""
app = init_app()
get_minio_client()
_ = minio_client
app.run(port=app.port)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ cloud\_storage\_handler.api.elixircloud.csh package
Submodules
----------

cloud\_storage\_handler.api.elixircloud.csh.constants module
------------------------------------------------------------

.. automodule:: cloud_storage_handler.api.elixircloud.csh.constants
:members:
:undoc-members:
:show-inheritance:

cloud\_storage\_handler.api.elixircloud.csh.controllers module
--------------------------------------------------------------

Expand Down

0 comments on commit fee8228

Please sign in to comment.