เดเดพเตป เด
เดเตเดคเตเดคเดฟเดเต เดเดดเตเดคเดฟ
เดเตเดฆเตเดฏเดคเตเดคเดฟเดจเตเดฑเต เดชเดถเตเดเดพเดคเตเดคเดฒเด เดเดคเดพเดฃเต: เดเดฐเต เดเดพเดฒเดคเตเดคเต เดเดฐเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเดฆเตเดฏเด เด เดคเต เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟเดเดณเตเด เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเดเดณเตเด เดเดณเตเดณ เดเดฐเต เดเตเดฑเดฟเดฏ เดฎเตเดฃเตเดฒเดฟเดคเตเดคเต เดเดฏเดฟเดฐเตเดจเตเดจเต, เดเดจเตเดจเดพเตฝ เดเดพเดฒเดเตเดฐเดฎเตเดฃ เด เดคเต เดตเดณเตผเดจเตเดจเต, เดธเตเดตเดจเดเตเดเดณเดพเดฏเดฟ เดตเดฟเดญเดเดฟเดเตเดเต, เด เดคเต เดฎเตเดเตเดฐเตเดธเตผเดตเตเดธเตเดเดณเดพเดฏเดฟ เดตเดฟเดญเดเดฟเดเตเดเดพเตป เดคเตเดเดเตเดเดฟ. เดชเดฟเดจเตเดจเต เดธเตเดเตเดฏเดฟเตฝ เดเตเดฏเตเดคเต. เดเดฆเตเดฏเด, เดเดคเตเดฒเตเดฒเดพเด เดจเดเตเดจเดฎเดพเดฏ เดตเดฟเดชเดฟเดเดธเดฟเดฒเดพเดฃเต เดเตเดฏเตเดคเดคเต, เดเตเดกเต เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเด เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ เด เตปเดธเดฟเดฌเดฟเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดเตเดเตเดฎเตเดฑเตเดฑเตเดเตเดฏเตโเดคเต, เดเตเดเดพเดคเต เดเดฐเต เดธเตเดตเดจเดตเตเด เดเดตเดถเตเดฏเดฎเดพเดฏ เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเดณเตเด เดเตเดเดณเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฐเต YAML เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดชเดฏเตเดเดฟเดเตเดเต เดธเดฎเดพเดนเดฐเดฟเดเตเดเต, เดเตเดเดพเดคเต เดธเดฎเดพเดจเดฎเดพเดฏ เดเดฐเต เดเตเตบเดซเดฟเดเตผ เดซเดฏเตฝ เดเดชเดฏเตเดเดฟเดเตเดเต. เดฒเตเดเตเดเตฝ เดฒเตเดเตเดเตเดเตพ, เด เดคเต เดตเดณเดฐเต เดธเตเดเดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเดพเดฐเดฃเด .k เด เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดฐเต เดเดเตเดณ เดเดฌเตโเดเดเตโเดฑเตเดฑเดฟเดฒเตเดเตเดเต เดฒเตเดกเต เดเตเดฏเตโเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดชเตเดฐเตเดเดเตโเดฑเตเดฑเดฟเตฝ เดเดตเดฟเดเต เดจเดฟเดจเตเดจเตเด เดเดเตโเดธเดธเต เดเตเดฏเตเดฏเดพเดจเดพเดเตเด.
เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดฎเตเดเตเดฐเตเดธเตผเดตเตเดธเตเดเดณเตเดเต เดเดฃเตเดฃเด, เด
เดตเดฏเตเดเต เดเดฃเดเตเดทเดจเตเดเตพ, เดเตเดเดพเดคเต
เดเดเตเดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดฐเต เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดฌเตโเดเดเตโเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเดเดตเดฟเดงเดพเดจเด เดเดเตเดเดณเตเดเต เดเตเดฒเดพเดธเดฟเดเต เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดซเดฏเดฒเดฟเดฒเตเด เดเตเดฌเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฐเดนเดธเตเดฏเดเตเดเดณเดฟเดฒเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเดจเตเดจ เดคเดฐเดคเตเดคเดฟเตฝ เดชเดฐเดฟเดทเตโเดเตเดเดฐเดฟเดเตเดเต. เดฎเตเดจเตเดจเดพเดฎเดคเตเดคเต เดชเตเดคเตเดคเดฃเดฟเดจเตเดฑเต เดญเดพเดทเดฏเดฟเตฝ, เดเตเดเตเดคเตฝ เดเตผเดเตเดเดถเดฎเดพเดฏ เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดเดจเดฏเตเด เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเตเดคเดฟเดฏเดฟเตฝ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต:
เดกเดฟเดเตเดฑเตเดฑเต[str, Dict[str, Union[str, int, float]]]
เด เดคเดพเดฏเดคเต, เด เดจเตเดคเดฟเดฎ เดเตเดเตเดซเดฟเดเต เดเดจเตเดจเดคเต เดชเตเดฐเตเดณเตเดณ เดตเดฟเดญเดพเดเดเตเดเดณเตเดณเตเดณ เดเดฐเต เดจเดฟเดเดฃเตเดเตเดตเดพเดฃเต, เด เดต เดเดฐเตเดจเตเดจเตเด เดฒเดณเดฟเดคเดฎเดพเดฏ เดคเดฐเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฎเตเดฒเตเดฏเดเตเดเดณเตเดณเตเดณ เดเดฐเต เดจเดฟเดเดฃเตเดเตเดตเดพเดฃเต. เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดเดฑเดตเดฟเดเดเตเดเดณเดฟเดฒเตเดเตเดเตเดณเตเดณ เดเตเตบเดซเดฟเดเดฑเตเดทเดจเตเด เดชเตเดฐเดตเตเดถเดจเดตเตเด เดตเดฟเดญเดพเดเดเตเดเตพ เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดเตเดเดณเตเดเต เดเตเตบเดซเดฟเดเดฑเตเดทเดจเตเดฑเต เดเดฐเต เดญเดพเดเดคเตเดคเดฟเดจเตเดฑเต เดเดฆเดพเดนเดฐเดฃเด:
adminka:
django_secret: "ExtraLongAndHardCode"
db_main:
engine: mysql
host: 256.128.64.32
user: cool_user
password: "SuperHardPassword"
redis:
host: 256.128.64.32
pw: "SuperHardPassword"
port: 26379
smtp:
server: smtp.gmail.com
port: 465
email: [email protected]
pw: "SuperHardPassword"
เด
เดคเต เดธเดฎเดฏเด เดตเดฏเดฒเตเด engine
เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเดเตพ SQLite-เตฝ เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด, เดเตเดเดพเดคเต redis
เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเดชเตเดชเตเดเตเดเดคเต mock
, เดธเดเดฐเดเตเดทเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดซเดฏเดฒเดฟเดจเตเดฑเต เดชเตเดฐเตเด เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดจเตเดจเต - เด เดชเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเตเดเดฏเตเด เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต, เดเดคเต เดกเตเดฌเดเตเดเดฟเดเดเต, เดฏเตเดฃเดฟเดฑเตเดฑเต เดเตเดธเตเดฑเตเดฑเดฟเดเดเต, เดฎเดฑเตเดฑเต เดเดตเดถเตเดฏเดเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเตเดเตเดเดพเดฏเดฟ เดชเตเดฐเดพเดฆเตเดถเดฟเดเดฎเดพเดฏเดฟ เดเตเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเต เดเดณเตเดชเตเดชเดฎเดพเดเตเดเตเดจเตเดจเต. เดฎเดฑเตเดฑเต เดจเดฟเดฐเดตเดงเดฟ เดเดตเดถเตเดฏเดเตเดเดณเตเดณเตเดณเดคเดฟเดจเดพเตฝ เดเดคเต เดเดเตเดเตพเดเตเดเต เดตเดณเดฐเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต - เดเดเตเดเดณเตเดเต เดเตเดกเดฟเดจเตเดฑเต เดเดฐเต เดญเดพเดเด เดตเดฟเดตเดฟเดง เดตเดฟเดถเดเดฒเดจ เดเดฃเดเตเดเตเดเตเดเตเดเดฒเตเดเตพเดเตเดเดพเดฏเดฟ เดเดฆเตเดฆเตเดถเดฟเดเตเดเตเดณเตเดณเดคเดพเดฃเต, เดเดคเต เดเตผเดเตเดเดธเตเดเตเดฐเตเดทเดจเตเดณเตเดณ เดธเตเตผเดตเดฑเตเดเดณเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดตเดฟเดตเดฟเดง เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเดเดณเดฟเดฒเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดฃเตเด เด
เดจเดฒเดฟเดธเตเดฑเตเดฑเตเดเดณเตเดเต เดเดฎเตเดชเตเดฏเตเดเตเดเดฑเตเดเดณเดฟเดฒเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต. เดฌเดพเดเตเดเตเตปเดกเต เดชเตเดฐเดถเตโเดจเดเตเดเดณเต เดเดถเดเตเดเดชเตเดชเตเดเตเดคเตเดคเดพเดคเต เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดกเดพเดฑเตเดฑ เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต เดชเตเดชเตเดชเตเดฒเตเดจเตเดเตพ เดกเตเดฌเดเต เดเตเดฏเตเดฏเตเด. เดตเดดเดฟเดฏเดฟเตฝ, เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดฒเตเดเดเตเดเต เดเตเดกเต เดเตพเดชเตเดชเตเดเตเดฏเตเดณเตเดณ เดเดเตเดเดณเตเดเต เดชเตเดฐเดงเดพเดจ เดเตเดณเตเดเตพ เดเดคเดฟเดฒเตเดเตเดฏเดพเดฃเต เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเตเดจเตเดจเต เดชเดเตเดเดฟเดเตเดจเตเดจเดคเต เดเดชเดฆเตเดฐเดตเดฟเดเตเดเดฟเดฒเตเดฒ. setup.py
- เดเดคเต เดเดฐเตเดฎเดฟเดเตเดเต เดชเตเดฒเดพเดฑเตเดฑเตโเดซเตเดฎเดฟเตฝ เดจเดฟเดจเตเดจเตเด เดเดชเดฏเตเดเดฐเตเดคเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเด เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏ เดเดฐเตเดฑเตเดฑ เดเดตเดพเดธเดตเตเดฏเดตเดธเตเดฅเดฏเดพเดฏเดฟ เดเดเตเดเดณเตเดเต เดเตเดกเดฟเดจเต เดเดจเตเดจเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต.
เดเดฐเต เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดชเตเดกเดฟเดจเตเดฑเต เดตเดฟเดตเดฐเดฃเด เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต:
containers:
- name : enter-api
image: enter-api:latest
ports:
- containerPort: 80
volumeMounts:
- name: db-main-secret-volume
mountPath: /etc/secrets/db-main
volumes:
- name: db-main-secret-volume
secret:
secretName: db-main-secret
เด เดคเดพเดฏเดคเต, เดเดฐเต เดฐเดนเดธเตเดฏเดตเตเด เดเดฐเต เดตเดฟเดญเดพเดเดคเตเดคเต เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจเต. เดฐเดนเดธเตเดฏเดเตเดเตพ เดเดคเตเดชเตเดฒเตเดฏเดพเดฃเต เดธเตเดทเตเดเดฟเดเตเดเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเต:
apiVersion: v1
kind: Secret
metadata:
name: db-main-secret
type: Opaque
stringData:
db_main.yaml: |
engine: sqlite
filename: main.sqlite3
เดเดคเต เดเดฐเตเดฎเดฟเดเตเดเต เดชเดพเดคเดฏเดฟเตฝ YAML เดซเดฏเดฒเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดพเดฐเดฃเดฎเดพเดเตเดจเตเดจเต /etc/secrets/db-main/section_name.yaml
เดชเตเดฐเดพเดฆเตเดถเดฟเด เดฒเตเดเตเดเตเดเตพเดเตเดเดพเดฏเดฟ, เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดจเตเดฑเต เดฑเตเดเตเดเต เดกเดฏเดฑเดเตเดเดฑเดฟเดฏเดฟเดฒเต เดเตปเดตเดฏเตเตบเดฎเตเดจเตเดฑเต เดตเตเดฐเดฟเดฏเดฌเดฟเดณเดฟเตฝ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฟเดฏ เดชเดพเดคเดฏเดฟเดฒเต เดธเตเดฅเดฟเดคเดฟ เดเตเดฏเตเดฏเตเดจเตเดจ เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต. เด เดธเตเดเดฐเตเดฏเดเตเดเตพเดเตเดเต เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดฏเดพเดฏ เดเตเดกเต เดธเตโเดชเตเดฏเดฟเดฒเดฑเดฟเตฝ เดเดพเดฃเดพเด.
config.py
__author__ = 'AivanF'
__copyright__ = 'Copyright 2020, AivanF'
import os
import yaml
__all__ = ['config']
PROJECT_DIR = os.path.abspath(__file__ + 3 * '/..')
SECRETS_DIR = '/etc/secrets'
KEY_LOG = '_config_log'
KEY_DBG = 'debug'
def is_yes(value):
if isinstance(value, str):
value = value.lower()
if value in ('1', 'on', 'yes', 'true'):
return True
else:
if value in (1, True):
return True
return False
def update_config_part(config, key, data):
if key not in config:
config[key] = data
else:
config[key].update(data)
def parse_big_config(config, filename):
'''
Parse YAML config with multiple section
'''
if not os.path.isfile(filename):
return False
with open(filename) as f:
config_new = yaml.safe_load(f.read())
for key, data in config_new.items():
update_config_part(config, key, data)
config[KEY_LOG].append(filename)
return True
def parse_tiny_config(config, key, filename):
'''
Parse YAML config with a single section
'''
with open(filename) as f:
config_tiny = yaml.safe_load(f.read())
update_config_part(config, key, config_tiny)
config[KEY_LOG].append(filename)
def combine_config():
config = {
# To debug config load code
KEY_LOG: [],
# To debug other code
KEY_DBG: is_yes(os.environ.get('DEBUG')),
}
# For simple local runs
CONFIG_SIMPLE = os.path.join(PROJECT_DIR, 'config.yaml')
parse_big_config(config, CONFIG_SIMPLE)
# For container's tests
CONFIG_ENVVAR = os.environ.get('CONFIG')
if CONFIG_ENVVAR is not None:
if not parse_big_config(config, CONFIG_ENVVAR):
raise ValueError(
f'No config file from EnvVar:n'
f'{CONFIG_ENVVAR}'
)
# For K8s secrets
for path, dirs, files in os.walk(SECRETS_DIR):
depth = path[len(SECRETS_DIR):].count(os.sep)
if depth > 1:
continue
for file in files:
if file.endswith('.yaml'):
filename = os.path.join(path, file)
key = file.rsplit('.', 1)[0]
parse_tiny_config(config, key, filename)
return config
def build_config():
config = combine_config()
# Preprocess
for key, data in config.items():
if key.startswith('db_'):
if data['engine'] == 'sqlite':
data['filename'] = os.path.join(PROJECT_DIR, data['filename'])
# To verify correctness
if config[KEY_DBG]:
print(f'** Loaded config:n{yaml.dump(config)}')
else:
print(f'** Loaded config from: {config[KEY_LOG]}')
return config
config = build_config()
เดเดตเดฟเดเต เดฏเตเดเตเดคเดฟ เดตเดณเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฃเต: เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดกเดฏเดฑเดเตเดเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเดฒเดฟเดฏ เดเตเตบเดซเดฟเดเตเดทเดจเตเดเดณเตเด เดเตปเดตเดฏเตเตบเดฎเตเดจเตเดฑเต เดตเตเดฐเดฟเดฏเดฌเดฟเตพ เดตเดดเดฟเดฏเตเดณเตเดณ เดชเดพเดคเดเดณเตเด, เดเตเดฌเตผ เดฐเดนเดธเตเดฏเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเตเดฑเดฟเดฏ เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดตเดฟเดญเดพเดเดเตเดเดณเตเด เดเดเตเดเตพ เดธเดเดฏเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต, เดคเตเดเตผเดจเตเดจเต เด เดต เด เตฝเดชเตเดชเด เดฎเตเตปเดเตเดเตเดเดฟ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเต. เดเตเดเดพเดคเต เดเดฟเดฒ เดตเตเดฐเดฟเดฏเดฌเดฟเดณเตเดเตพ. เดฐเดนเดธเตเดฏเดเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดซเดฏเดฒเตเดเตพเดเตเดเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดฎเตเดชเตเตพ, เดเดฐเต เดกเตเดชเตเดคเต เดชเดฐเดฟเดฎเดฟเดคเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเตเดตเตเดจเตเดจเต เดเดพเตป เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดจเตเดจเต, เดเดพเดฐเดฃเด เดฐเดนเดธเตเดฏเดเตเดเตพ เดธเตเดตเดฏเด เดธเดเดญเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดฐเดนเดธเตเดฏเดคเตเดคเดฟเดฒเตเด K8s เดเดฐเต เดฎเดฑเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดซเตเตพเดกเตผ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เดเดฐเต เดฒเดฟเดเตเดเต เดเดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเตฝ เดธเตเดฅเดฟเดคเดฟเดเตเดฏเตเดฏเตเดจเตเดจเต.
เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เดเตผเดเตเดเตเดเตเดเดฟเดฒเตเด เดเดชเดเดพเดฐเดชเตเดชเตเดเตเดฎเตเดจเตเดจเต เดเดพเตป เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเต :) เดธเตเดฐเดเตเดทเดฏเต เดเตเดฑเดฟเดเตเดเต เดฎเดฑเตเดฑเต เดฎเตเดเตเดเดชเตเดชเตเดเตเดคเตเดคเดฒเดฟเดจเตเดณเตเดณ เดฎเดฑเตเดฑเต เดฎเตเดเดฒเดเดณเต เดเตเดฑเดฟเดเตเดเต เดเดณเตเดณ เด เดญเดฟเดชเตเดฐเดพเดฏเดเตเดเดณเตเด เดถเตเดชเดพเตผเดถเดเดณเตเด เดธเตเดตเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดฎเตเดฎเตเดฏเตเดฃเดฟเดฑเตเดฑเดฟเดฏเตเดเต เด เดญเดฟเดชเตเดฐเดพเดฏเดตเตเด เดฐเดธเดเดฐเดฎเดพเดฃเต, เดเตเตบเดซเดฟเดเตเดฎเดพเดชเตโเดธเดฟเดจเต (เดเดเตเดเดณเตเดเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดเดคเตเดตเดฐเต เด เดต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ) เดชเดฟเดจเตเดคเตเดฃ เดเตเตผเดคเตเดคเต GitHub / PyPI-เดฏเดฟเตฝ เดเตเดกเต เดชเตเดฐเดธเดฟเดฆเตเดงเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เดฎเตเดฒเตเดฏเดตเดคเตเดคเดพเดฃเต? เดตเตเดฏเดเตเดคเดฟเดชเดฐเดฎเดพเดฏเดฟ, เด เดคเตเดคเดฐเด เดเดพเดฐเตเดฏเดเตเดเตพ เดชเตเดฐเตเดเดเตเดฑเตเดฑเตเดเตพเดเตเดเต เดธเดพเตผเดตเดคเตเดฐเดฟเดเดฎเดพเดเดพเตป เดเดดเดฟเดฏเดพเดคเตเดคเดตเดฟเดงเด เดตเตเดฏเดเตเดคเดฟเดเดคเดฎเดพเดฃเตเดจเตเดจเต เดเดพเตป เดเดฐเตเดคเตเดจเตเดจเต, เดเตเดเดพเดคเต เดเดตเดฟเดเต เดจเตฝเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเต เดชเตเดฒเต เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฐเตเดเต เดจเดฟเตผเดตเตเดตเดนเดฃเดเตเดเดณเดฟเดฒเตเดเตเดเต เด เตฝเดชเตเดชเด เดจเตเดเตเดเตเด, เดเตเดเดพเดคเต เดธเตเดเตเดทเตเดฎเดคเดเตพ, เดจเตเดฑเตเดเตเดเตเดเตพ, เดฎเดฟเดเดเตเด เดธเดฎเตเดชเตเดฐเดฆเดพเดฏเดเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดเดฐเต เดเตผเดเตเด, เด เดญเดฟเดชเตเดฐเดพเดฏเดเตเดเดณเดฟเตฝ เดเดพเดฃเดพเตป เดเดพเตป เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเต. , เดฎเดคเดฟ ๐
เดฐเดเดฟเดธเตเดฑเตเดฑเตผ เดเตเดฏเตเดค เดเดชเดฏเตเดเตเดคเดพเดเตเดเตพเดเตเดเต เดฎเดพเดคเตเดฐเดฎเต เดธเตผเดตเตเดฏเดฟเตฝ เดชเดเตเดเตเดเตเดเตเดเดพเตป เดเดดเดฟเดฏเต.
เดเดพเตป เดเดฐเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเต/เดฒเตเดฌเตเดฐเดฑเดฟ เดเดฏเดฟ เดชเตเดฐเดธเดฟเดฆเตเดงเตเดเดฐเดฟเดเตเดเดฃเต?
-
0,0%เด เดคเต, เดเดพเตป /contribution0 เดเดชเดฏเตเดเดฟเดเตเดเตเด
-
33,3%เด เดคเต, เด เดคเต เดฎเดฟเดเดเตเดเดคเดพเดฏเดฟ เดคเตเดจเตเดจเตเดจเตเดจเต4
-
41,7%เดเดฒเตเดฒ, เดเดฐเดพเดฃเต เด เดคเต เด เดตเดฐเตเดเต เดธเตเดตเดจเตเดคเด เดซเตเตผเดฎเดพเดฑเตเดฑเดฟเตฝ เด เดตเดฐเตเดเต เดเดตเดถเตเดฏเดเตเดเตพเดเตเดเต เด เดจเตเดฏเตเดเตเดฏเดฎเดพเดเตเดเตเดฃเตเดเดคเต5
-
25,0%เดเดพเตป เดเดคเตเดคเดฐเด เดชเดฑเดฏเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดเตเดเตเดจเดฟเตฝเดเตเดเตเด3
12 เดเดชเดฏเตเดเตเดคเดพเดเตเดเตพ เดตเตเดเตเดเต เดเตเดฏเตเดคเต. 3 เดเดชเดฏเตเดเตเดคเดพเดเตเดเตพ เดตเดฟเดเตเดเตเดจเดฟเดจเตเดจเต.
เด
เดตเดฒเดเดฌเด: www.habr.com