1
1
# Decree generator
2
+
2
3
Python script that generates a lot of decrees from samples.
3
4
Скрипт для генерации файлов приказов из образцов.
4
5
5
- ## Usage
6
+
7
+
8
+ ## Usage/Использование
9
+
6
10
```
7
11
$ python3 gen.py -h
8
12
usage: gen.py [-h] [-i] [-f format] [-s path] [-o path] [-v] size
@@ -23,14 +27,297 @@ options:
23
27
-v, --verbose verbose output
24
28
25
29
Example: python3 gen.py 50MB -f dp -s samples -o decrees -vv
26
-
30
+
27
31
$ python3 gen.py 50MB -i -f dp -s samples/ -o output_decrees/
28
32
2022-12-04 20:38:42.542 | WARNING | __main__:main:169 - Generation is started...
29
33
2022-12-04 20:39:15.208 | WARNING | __main__:generate:136 - Approximate generation time: 1.13 min.
30
34
2022-12-04 20:39:52.709 | WARNING | __main__:generate:124 - Size of output_decrees/ dir: 53422132 bytes
31
35
2022-12-04 20:39:52.709 | WARNING | __main__:main:171 - Generation is finished!
32
36
```
33
37
34
- ## Samples description
38
+
39
+
40
+ ## Samples description/Описание образцов
41
+
35
42
![ 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