Skip to content

Commit

Permalink
Merge pull request #2 from MilkyWay-core/add-default-section-env
Browse files Browse the repository at this point in the history
Add default section env
  • Loading branch information
MilkyWay-core authored Jan 28, 2022
2 parents 9a0b8a1 + bce3c86 commit 6d7371c
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 19 deletions.
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,28 @@ python genfile.py "-e{\$main\$:{\$result_file\$: example_2.txt, \$range\$: {1: {
## ПРИМЕР ФАЙЛА С ПЕРЕМЕННЫМИ В ФОРМАТЕ YAML:
```
$main$:
$result_file$: example_$i$.txt
$default$:
$result_file$: example_default_$i$.txt
site: www.example_default.com
admin_panel: admin.example_default.com
$range$:
1..5 10:
$result_file$: example_from_admin_config_$i$.txt
site: www.example_$i$
admin_panel: admin.example
20..30:
$result_file$: example_config_$i$.txt
site: www.example_$i$
admin_panel: admin.example
shop: shop.example
31:
shop: shop.example
admin_panel: admin.example_shop.com
```
**$main$** - точка входа, программа читает только то что внутри, весь остальной документ игнорируется

**$default$** - секуция default добавляет параметры ко всем **$range$**. Эти параметры можно переопределить внутри **$range$**

**$result_file$** - содержит имя файла который будет сгенерирован

**$range$** - указывает количество создаваемых файлов. В примере будет создано 16 файлов с разным содержимым для диапазонов '1..5 10' и '20..30'. Если нужно создать один файл, нужно просто указать одну цифру.
Expand Down
45 changes: 33 additions & 12 deletions code/source/env.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from email.policy import default
import yaml

key_words = ['$main$', '$result_file$', '$range$', ]
Expand All @@ -16,34 +17,51 @@ def __init__(self, loaded_yaml):
result = yaml.load(loaded_yaml, Loader=yaml.SafeLoader)
try:
self._n_env = []
ranges = result['$main$']['$range$']
for range_key, range_value in ranges.items():
nd = _normalized_data()
nd.result_file = result['$main$']['$result_file$']
nd.add_normalize_range(range_key)
nd.add_normalize_data(range_value)
self._n_env.append(nd)
main = result['$main$']
default_data = main.get('$default$')
ranges = main.get('$range$')
if ranges and default_data:
for range_key, range_value in ranges.items():
nd = _normalized_data(range_value.get('$result_file$') or default_data.get('$result_file$') or 'noname', range_key, default_data)
nd.add_normalize_data(range_value)
self._n_env.append(nd)
elif default_data:
self._n_env.append(_normalized_data(default_data.get('$result_file$') or 'noname', 1, default_data))
elif range:
for range_key, range_value in ranges.items():
self._n_env.append(_normalized_data(range_value.get('$result_file$') or 'noname',range_key, range_value))
else:
raise envException(
f'Не указаны обязательные переменные $main$, $default$ или $range$')
except KeyError as err:
raise envException(
f'Не указаны обязательные переменные $main$, $result_file$, $range$: {err}')
f'Не указаны обязательные переменные $main$, $default$ или $range$: {err}')

def get_data(self):
"""
возвращает лист с нормализованными данными для каждого range
"""
return self._n_env


def cast_normalized_data(self):
def __init__(result_file, range_key, data):
nd = _normalized_data()
nd.result_file=result_file
nd.add_normalize_data=data
nd.add_normalize_range=range_key
return nd
class _normalized_data():
"""
нормализованные данные готовые к передаче в genfile
"""

def __init__(self):
self.result_file = ''
def __init__(self, result_file, range_key, data):
self.result_file = result_file
#dict in dict
self.range_list = []
self.data = {}
self.add_normalize_range(range_key)
self.add_normalize_data(data)

def add_normalize_range(self, range_string: str):
ranges = str(range_string).split(' ')
Expand All @@ -64,7 +82,10 @@ def add_normalize_range(self, range_string: str):

def add_normalize_data(self, data_dict: dict):
if type(data_dict) is dict:
self.data = data_dict
if self.data:
self.data = {**self.data, **data_dict}
else:
self.data = data_dict
else:
raise envException('$range$ должен иметь формат $range$: n..n+1: some_key: some_value')
'''
Expand Down
4 changes: 2 additions & 2 deletions code/source/template/example_1.template
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ auth:
hostname: {{db.master.hostname}}
user: {{db.master.user}}
password: {{db.master.password}}
{% if db.slave %}
{%- if db.slave %}
mysql-slave:
name: {{db.slave.name}}
hostname: {{db.slave.hostname}}
user: {{db.slave.user}}
password: {{db.slave.password}}
{% endif %}
{%- endif %}
ingress:
hostname: {{ingress.hostname}}
12 changes: 8 additions & 4 deletions code/source/template/example_1.template.env
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
$main$:
$result_file$: example_$i$.yaml
$range$:
1..3 15..20 22:
$default$:
db:
master:
name: example_db_$i$
hostname: example_hostname
user: 'user'
password: '123'
password: '123'
$range$:
1..3 15..20 22:
$result_file$: prod_$i$.yaml
db:
master:
password: '1123'
slave:
name: example_db_slave_$i$
hostname: example_hostname
Expand Down

0 comments on commit 6d7371c

Please sign in to comment.