python-setenv 0.0.1__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.
- python_setenv-0.0.1/.gitignore +10 -0
- python_setenv-0.0.1/.python-version +1 -0
- python_setenv-0.0.1/PKG-INFO +7 -0
- python_setenv-0.0.1/README.md +0 -0
- python_setenv-0.0.1/pyproject.toml +19 -0
- python_setenv-0.0.1/src/setenv/__init__.py +131 -0
- python_setenv-0.0.1/src/setenv/py.typed +0 -0
- python_setenv-0.0.1/uv.lock +23 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "python-setenv"
|
|
3
|
+
version = "0.0.1"
|
|
4
|
+
description = "Set env (e.g. HF_TOKEN) from colab/kaggle secrets or dotenv .env env files"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [
|
|
7
|
+
{ name = "ffreemt", email = "yucongo+fmt@gmail.com" }
|
|
8
|
+
]
|
|
9
|
+
requires-python = ">=3.10"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"python-dotenv>=1.2.1",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
[build-system]
|
|
15
|
+
requires = ["hatchling"]
|
|
16
|
+
build-backend = "hatchling.build"
|
|
17
|
+
|
|
18
|
+
[tool.hatch.build.targets.wheel]
|
|
19
|
+
packages = ["src/setenv"]
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"""Set an environ var in colab/kaggle/dotenv(search for .env dotenv env).
|
|
2
|
+
|
|
3
|
+
!pip install -q python-dotenv
|
|
4
|
+
"""
|
|
5
|
+
# pylint: disable=import-outside-toplevel,too-many-statements,too-many-branches
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
# import sys
|
|
9
|
+
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from dotenv import dotenv_values, find_dotenv
|
|
12
|
+
# from loguru import logger
|
|
13
|
+
|
|
14
|
+
__version__ = "0.0.1"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def hello() -> str:
|
|
18
|
+
return "Hello from python-setenv!"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# def set_env(
|
|
22
|
+
def setenv(
|
|
23
|
+
env_var="HF_TOKEN", source_var=None, envfile=None, override=False,
|
|
24
|
+
# verbose=False
|
|
25
|
+
):
|
|
26
|
+
"""
|
|
27
|
+
Set environ var via google userdat/kaggle_secrets/[.env/dotenv/env].
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
----
|
|
31
|
+
env_var:
|
|
32
|
+
env var to set, default HF_TOKEN.
|
|
33
|
+
source_var:
|
|
34
|
+
var from google/kaggle secret/userdata
|
|
35
|
+
or defined in .env/dotenv/env
|
|
36
|
+
envfile: file to read from, default, search
|
|
37
|
+
for ['.env', 'dotenv', 'env']
|
|
38
|
+
override:
|
|
39
|
+
reset if set to True
|
|
40
|
+
x verbose:
|
|
41
|
+
for loguru.logging, print TRACE if set
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
-------
|
|
45
|
+
value of the env var.
|
|
46
|
+
"""
|
|
47
|
+
_ = '''
|
|
48
|
+
if verbose:
|
|
49
|
+
logger.remove()
|
|
50
|
+
logger.add(sys.stderr, level="TRACE") # default "DEBUG"
|
|
51
|
+
# '''
|
|
52
|
+
if not override and os.getenv(env_var):
|
|
53
|
+
return os.getenv(env_var)
|
|
54
|
+
|
|
55
|
+
# if override:
|
|
56
|
+
save_env_var = os.getenv(env_var)
|
|
57
|
+
if os.getenv(env_var) is not None:
|
|
58
|
+
del os.environ[env_var]
|
|
59
|
+
|
|
60
|
+
if source_var is None:
|
|
61
|
+
source_var = env_var
|
|
62
|
+
|
|
63
|
+
# if KAGGLE
|
|
64
|
+
if "KAGGLE_KERNEL" in " ".join(os.environ.keys()):
|
|
65
|
+
# import kaggle_web_client # type: ignore
|
|
66
|
+
from kaggle_secrets import UserSecretsClient # type: ignore
|
|
67
|
+
|
|
68
|
+
user_secrets = UserSecretsClient()
|
|
69
|
+
try:
|
|
70
|
+
os.environ[env_var] = user_secrets.get_secret(source_var)
|
|
71
|
+
return os.getenv(env_var)
|
|
72
|
+
except Exception:
|
|
73
|
+
return ""
|
|
74
|
+
|
|
75
|
+
# try colab COLAB_NOTEBOOK
|
|
76
|
+
if "COLAB_NOTEBOOK" in " ".join(os.environ.keys()):
|
|
77
|
+
from google.colab import userdata # noqa # type: ignore
|
|
78
|
+
try:
|
|
79
|
+
os.environ[env_var] = userdata.get(source_var)
|
|
80
|
+
return os.getenv(env_var)
|
|
81
|
+
except Exception:
|
|
82
|
+
return ""
|
|
83
|
+
|
|
84
|
+
# .env dotenv env
|
|
85
|
+
# envfile = None
|
|
86
|
+
|
|
87
|
+
# cwd
|
|
88
|
+
print(f"cwd: {Path.cwd()}, {envfile=}")
|
|
89
|
+
|
|
90
|
+
if envfile is None:
|
|
91
|
+
for _ in [".env", "dotenv", "env"]:
|
|
92
|
+
# filepath = Path.cwd() / _
|
|
93
|
+
# envfile = find_dotenv(filepath.as_posix())
|
|
94
|
+
filepath = _
|
|
95
|
+
envfile = find_dotenv(filepath)
|
|
96
|
+
if envfile:
|
|
97
|
+
# logger.trace(f"Found {envfile=}")
|
|
98
|
+
print(f"Found {envfile=}")
|
|
99
|
+
break
|
|
100
|
+
|
|
101
|
+
if envfile:
|
|
102
|
+
print(f"loading {envfile=} with dotenv_values(envfile)")
|
|
103
|
+
if dotenv_values(envfile).get(source_var):
|
|
104
|
+
_ = dotenv_values(envfile).get(source_var)
|
|
105
|
+
if _: # need to be a str
|
|
106
|
+
os.environ[env_var] = _
|
|
107
|
+
print(f"{envfile=}: set {env_var}={source_var}")
|
|
108
|
+
if os.getenv(env_var):
|
|
109
|
+
return os.getenv(env_var)
|
|
110
|
+
|
|
111
|
+
# try manual input?
|
|
112
|
+
print(
|
|
113
|
+
f"""
|
|
114
|
+
Unable to set {env_var}={source_var},
|
|
115
|
+
not in colab or Secrets not set, not kaggle
|
|
116
|
+
or Secrets not set, no .env/dotenv/env file
|
|
117
|
+
in the current working dir or parent dirs or env not present."""
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
# restore?
|
|
121
|
+
if override:
|
|
122
|
+
# save_env_var may be None
|
|
123
|
+
if save_env_var:
|
|
124
|
+
if os.getenv(env_var) is not None:
|
|
125
|
+
os.environ[env_var] = save_env_var
|
|
126
|
+
|
|
127
|
+
print(f"Restore {env_var=}")
|
|
128
|
+
|
|
129
|
+
return ""
|
|
130
|
+
|
|
131
|
+
__all__ = ("__version__", "setenv",)
|
|
File without changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
version = 1
|
|
2
|
+
revision = 2
|
|
3
|
+
requires-python = ">=3.10"
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "python-dotenv"
|
|
7
|
+
version = "1.2.1"
|
|
8
|
+
source = { registry = "https://pypi.org/simple" }
|
|
9
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload_time = "2025-10-26T15:12:10.434Z" }
|
|
10
|
+
wheels = [
|
|
11
|
+
{ url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload_time = "2025-10-26T15:12:09.109Z" },
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
[[package]]
|
|
15
|
+
name = "python-setenv"
|
|
16
|
+
version = "0.1.0"
|
|
17
|
+
source = { editable = "." }
|
|
18
|
+
dependencies = [
|
|
19
|
+
{ name = "python-dotenv" },
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
[package.metadata]
|
|
23
|
+
requires-dist = [{ name = "python-dotenv", specifier = ">=1.2.1" }]
|