chezou / tdworkflow

Unofficial Treasure Workflow Client
Apache License 2.0
7 stars 5 forks source link

create_projectの絶対PathにおいてErrorが発生する #19

Closed kenbkubota closed 1 year ago

kenbkubota commented 1 year ago

発生したこと

create_projectの絶対PathにおいてErrorが発生する。

target_dir=r"C:\Users\user_name\projects\treasuredata-wf\test_hogehoge",

のような形であげる場合、APIとしては200になるが、相対パスに変換されておらず、Workflow側が認識されない。

原因

tdworkflow.utils.py 内のutils.pyにおいて、正規表現マッチで実施がされており、Windows系などで動作しない

解決策(案)

utils.py を以下の通り変更する

import io
import logging
import os
import re
import tarfile
from datetime import datetime, timedelta, timezone
from typing import List, Optional
from pathlib import Path

...

def archive_files(target_dir: str, exclude_patterns: List[str]) -> io.BytesIO:
    _partial = r")|(".join(exclude_patterns)
    pattern = rf"({_partial})"

    target_dir_path = Path(target_dir)
    _bytes = io.BytesIO()
    with tarfile.open(mode="w:gz", fileobj=_bytes) as tar:
        for current_dir, _, files_list in os.walk(target_dir_path):
            for file in files_list:
                file_path = Path(os.path.join(current_dir, file))
                if re.search(pattern, str(file_path)):
                    continue
                relative_path = file_path.relative_to(target_dir_path)
                logger.info(f"Added {file_path} as {relative_path}")
                tar.add(file_path, relative_path, recursive=False)
    _bytes.seek(0)
    return _bytes

...
chezou commented 1 year ago

Thanks for raising the issue. Yeah, tdworkflow doesn't support Windows yet. Let me approach the issue.

chezou commented 1 year ago

Released 0.8.0rc0. https://pypi.org/project/tdworkflow/0.8.0rc0/ Please have a look and let me know if it works fine.