ironing out things: wip
This commit is contained in:
parent
7ef85cff24
commit
95eabd62f6
|
|
@ -12,12 +12,24 @@ import subprocess
|
||||||
import yaml
|
import yaml
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
|
DEBUG = bool(os.environ.get("DEBUG", False))
|
||||||
|
|
||||||
GITLAB_REMOTE_NAME = os.environ.get("GITLAB_REMOTE_NAME", "gitlab")
|
GITLAB_REMOTE_NAME = os.environ.get("GITLAB_REMOTE_NAME", "origin")
|
||||||
GITLAB_TOKEN = os.environ.get("GITLAB_TOKEN", None)
|
GITLAB_TOKEN = os.environ.get("GITLAB_TOKEN", None)
|
||||||
GITLAB_BOT_USERNAME = os.environ.get("GITLAB_BOT_USERNAME", None)
|
GITLAB_BOT_USERNAME = os.environ.get("GITLAB_BOT_USERNAME", None)
|
||||||
|
|
||||||
|
|
||||||
|
S3_REMOTE_DEFAULT_PARAMETERS = [
|
||||||
|
"type=S3",
|
||||||
|
"encryption=none",
|
||||||
|
"autoenable=true",
|
||||||
|
"port=443",
|
||||||
|
"protocol=https",
|
||||||
|
"chunk=1GiB",
|
||||||
|
"requeststyle=path",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
# TODO: rewrite for pathlib.Path input
|
# TODO: rewrite for pathlib.Path input
|
||||||
def sort_series(path: pathlib.Path) -> None:
|
def sort_series(path: pathlib.Path) -> None:
|
||||||
"""Sort series in separate folder
|
"""Sort series in separate folder
|
||||||
|
|
@ -139,7 +151,7 @@ def index_dicoms(
|
||||||
) -> dlad.Dataset:
|
) -> dlad.Dataset:
|
||||||
"""Process incoming dicoms into datalad repo"""
|
"""Process incoming dicoms into datalad repo"""
|
||||||
|
|
||||||
with tempfile.TemporaryDirectory() as tmpdirname:
|
with tempfile.TemporaryDirectory(delete=not DEBUG) as tmpdirname:
|
||||||
dicom_session_ds = dlad.create(tmpdirname, fake_dates=fake_dates)
|
dicom_session_ds = dlad.create(tmpdirname, fake_dates=fake_dates)
|
||||||
|
|
||||||
if not input.scheme or input.scheme == "file":
|
if not input.scheme or input.scheme == "file":
|
||||||
|
|
@ -183,6 +195,24 @@ def export_data(
|
||||||
export_to_s3(dicom_session_ds, output_remote, session_metas)
|
export_to_s3(dicom_session_ds, output_remote, session_metas)
|
||||||
|
|
||||||
|
|
||||||
|
def set_bot_privileges(gitlab_conn: gitlab.Gitlab, gitlab_group_path: str) -> None:
|
||||||
|
# add maint permissions for the dicom bot user on the study repos
|
||||||
|
study_group = get_or_create_gitlab_group(gitlab_conn, gitlab_group_path)
|
||||||
|
bot_user = gitlab_conn.users.list(username=GITLAB_BOT_USERNAME)
|
||||||
|
if not bot_user:
|
||||||
|
raise RuntimeError(
|
||||||
|
f"bot_user: {GITLAB_BOT_USERNAME} does not exists in gitlab instance"
|
||||||
|
)
|
||||||
|
bot_user = bot_user[0]
|
||||||
|
if not any(m.id == bot_user.id for m in study_group.members.list()):
|
||||||
|
study_group.members.create(
|
||||||
|
{
|
||||||
|
"user_id": bot_user.id,
|
||||||
|
"access_level": gitlab.const.AccessLevel.MAINTAINER,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def setup_gitlab_repos(
|
def setup_gitlab_repos(
|
||||||
dicom_session_ds: dlad.Dataset,
|
dicom_session_ds: dlad.Dataset,
|
||||||
gitlab_url: urllib.parse.ParseResult,
|
gitlab_url: urllib.parse.ParseResult,
|
||||||
|
|
@ -207,31 +237,32 @@ def setup_gitlab_repos(
|
||||||
name=GITLAB_REMOTE_NAME,
|
name=GITLAB_REMOTE_NAME,
|
||||||
url=dicom_session_repo._attrs["ssh_url_to_repo"],
|
url=dicom_session_repo._attrs["ssh_url_to_repo"],
|
||||||
)
|
)
|
||||||
# and push
|
"""
|
||||||
dicom_session_ds.push(to=GITLAB_REMOTE_NAME)
|
# prevent warnings
|
||||||
|
dicom_session_ds.config.add(
|
||||||
|
f"remote.{GITLAB_REMOTE_NAME}.annex-ignore",
|
||||||
|
value='false',
|
||||||
|
scope='local'
|
||||||
|
)"""
|
||||||
|
|
||||||
# add maint permissions for the dicom bot user on the study repos
|
set_bot_privileges(gitlab_conn, gitlab_group_path)
|
||||||
study_group = get_or_create_gitlab_group(gitlab_conn, gitlab_group_path)
|
# and push
|
||||||
bot_user = gitlab_conn.users.list(username=GITLAB_BOT_USERNAME).get(0, None)
|
dicom_session_ds.push(to=GITLAB_REMOTE_NAME, force='gitpush')
|
||||||
if not bot_user:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"bot_user: {GITLAB_BOT_USERNAME} does not exists in gitlab instance"
|
|
||||||
)
|
|
||||||
if not any(m.id == bot_user.id for m in study_group.members.list()):
|
|
||||||
study_group.members.create(
|
|
||||||
{
|
|
||||||
"user_id": bot_user.id,
|
|
||||||
"access_level": gitlab.const.AccessLevel.MAINTAINER,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
## add the session to the dicom study repo
|
## add the session to the dicom study repo
|
||||||
dicom_study_repo = get_or_create_gitlab_project(gitlab_conn, dicom_study_path)
|
dicom_study_repo = get_or_create_gitlab_project(gitlab_conn, dicom_study_path)
|
||||||
with tempfile.TemporaryDirectory() as tmpdir:
|
with tempfile.TemporaryDirectory(delete=not DEBUG) as tmpdir:
|
||||||
dicom_study_ds = dlad.install(
|
dicom_study_ds = dlad.install(
|
||||||
source=dicom_study_repo._attrs["ssh_url_to_repo"],
|
source=dicom_study_repo._attrs["ssh_url_to_repo"],
|
||||||
path=tmpdir,
|
path=tmpdir,
|
||||||
)
|
)
|
||||||
|
"""
|
||||||
|
# prevent warnings when pushing
|
||||||
|
dicom_study_ds.config.add(
|
||||||
|
f"remote.origin.annex-ignore",
|
||||||
|
value='false',
|
||||||
|
scope='local'
|
||||||
|
)"""
|
||||||
|
|
||||||
if dicom_study_ds.repo.get_hexsha() is None or dicom_study_ds.id is None:
|
if dicom_study_ds.repo.get_hexsha() is None or dicom_study_ds.id is None:
|
||||||
dicom_study_ds.create(force=True)
|
dicom_study_ds.create(force=True)
|
||||||
|
|
@ -250,7 +281,7 @@ def setup_gitlab_repos(
|
||||||
)
|
)
|
||||||
|
|
||||||
# Push to gitlab
|
# Push to gitlab
|
||||||
dicom_study_ds.push(to="origin", force="gitpush")
|
dicom_study_ds.push(to="origin")
|
||||||
|
|
||||||
|
|
||||||
def init_bids(
|
def init_bids(
|
||||||
|
|
@ -398,16 +429,10 @@ def export_to_s3(
|
||||||
bucket_name, path = pathlib.Path(s3_url.path).parts
|
bucket_name, path = pathlib.Path(s3_url.path).parts
|
||||||
ds.repo.initremote(
|
ds.repo.initremote(
|
||||||
remote_name,
|
remote_name,
|
||||||
[
|
S3_REMOTE_DEFAULT_PARAMETERS
|
||||||
"type=S3",
|
+ [
|
||||||
"encryption=none",
|
|
||||||
"autoenable=true",
|
|
||||||
f"host={s3_url.hostname}",
|
f"host={s3_url.hostname}",
|
||||||
"port=443",
|
|
||||||
"protocol=https",
|
|
||||||
"chunk=1GiB",
|
|
||||||
f"bucket={bucket_name}",
|
f"bucket={bucket_name}",
|
||||||
"requeststyle=path",
|
|
||||||
f"fileprefix={'/'.join(path)}",
|
f"fileprefix={'/'.join(path)}",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue