File size: 6,103 Bytes
e729f97
 
 
 
 
 
 
 
 
806953a
e729f97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b8abf64
 
 
 
 
 
 
 
 
 
 
 
 
 
e729f97
 
b8abf64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e729f97
b8abf64
e729f97
b8abf64
e729f97
b8abf64
e729f97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d06861
 
 
 
 
 
 
 
 
7d58ebe
9d06861
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a05f4a6
9d06861
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import os, json, re
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
from google.oauth2 import service_account
import base64
from PIL import Image
from PIL import Image
from io import BytesIO

# from vouchervision.general_utils import get_cfg_from_full_path


def setup_streamlit_config(dir_home):
    # Define the directory path and filename
    dir_path = os.path.join(dir_home, ".streamlit")
    file_path = os.path.join(dir_path, "config.toml")

    # Check if directory exists, if not create it
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)
    
    # Create or modify the file with the provided content
    config_content = f"""
    [theme]
    base = "dark"
    primaryColor = "#00ff00"

    [server]
    enableStaticServing = false
    runOnSave = true
    port = 8524
    maxUploadSize = 5000
    """

    with open(file_path, "w") as f:
        f.write(config_content.strip())



def save_uploaded_file(directory, img_file, image=None):
    if not os.path.exists(directory):
        os.makedirs(directory)
    # Assuming the uploaded file is an image
    if image is None:
        try:
            with Image.open(img_file) as image:
                full_path = os.path.join(directory, img_file.name)
                image.save(full_path, "JPEG")
            # Return the full path of the saved image
            return full_path
        except:
            with Image.open(os.path.join(directory,img_file)) as image:
                full_path = os.path.join(directory, img_file)
                image.save(full_path, "JPEG")
            # Return the full path of the saved image
            return full_path
    else:
        try:
            full_path = os.path.join(directory, img_file.name)
            image.save(full_path, "JPEG")
            return full_path
        except:
            full_path = os.path.join(directory, img_file)
            image.save(full_path, "JPEG")
            return full_path
    
def save_uploaded_local(directory, img_file, image=None):
    name = img_file.split(os.path.sep)[-1]
    if not os.path.exists(directory):
        os.makedirs(directory)
    
    # Assuming the uploaded file is an image
    if image is None:
        with Image.open(img_file) as image:
            full_path = os.path.join(directory, name)
            image.save(full_path, "JPEG")
        # Return the full path of the saved image
        return os.path.join('uploads_small',name)
    else:
        full_path = os.path.join(directory, name)
        image.save(full_path, "JPEG")
        return os.path.join('.','uploads_small',name)
    
def image_to_base64(img):
    buffered = BytesIO()
    img.save(buffered, format="JPEG")
    return base64.b64encode(buffered.getvalue()).decode()

def check_prompt_yaml_filename(fname):
    # Check if the filename only contains letters, numbers, underscores, and dashes
    pattern = r'^[\w-]+$'
    
    # The \w matches any alphanumeric character and is equivalent to the character class [a-zA-Z0-9_].
    # The hyphen - is literally matched.

    if re.match(pattern, fname):
        return True
    else:
        return False
    
# Function to upload files to Google Drive
def upload_to_drive(filepath, filename, is_hf=True, cfg_private=None, do_upload = True):
    if do_upload:
        creds = get_google_credentials(is_hf=is_hf, cfg_private=cfg_private)
        if creds:
            service = build('drive', 'v3', credentials=creds)

            # Get the folder ID from the environment variable
            if is_hf:
                folder_id = os.environ.get('GDRIVE_FOLDER_ID')  # Renamed for clarity
            else:
                folder_id = cfg_private['google']['GDRIVE_FOLDER_ID']  # Renamed for clarity


            if folder_id:
                file_metadata = {
                    'name': filename,
                    'parents': [folder_id]
                }

                # Determine the mimetype based on the file extension
                if filename.endswith('.yaml') or filename.endswith('.yml') or filepath.endswith('.yaml') or filepath.endswith('.yml'):
                    mimetype = 'application/x-yaml'
                elif filepath.endswith('.zip'):
                    mimetype = 'application/zip'
                else:
                    # Set a default mimetype if desired or handle the unsupported file type
                    print("Unsupported file type")
                    return None

                # Upload the file
                try:
                    media = MediaFileUpload(filepath, mimetype=mimetype)
                    file = service.files().create(
                        body=file_metadata,
                        media_body=media,
                        fields='id'
                    ).execute()
                    print(f"Uploaded file with ID: {file.get('id')}")
                except Exception as e:
                    msg = f"If the following error is '404 cannot find file...' then you need to share the GDRIVE folder with your Google API service account's email address. Open your Google API JSON file, find the email account that ends with '@developer.gserviceaccount.com', go to your Google Drive, share the folder with this email account. {e}"
                    print(msg)
                    raise Exception(msg)
        else:
            print("GDRIVE_API environment variable not set.")

def get_google_credentials(is_hf=True, cfg_private=None): # Also used for google drive
    if is_hf:
        creds_json_str = os.getenv('GOOGLE_APPLICATION_CREDENTIALS')
        credentials = service_account.Credentials.from_service_account_info(json.loads(creds_json_str))
        return credentials
    else:
        with open(cfg_private['google']['GOOGLE_APPLICATION_CREDENTIALS'], 'r') as file:
            data = json.load(file)
            creds_json_str = json.dumps(data)
            credentials = service_account.Credentials.from_service_account_info(json.loads(creds_json_str))
            os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = creds_json_str
            return credentials