fred-oss 0.54.0__tar.gz → 0.55.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fred_oss-0.55.0/MANIFEST.in +3 -0
- {fred_oss-0.54.0/src/main/fred_oss.egg-info → fred_oss-0.55.0}/PKG-INFO +1 -1
- {fred_oss-0.54.0 → fred_oss-0.55.0}/setup.py +2 -0
- fred_oss-0.55.0/src/main/fred/dao/service/_minio/__init__.py +1 -0
- fred_oss-0.55.0/src/main/fred/dao/service/_minio/policy/builder.py +16 -0
- fred_oss-0.55.0/src/main/fred/dao/service/_minio/policy/catalog.py +28 -0
- fred_oss-0.55.0/src/main/fred/dao/service/_minio/policy/loader.py +27 -0
- fred_oss-0.55.0/src/main/fred/dao/service/_minio/policy/templates/public_ro.json +24 -0
- fred_oss-0.55.0/src/main/fred/dao/service/_minio/policy/templates/public_rw.json +31 -0
- fred_oss-0.55.0/src/main/fred/dao/service/_minio/pool.py +55 -0
- fred_oss-0.54.0/src/main/fred/dao/service/_minio.py → fred_oss-0.55.0/src/main/fred/dao/service/_minio/service.py +13 -52
- fred_oss-0.55.0/src/main/fred/integrations/databricks/runtimes/16.4LTS.json +10 -0
- fred_oss-0.55.0/src/main/fred/version +1 -0
- fred_oss-0.55.0/src/main/fred/worker/runner/rest/routers/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0/src/main/fred_oss.egg-info}/PKG-INFO +1 -1
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred_oss.egg-info/SOURCES.txt +10 -1
- fred_oss-0.54.0/MANIFEST.in +0 -2
- fred_oss-0.54.0/src/main/fred/version +0 -1
- {fred_oss-0.54.0 → fred_oss-0.55.0}/NOTICE.txt +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/README.md +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/requirements.txt +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/setup.cfg +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/cli/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/cli/__main__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/cli/interface.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/cli/main.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/comp/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/comp/_keyval.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/comp/_pubsub.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/comp/_queue.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/comp/catalog.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/comp/interface.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/service/__init__.py +0 -0
- {fred_oss-0.54.0/src/main/fred/future/callback → fred_oss-0.55.0/src/main/fred/dao/service/_minio/policy}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/service/_redis.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/service/_stdlib.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/service/catalog.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/service/interface.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/dao/service/utils.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/future/__init__.py +0 -0
- {fred_oss-0.54.0/src/main/fred/integrations/databricks/runtimes → fred_oss-0.55.0/src/main/fred/future/callback}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/future/callback/_function.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/future/callback/catalog.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/future/callback/interface.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/future/impl.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/future/result.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/future/settings.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/future/utils.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/databricks/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/databricks/cli_ext.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/databricks/runtime.py +0 -0
- {fred_oss-0.54.0/src/main/fred/integrations/databricks/wrappers → fred_oss-0.55.0/src/main/fred/integrations/databricks/runtimes}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/databricks/runtimes/scanner.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/databricks/runtimes/sync.py +0 -0
- {fred_oss-0.54.0/src/main/fred/utils → fred_oss-0.55.0/src/main/fred/integrations/databricks/wrappers}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/databricks/wrappers/dbutils.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/runpod/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/runpod/cli_ext.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/runpod/helper.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/maturity.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/monad/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/monad/_either.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/monad/catalog.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/monad/interface.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/settings.py +0 -0
- {fred_oss-0.54.0/src/main/fred/utils/imout → fred_oss-0.55.0/src/main/fred/utils}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/dateops.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/imops.py +0 -0
- {fred_oss-0.54.0/src/main/fred/worker/runner/model → fred_oss-0.55.0/src/main/fred/utils/imout}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/imout/_filesystem.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/imout/_minio.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/imout/_string.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/imout/catalog.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/imout/interface.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/mlops/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/mlops/auto.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/utils/runtime.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/version.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/interface.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/backend.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/client.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/handler.py +0 -0
- {fred_oss-0.54.0/src/main/fred/worker/runner/plugins → fred_oss-0.55.0/src/main/fred/worker/runner/model}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/model/_handler.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/model/_item.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/model/_request.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/model/_runner_spec.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/model/catalog.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/model/interface.py +0 -0
- {fred_oss-0.54.0/src/main/fred/worker/runner/rest → fred_oss-0.55.0/src/main/fred/worker/runner/plugins}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/plugins/_local.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/plugins/_runpod.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/plugins/catalog.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/plugins/interface.py +0 -0
- {fred_oss-0.54.0/src/main/fred/worker/runner/rest/routers → fred_oss-0.55.0/src/main/fred/worker/runner/rest}/__init__.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/rest/auth.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/rest/cli_ext.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/rest/routers/_runner.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/rest/routers/catalog.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/rest/routers/interface.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/rest/server.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/rest/settings.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/settings.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/signal.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/status.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/runner/utils.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/worker/settings.py +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred_oss.egg-info/dependency_links.txt +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred_oss.egg-info/entry_points.txt +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred_oss.egg-info/requires.txt +0 -0
- {fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred_oss.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .service import MinioService
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class MinioPolicyBuilderActionBucket(enum.StrEnum):
|
|
5
|
+
ALL = "s3:*"
|
|
6
|
+
LIST = "s3:ListBucket"
|
|
7
|
+
LOCATION = "s3:GetBucketLocation"
|
|
8
|
+
DELETE = "s3:DeleteBucket"
|
|
9
|
+
CREATE = "s3:CreateBucket"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class MinioPolicyBuilderActionObject(enum.StrEnum):
|
|
13
|
+
GET = "s3:GetObject"
|
|
14
|
+
PUT = "s3:PutObject"
|
|
15
|
+
DELETE = "s3:DeleteObject"
|
|
16
|
+
ALL = "s3:*"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import enum
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from fred.dao.service._minio.policy.loader import MinioPolicyLoader
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class MinioPolicyCatalog(enum.Enum):
|
|
8
|
+
BUCKET_PUBLIC_RO = MinioPolicyLoader(
|
|
9
|
+
title="[Bucket Policy] Public Read-Only",
|
|
10
|
+
filename="public_ro.json",
|
|
11
|
+
requires=[
|
|
12
|
+
"bucket_name",
|
|
13
|
+
],
|
|
14
|
+
)
|
|
15
|
+
BUCKET_PUBLIC_RW = MinioPolicyLoader(
|
|
16
|
+
title="[Bucket Policy] Public Read-Write",
|
|
17
|
+
filename="public_rw.json",
|
|
18
|
+
requires=[
|
|
19
|
+
"bucket_name",
|
|
20
|
+
],
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
def load(self, path: Optional[str] = None, **params) -> dict:
|
|
24
|
+
return self.value.load(path=path, **params)
|
|
25
|
+
|
|
26
|
+
def content(self, path: Optional[str] = None, **params) -> str:
|
|
27
|
+
import json
|
|
28
|
+
return json.dumps(self.load(path=path, **params))
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from typing import Optional
|
|
5
|
+
def load_policy(filename: str, path: Optional[str] = None, **kwargs) -> dict:
|
|
6
|
+
path = path or os.path.join(os.path.dirname(__file__), "templates")
|
|
7
|
+
filepath = os.path.join(path, filename)
|
|
8
|
+
# Read the policy file as a string
|
|
9
|
+
with open(filepath, "r", encoding="utf-8") as file:
|
|
10
|
+
policy_str = file.read()
|
|
11
|
+
# Replace placeholders in the policy with actual values from kwargs
|
|
12
|
+
for param_key, param_val in kwargs.items():
|
|
13
|
+
param_ref = "${{param_key}}".replace("param_key", param_key)
|
|
14
|
+
policy_str = policy_str.replace(param_ref, param_val)
|
|
15
|
+
return json.loads(policy_str)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass(frozen=True, slots=True)
|
|
19
|
+
class MinioPolicyLoader:
|
|
20
|
+
title: str
|
|
21
|
+
filename: str
|
|
22
|
+
requires: list[str] = field(default_factory=list)
|
|
23
|
+
|
|
24
|
+
def load(self, path: Optional[str] = None, **kwargs) -> dict:
|
|
25
|
+
if (missing := set(self.requires) - set(kwargs.keys())):
|
|
26
|
+
raise ValueError(f"Missing required parameters for policy '{self.filename}': {missing}")
|
|
27
|
+
return load_policy(filename=self.filename, path=path, **kwargs)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Version": "2012-10-17",
|
|
3
|
+
"Statement": [
|
|
4
|
+
{
|
|
5
|
+
"Effect": "Allow",
|
|
6
|
+
"Principal": {
|
|
7
|
+
"AWS": "*"
|
|
8
|
+
},
|
|
9
|
+
"Action": [
|
|
10
|
+
"s3:GetBucketLocation",
|
|
11
|
+
"s3:ListBucket"
|
|
12
|
+
],
|
|
13
|
+
"Resource": "arn:aws:s3:::${{bucket_name}}"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"Effect": "Allow",
|
|
17
|
+
"Principal": {
|
|
18
|
+
"AWS": "*"
|
|
19
|
+
},
|
|
20
|
+
"Action": "s3:GetObject",
|
|
21
|
+
"Resource": "arn:aws:s3:::${{bucket_name}}/*"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Version": "2012-10-17",
|
|
3
|
+
"Statement": [
|
|
4
|
+
{
|
|
5
|
+
"Effect": "Allow",
|
|
6
|
+
"Principal": {
|
|
7
|
+
"AWS": "*"
|
|
8
|
+
},
|
|
9
|
+
"Action": [
|
|
10
|
+
"s3:GetBucketLocation",
|
|
11
|
+
"s3:ListBucket",
|
|
12
|
+
"s3:ListBucketMultipartUploads"
|
|
13
|
+
],
|
|
14
|
+
"Resource": "arn:aws:s3:::${{bucket_name}}"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"Effect": "Allow",
|
|
18
|
+
"Principal": {
|
|
19
|
+
"AWS": "*"
|
|
20
|
+
},
|
|
21
|
+
"Action": [
|
|
22
|
+
"s3:GetObject",
|
|
23
|
+
"s3:PutObject",
|
|
24
|
+
"s3:DeleteObject",
|
|
25
|
+
"s3:ListMultipartUploadParts",
|
|
26
|
+
"s3:AbortMultipartUpload"
|
|
27
|
+
],
|
|
28
|
+
"Resource": "arn:aws:s3:::${{bucket_name}}/*"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from urllib3 import PoolManager, Retry
|
|
2
|
+
from urllib3.util import Timeout
|
|
3
|
+
|
|
4
|
+
from fred.settings import get_environ_variable, logger_manager
|
|
5
|
+
from fred.dao.service.interface import ServiceConnectionPoolInterface
|
|
6
|
+
|
|
7
|
+
logger = logger_manager.get_logger(name=__name__)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MinioConnectionPool(ServiceConnectionPoolInterface[PoolManager]):
|
|
11
|
+
|
|
12
|
+
@classmethod
|
|
13
|
+
def _create_pool(cls, disable_cert: bool = False, **kwargs) -> PoolManager:
|
|
14
|
+
"""Create a urllib3 PoolManager with the given configurations.
|
|
15
|
+
|
|
16
|
+
TODO: Consider using the inverse of 'require_cert' as the default to ensure we do have cert-check automatically.
|
|
17
|
+
For now, we keep it as is to avoid breaking changes.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
require_cert (bool): Whether to require SSL certificate verification.
|
|
21
|
+
**kwargs: Additional keyword arguments to pass to the PoolManager constructor.
|
|
22
|
+
Returns:
|
|
23
|
+
PoolManager: A configured PoolManager instance.
|
|
24
|
+
"""
|
|
25
|
+
num_pools = kwargs.pop("num_pools", 10)
|
|
26
|
+
maxsize = kwargs.pop("maxsize", 10)
|
|
27
|
+
# Default timeout of 5 minutes
|
|
28
|
+
timeout_seconds = kwargs.pop("timeout", 300)
|
|
29
|
+
timeout = Timeout(
|
|
30
|
+
connect=timeout_seconds,
|
|
31
|
+
read=timeout_seconds,
|
|
32
|
+
)
|
|
33
|
+
# Default retries of 5 with exponential backoff
|
|
34
|
+
retry = Retry(
|
|
35
|
+
total=kwargs.pop("retries", 5),
|
|
36
|
+
backoff_factor=kwargs.pop("backoff_factor", 0.25),
|
|
37
|
+
status_forcelist=[500, 502, 503, 504],
|
|
38
|
+
)
|
|
39
|
+
# Configure certificate requirements for SSL connections
|
|
40
|
+
cert_reqs = "CERT_NONE"
|
|
41
|
+
ca_certs = None
|
|
42
|
+
if not disable_cert:
|
|
43
|
+
import certifi
|
|
44
|
+
cert_reqs = "CERT_REQUIRED"
|
|
45
|
+
ca_certs = get_environ_variable("SSL_CERT_FILE") or certifi.where()
|
|
46
|
+
# Finally, create and return the PoolManager instance
|
|
47
|
+
return PoolManager(
|
|
48
|
+
num_pools=num_pools,
|
|
49
|
+
maxsize=maxsize,
|
|
50
|
+
timeout=timeout,
|
|
51
|
+
retries=retry,
|
|
52
|
+
cert_reqs=cert_reqs,
|
|
53
|
+
ca_certs=ca_certs,
|
|
54
|
+
**kwargs
|
|
55
|
+
)
|
|
@@ -1,62 +1,14 @@
|
|
|
1
1
|
from minio import Minio
|
|
2
|
-
from urllib3 import PoolManager, Retry
|
|
3
|
-
from urllib3.util import Timeout
|
|
4
2
|
|
|
5
|
-
from fred.settings import
|
|
3
|
+
from fred.settings import logger_manager
|
|
4
|
+
from fred.dao.service.interface import ServiceInterface
|
|
6
5
|
from fred.dao.service.utils import get_minio_from_payload
|
|
7
|
-
from fred.dao.service.
|
|
6
|
+
from fred.dao.service._minio.pool import MinioConnectionPool
|
|
7
|
+
from fred.dao.service._minio.policy.catalog import MinioPolicyCatalog
|
|
8
8
|
|
|
9
9
|
logger = logger_manager.get_logger(name=__name__)
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class MinioConnectionPool(ServiceConnectionPoolInterface[PoolManager]):
|
|
13
|
-
|
|
14
|
-
@classmethod
|
|
15
|
-
def _create_pool(cls, disable_cert: bool = False, **kwargs) -> PoolManager:
|
|
16
|
-
"""Create a urllib3 PoolManager with the given configurations.
|
|
17
|
-
|
|
18
|
-
TODO: Consider using the inverse of 'require_cert' as the default to ensure we do have cert-check automatically.
|
|
19
|
-
For now, we keep it as is to avoid breaking changes.
|
|
20
|
-
|
|
21
|
-
Args:
|
|
22
|
-
require_cert (bool): Whether to require SSL certificate verification.
|
|
23
|
-
**kwargs: Additional keyword arguments to pass to the PoolManager constructor.
|
|
24
|
-
Returns:
|
|
25
|
-
PoolManager: A configured PoolManager instance.
|
|
26
|
-
"""
|
|
27
|
-
num_pools = kwargs.pop("num_pools", 10)
|
|
28
|
-
maxsize = kwargs.pop("maxsize", 10)
|
|
29
|
-
# Default timeout of 5 minutes
|
|
30
|
-
timeout_seconds = kwargs.pop("timeout", 300)
|
|
31
|
-
timeout = Timeout(
|
|
32
|
-
connect=timeout_seconds,
|
|
33
|
-
read=timeout_seconds,
|
|
34
|
-
)
|
|
35
|
-
# Default retries of 5 with exponential backoff
|
|
36
|
-
retry = Retry(
|
|
37
|
-
total=kwargs.pop("retries", 5),
|
|
38
|
-
backoff_factor=kwargs.pop("backoff_factor", 0.25),
|
|
39
|
-
status_forcelist=[500, 502, 503, 504],
|
|
40
|
-
)
|
|
41
|
-
# Configure certificate requirements for SSL connections
|
|
42
|
-
cert_reqs = "CERT_NONE"
|
|
43
|
-
ca_certs = None
|
|
44
|
-
if not disable_cert:
|
|
45
|
-
import certifi
|
|
46
|
-
cert_reqs = "CERT_REQUIRED"
|
|
47
|
-
ca_certs = get_environ_variable("SSL_CERT_FILE") or certifi.where()
|
|
48
|
-
# Finally, create and return the PoolManager instance
|
|
49
|
-
return PoolManager(
|
|
50
|
-
num_pools=num_pools,
|
|
51
|
-
maxsize=maxsize,
|
|
52
|
-
timeout=timeout,
|
|
53
|
-
retries=retry,
|
|
54
|
-
cert_reqs=cert_reqs,
|
|
55
|
-
ca_certs=ca_certs,
|
|
56
|
-
**kwargs
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
|
|
60
12
|
class MinioService(ServiceInterface[Minio]):
|
|
61
13
|
instance: Minio
|
|
62
14
|
metadata: dict = {}
|
|
@@ -120,3 +72,12 @@ class MinioService(ServiceInterface[Minio]):
|
|
|
120
72
|
except S3Error:
|
|
121
73
|
logger.debug(f"Object {object_name} in bucket {bucket_name} does not exist.")
|
|
122
74
|
return False
|
|
75
|
+
|
|
76
|
+
def make_bucket_public(self, bucket_name: str, readonly: bool = False):
|
|
77
|
+
"""Make a bucket public with either read-only or read-write access."""
|
|
78
|
+
policy = MinioPolicyCatalog.BUCKET_PUBLIC_RO \
|
|
79
|
+
if readonly else MinioPolicyCatalog.BUCKET_PUBLIC_RW
|
|
80
|
+
self.client.set_bucket_policy(
|
|
81
|
+
bucket_name=bucket_name,
|
|
82
|
+
policy=policy.content(bucket_name=bucket_name)
|
|
83
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.55.0
|
|
File without changes
|
|
@@ -19,12 +19,20 @@ src/main/fred/dao/comp/_queue.py
|
|
|
19
19
|
src/main/fred/dao/comp/catalog.py
|
|
20
20
|
src/main/fred/dao/comp/interface.py
|
|
21
21
|
src/main/fred/dao/service/__init__.py
|
|
22
|
-
src/main/fred/dao/service/_minio.py
|
|
23
22
|
src/main/fred/dao/service/_redis.py
|
|
24
23
|
src/main/fred/dao/service/_stdlib.py
|
|
25
24
|
src/main/fred/dao/service/catalog.py
|
|
26
25
|
src/main/fred/dao/service/interface.py
|
|
27
26
|
src/main/fred/dao/service/utils.py
|
|
27
|
+
src/main/fred/dao/service/_minio/__init__.py
|
|
28
|
+
src/main/fred/dao/service/_minio/pool.py
|
|
29
|
+
src/main/fred/dao/service/_minio/service.py
|
|
30
|
+
src/main/fred/dao/service/_minio/policy/__init__.py
|
|
31
|
+
src/main/fred/dao/service/_minio/policy/builder.py
|
|
32
|
+
src/main/fred/dao/service/_minio/policy/catalog.py
|
|
33
|
+
src/main/fred/dao/service/_minio/policy/loader.py
|
|
34
|
+
src/main/fred/dao/service/_minio/policy/templates/public_ro.json
|
|
35
|
+
src/main/fred/dao/service/_minio/policy/templates/public_rw.json
|
|
28
36
|
src/main/fred/future/__init__.py
|
|
29
37
|
src/main/fred/future/impl.py
|
|
30
38
|
src/main/fred/future/result.py
|
|
@@ -37,6 +45,7 @@ src/main/fred/future/callback/interface.py
|
|
|
37
45
|
src/main/fred/integrations/databricks/__init__.py
|
|
38
46
|
src/main/fred/integrations/databricks/cli_ext.py
|
|
39
47
|
src/main/fred/integrations/databricks/runtime.py
|
|
48
|
+
src/main/fred/integrations/databricks/runtimes/16.4LTS.json
|
|
40
49
|
src/main/fred/integrations/databricks/runtimes/__init__.py
|
|
41
50
|
src/main/fred/integrations/databricks/runtimes/scanner.py
|
|
42
51
|
src/main/fred/integrations/databricks/runtimes/sync.py
|
fred_oss-0.54.0/MANIFEST.in
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.54.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/databricks/runtimes/scanner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fred_oss-0.54.0 → fred_oss-0.55.0}/src/main/fred/integrations/databricks/wrappers/dbutils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fred_oss-0.54.0/src/main/fred/utils/imout → fred_oss-0.55.0/src/main/fred/utils}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|