Skip to content

Commit 6543a0f

Browse files
committed
Updated readme.
1 parent 5c9addc commit 6543a0f

File tree

1 file changed

+291
-4
lines changed

1 file changed

+291
-4
lines changed

README.md

Lines changed: 291 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# Decree generator
2+
23
Python script that generates a lot of decrees from samples.
34
Скрипт для генерации файлов приказов из образцов.
45

5-
## Usage
6+
7+
8+
## Usage/Использование
9+
610
```
711
$ python3 gen.py -h
812
usage: gen.py [-h] [-i] [-f format] [-s path] [-o path] [-v] size
@@ -23,14 +27,297 @@ options:
2327
-v, --verbose verbose output
2428
2529
Example: python3 gen.py 50MB -f dp -s samples -o decrees -vv
26-
30+
2731
$ python3 gen.py 50MB -i -f dp -s samples/ -o output_decrees/
2832
2022-12-04 20:38:42.542 | WARNING | __main__:main:169 - Generation is started...
2933
2022-12-04 20:39:15.208 | WARNING | __main__:generate:136 - Approximate generation time: 1.13 min.
3034
2022-12-04 20:39:52.709 | WARNING | __main__:generate:124 - Size of output_decrees/ dir: 53422132 bytes
3135
2022-12-04 20:39:52.709 | WARNING | __main__:main:171 - Generation is finished!
3236
```
3337

34-
## Samples description
38+
39+
40+
## Samples description/Описание образцов
41+
3542
![description one](https://github.com/cadnev/decree_gen/blob/main/raw/img/desc1.jpg)
36-
![description two](https://github.com/cadnev/decree_gen/blob/main/raw/img/desc2.jpg)
43+
![description two](https://github.com/cadnev/decree_gen/blob/main/raw/img/desc2.jpg)
44+
45+
46+
47+
## Структура проекта
48+
49+
Проект содержит в себе:
50+
51+
- `raw/img`- директория, в которой содержатся изображения,
52+
используемые в `README.md`;
53+
54+
- `samples` – директория, в которой содержатся размеченные данные
55+
для генерации приказов;
56+
57+
- `.gitignore`;
58+
59+
- `README.md`;
60+
61+
- `auxil.py` - модуль, содержащий вспомогательные функции;
62+
63+
- `change_case.py` – модуль, позволяющий склонять инструкции и
64+
ответственных по падежам;
65+
66+
- `consts.py` – модуль, содержащий основные константные
67+
параметры, используемые при генерации;
68+
69+
- `gen.py` - основной файл проекта;
70+
71+
- `requirements.txt`;
72+
73+
- `russian_datetime.py` - надстройка над классом `date`
74+
встроенного модуля `datetime`;
75+
76+
- `write.py` – модуль, содержащий функции для создания файлов с
77+
приказами.
78+
79+
80+
81+
## Описание файлов
82+
83+
### auxil.py
84+
85+
Модуль с дополнительными функциями, используемыми при работе скрипта.
86+
87+
- ```python
88+
logger_config(v: int) -> None
89+
# Конфигурирует логгер.
90+
```
91+
92+
- ```python
93+
generate_date(standart_format=False, unixtime=False) -> str
94+
# Генерирует случайную дату.
95+
# standard_format задает формат даты.
96+
# При unixtime=True возвращает массив, где 1-ый элемент –str, второй
97+
# – float.
98+
```
99+
100+
- ```python
101+
check_size_format(size: str, pat=re.compile(r"^\d*[KMG]B$")) -> str
102+
# Проверяет формат параметра (аргумента) скрипта. Например, 1KB,
103+
# 5MB, 10GB. При несоответствии вызывает ArgumentTypeError.
104+
```
105+
106+
- ```python
107+
size_to_bytes(size: str) -> int
108+
# Переводит 1KB в 1024.
109+
```
110+
111+
- ```python
112+
getsize(out: str) -> int
113+
# Возвращает размер файлов в директории out в байтах.
114+
```
115+
116+
- ```python
117+
to_roman(n: int) -> str
118+
# Переводит арабское число в римское.
119+
```
120+
121+
- ```python
122+
add_numbering(instruction: list) -> list
123+
# Нумерует каждую инструкцию, рандомно определяет уровень
124+
# вложенности инструкции.
125+
```
126+
127+
- ```python
128+
check_abiword() -> int
129+
# Проверяет наличие abiword в системе. Возвращает 0 при успешном
130+
# выполнении или вызывает исключение.
131+
```
132+
133+
- ```python
134+
check_os() -> str
135+
# Возвращает название используемой ОС.
136+
```
137+
138+
- ```python
139+
parse_formats(fmts: str) -> str
140+
# Проверяет расширение файлов в аргументе (параметре) скрипта на
141+
# соответствие заданному формату.
142+
```
143+
144+
- ```python
145+
mm_to_px(mm: int, dpi=300) -> int
146+
# Переводит из миллиметров в пиксели.
147+
```
148+
149+
- ```python
150+
PDFunits_to_px(units: int, dpi=300) -> int
151+
# Переводит из pdf units в пиксели.
152+
```
153+
154+
- ```python
155+
calculate_logo_coords() -> list
156+
# Считает координаты логотипа в документе.
157+
```
158+
159+
- ```python
160+
calculate_sign_coords(tmx: int, tmy: int, new_page=False) -> list
161+
# Считает координаты подписи в документе.
162+
```
163+
164+
- ```python
165+
calculate_seal_coords(sign_coords: list, new_page=False) -> list
166+
# Считает координаты печати в документе.
167+
```
168+
169+
- ```python
170+
calculate_borders(original_coords: list,
171+
creator_and_date=False, task=False) -> list
172+
# Добавляет смещение к границам текста.
173+
```
174+
175+
- ```python
176+
calculate_text_coords(pdf_path: str, data: tuple) -> list
177+
# Считает координаты параграфов с текстом.
178+
```
179+
180+
###
181+
182+
### change_case.py
183+
184+
Модуль для изменения падежей в тексте ответственных.
185+
186+
187+
188+
### consts.py
189+
190+
Модуль с основными константными параметрами, использующимися
191+
при генерации приказов.
192+
193+
Массив `formats`содержит форматы дат, аналогичные форматам в библиотеке `datetime`.
194+
195+
196+
197+
### gen.py
198+
199+
Основной файл проекта, запускается для генерации приказов.
200+
201+
- ```python
202+
load_samples(samples_dir: str) -> tuple
203+
# Загружает образцы из указанной директории. Возвращает кортеж с
204+
# данными.
205+
```
206+
207+
- ```python
208+
generate(data: tuple, out: str, formats: str, size: int,
209+
samples_dir: str, is_image: bool) -> None
210+
# Запускает процесс генерации приказов, вызывая функции из других
211+
# модулей.
212+
```
213+
214+
- ```python
215+
get_args() -> argparse.Namespace
216+
# Парсит флаги скрипта
217+
```
218+
219+
- ```python
220+
main() -> None
221+
# Главная функция скритпа.
222+
```
223+
224+
225+
226+
### russian_datetime.py
227+
228+
Модуль, переопределяющий метод класса `date` стандартной библиотеки `datetime`. Нужен, чтобы метод `strftime` переводил месяц из числа в строку на рускком языке.
229+
230+
231+
232+
### write.py
233+
234+
Модуль, содержащий функции для записи приказов в файл.
235+
236+
- ```python
237+
extend_instruction(instruction: list, samples_dir: str) -> list
238+
# Добавляет ответственных и дедлайн в задачу с шансом 25%, если они
239+
# отсутствуют.
240+
```
241+
242+
- ```python
243+
write_docx(header: str, name: str, intro: str,
244+
instruction: list, responsible: str, creator: str, date:
245+
str, out: str, count: int, logo: str, sign: str, seal:
246+
str) -> str
247+
# Создает docx документ с приказом. Через аргументы функция
248+
# принимает полный текст с приказом (шапка, название, введение…),
249+
# директорию с выходными файлами, порядковый номер приказа, пути к
250+
# изображениям (логотип, подпись, печать). Возвращает путь к
251+
# сгенерированному документу.
252+
```
253+
254+
- ```python
255+
write_json(instruction: list, responsible_arr: list,
256+
date: list, out: str, count: int) -> str
257+
# Создает разметку для приказа. Возвращает путь к сгенерированному
258+
# файлу.
259+
```
260+
261+
- ```python
262+
write_pdf_linux(docx_path: str, out: str, count: int) -> str
263+
# Конвертирует docx в pdf. Возвращает путь к сгенерированному
264+
# документу.
265+
```
266+
267+
- ```python
268+
write_jpg(out: str, count: int) -> None
269+
# Конвертирует pdf в jpg.
270+
```
271+
272+
- ```python
273+
extract_tm(pdf_path: str, page_num: int) -> tuple
274+
# Функция для метода extract_text.
275+
# Считает координаты последнего параграфа в документе.
276+
```
277+
278+
- ```python
279+
write_coords(json_path: str, pdf_path: str) -> None
280+
# Добавляет координаты изображений в pdf файле в json разметку.
281+
```
282+
283+
284+
285+
## Формат файлов с образцами
286+
287+
### execution_control.txt
288+
289+
`Контроль над исполнением распоряжения оставить за {ablt}` – на место
290+
фигурных скобок будет подставляться ответственный в заданном падеже (ablt
291+
– творительный, accs – винительный).
292+
293+
294+
295+
### responsible.json
296+
297+
```json
298+
[
299+
"{Министр} {генерал} полиции Российской Федерации В.{{КОЛОКОЛЬЦЕВ}}",
300+
"КОЛОКОЛЬЦЕВ",
301+
"В.",
302+
"",
303+
    "Министр генерал полиции Российской Федерации"
304+
]
305+
```
306+
307+
Первый элемент массива – строка с ответственным, которая пойдет в приказ.
308+
309+
В одинарных фигурных скобках – слово из должности (профессии), у которого нужно изменить падеж.
310+
311+
В двойных фигурных скобках – слово из имени, у которого нужно изменить падеж.
312+
313+
Это сделано так, потому что профессии и имена склоняют две разные библиотеки.
314+
315+
Следующие элементы заносятся в разметку:
316+
317+
- Второй элемент массива – фамилия;
318+
319+
- Третий элемент массива – имя;
320+
321+
- Четвертый элемент массива – отчество;
322+
323+
- Пятый элемент массива – должность.

0 commit comments

Comments
 (0)