chgksuite 0.26.0b9__tar.gz → 0.26.0b10__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.
Files changed (67) hide show
  1. {chgksuite-0.26.0b9/chgksuite.egg-info → chgksuite-0.26.0b10}/PKG-INFO +1 -1
  2. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/cli.py +72 -31
  3. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/pptx.py +2 -4
  4. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/parser.py +33 -6
  5. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/regexes_ru.json +1 -1
  6. chgksuite-0.26.0b10/chgksuite/version.py +1 -0
  7. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10/chgksuite.egg-info}/PKG-INFO +1 -1
  8. chgksuite-0.26.0b9/chgksuite/version.py +0 -1
  9. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/LICENSE +0 -0
  10. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/MANIFEST.in +0 -0
  11. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/README.md +0 -0
  12. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/__init__.py +0 -0
  13. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/__main__.py +0 -0
  14. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/common.py +0 -0
  15. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/__init__.py +0 -0
  16. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/chgksuite_parser.py +0 -0
  17. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/composer_common.py +0 -0
  18. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/db.py +0 -0
  19. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/docx.py +0 -0
  20. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/latex.py +0 -0
  21. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/lj.py +0 -0
  22. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/openquiz.py +0 -0
  23. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/reddit.py +0 -0
  24. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/stats.py +0 -0
  25. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/telegram.py +0 -0
  26. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/telegram_bot.py +0 -0
  27. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/composer/telegram_parser.py +0 -0
  28. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/handouter/__init__.py +0 -0
  29. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/handouter/gen.py +0 -0
  30. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/handouter/installer.py +0 -0
  31. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/handouter/pack.py +0 -0
  32. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/handouter/runner.py +0 -0
  33. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/handouter/tex_internals.py +0 -0
  34. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/handouter/utils.py +0 -0
  35. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/parser_db.py +0 -0
  36. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/cheader.tex +0 -0
  37. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/fix-unnumbered-sections.sty +0 -0
  38. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_by.toml +0 -0
  39. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_by_tar.toml +0 -0
  40. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_en.toml +0 -0
  41. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_kz_cyr.toml +0 -0
  42. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_ru.toml +0 -0
  43. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_sr.toml +0 -0
  44. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_ua.toml +0 -0
  45. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_uz.toml +0 -0
  46. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/labels_uz_cyr.toml +0 -0
  47. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/pptx_config.toml +0 -0
  48. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/regexes_by.json +0 -0
  49. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/regexes_en.json +0 -0
  50. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/regexes_kz_cyr.json +0 -0
  51. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/regexes_sr.json +0 -0
  52. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/regexes_ua.json +0 -0
  53. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/regexes_uz_cyr.json +0 -0
  54. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/template.docx +0 -0
  55. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/template.pptx +0 -0
  56. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/resources/trello.json +0 -0
  57. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/trello.py +0 -0
  58. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/typotools.py +0 -0
  59. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite/vulture_whitelist.py +0 -0
  60. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite.egg-info/SOURCES.txt +0 -0
  61. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite.egg-info/dependency_links.txt +0 -0
  62. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite.egg-info/entry_points.txt +0 -0
  63. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite.egg-info/requires.txt +0 -0
  64. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/chgksuite.egg-info/top_level.txt +0 -0
  65. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/history.md +0 -0
  66. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/setup.cfg +0 -0
  67. {chgksuite-0.26.0b9 → chgksuite-0.26.0b10}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chgksuite
3
- Version: 0.26.0b9
3
+ Version: 0.26.0b10
4
4
  Summary: A package for chgk automation
5
5
  Home-page: https://gitlab.com/peczony/chgksuite
6
6
  Author: Alexander Pecheny
@@ -72,37 +72,6 @@ class ArgparseBuilder:
72
72
  advanced=True,
73
73
  argtype="filename",
74
74
  )
75
- self.add_argument(
76
- parser,
77
- "--add_ts",
78
- "-ts",
79
- choices=["on", "off"],
80
- default=default_overrides.get("add_ts") or "off",
81
- help="append timestamp to filenames",
82
- caption="Добавить временную отметку в имя файла",
83
- advanced=True,
84
- argtype="radiobutton",
85
- )
86
- self.add_argument(
87
- parser,
88
- "--replace_no_break_spaces",
89
- choices=["on", "off"],
90
- default=default_overrides.get("replace_no_break_spaces") or "on",
91
- help="add non-breaking spaces where applicable",
92
- caption="Добавить неразрывные пробелы",
93
- advanced=True,
94
- argtype="radiobutton",
95
- )
96
- self.add_argument(
97
- parser,
98
- "--replace_no_break_hyphens",
99
- choices=["on", "off"],
100
- default=default_overrides.get("replace_no_break_hyphens") or "on",
101
- help="add non-breaking hyphens where applicable",
102
- caption="Добавить неразрывные дефисы",
103
- advanced=True,
104
- argtype="radiobutton",
105
- )
106
75
  self.add_argument(
107
76
  parser,
108
77
  "-v",
@@ -298,6 +267,47 @@ class ArgparseBuilder:
298
267
  caption="Обработка строчек, состоящих из одного числа",
299
268
  argtype="radiobutton",
300
269
  )
270
+ self.add_argument(
271
+ cmdparse,
272
+ "--tour_numbers_as_words",
273
+ choices=["on", "off"],
274
+ default=default_overrides.get("tour_numbers_as_words") or "off",
275
+ help="force tour numbers as words",
276
+ caption="Номера туров словами",
277
+ advanced=True,
278
+ argtype="radiobutton",
279
+ )
280
+ self.add_argument(
281
+ cmdparse,
282
+ "--add_ts",
283
+ "-ts",
284
+ choices=["on", "off"],
285
+ default=default_overrides.get("add_ts") or "off",
286
+ help="append timestamp to filenames",
287
+ caption="Добавить временную отметку в имя файла",
288
+ advanced=True,
289
+ argtype="radiobutton",
290
+ )
291
+ self.add_argument(
292
+ cmdparse,
293
+ "--replace_no_break_spaces",
294
+ choices=["on", "off"],
295
+ default=default_overrides.get("replace_no_break_spaces") or "on",
296
+ help="add non-breaking spaces where applicable",
297
+ caption="Добавить неразрывные пробелы",
298
+ advanced=True,
299
+ argtype="radiobutton",
300
+ )
301
+ self.add_argument(
302
+ cmdparse,
303
+ "--replace_no_break_hyphens",
304
+ choices=["on", "off"],
305
+ default=default_overrides.get("replace_no_break_hyphens") or "on",
306
+ help="add non-breaking hyphens where applicable",
307
+ caption="Добавить неразрывные дефисы",
308
+ advanced=True,
309
+ argtype="radiobutton",
310
+ )
301
311
 
302
312
  cmdcompose = subparsers.add_parser("compose")
303
313
  self.add_argument(
@@ -334,6 +344,37 @@ class ArgparseBuilder:
334
344
  caption="Client ID для API Imgur",
335
345
  advanced=True,
336
346
  )
347
+ self.add_argument(
348
+ cmdcompose,
349
+ "--add_ts",
350
+ "-ts",
351
+ choices=["on", "off"],
352
+ default=default_overrides.get("add_ts") or "off",
353
+ help="append timestamp to filenames",
354
+ caption="Добавить временную отметку в имя файла",
355
+ advanced=True,
356
+ argtype="radiobutton",
357
+ )
358
+ self.add_argument(
359
+ cmdcompose,
360
+ "--replace_no_break_spaces",
361
+ choices=["on", "off"],
362
+ default=default_overrides.get("replace_no_break_spaces") or "on",
363
+ help="add non-breaking spaces where applicable",
364
+ caption="Добавить неразрывные пробелы",
365
+ advanced=True,
366
+ argtype="radiobutton",
367
+ )
368
+ self.add_argument(
369
+ cmdcompose,
370
+ "--replace_no_break_hyphens",
371
+ choices=["on", "off"],
372
+ default=default_overrides.get("replace_no_break_hyphens") or "on",
373
+ help="add non-breaking hyphens where applicable",
374
+ caption="Добавить неразрывные дефисы",
375
+ advanced=True,
376
+ argtype="radiobutton",
377
+ )
337
378
  cmdcompose_filetype = cmdcompose.add_subparsers(dest="filetype")
338
379
  cmdcompose_docx = cmdcompose_filetype.add_parser("docx")
339
380
  self.add_argument(
@@ -182,9 +182,8 @@ class PptxExporter(BaseExporter):
182
182
  r = self.add_run(
183
183
  p,
184
184
  self._replace_no_break(
185
- ("\n" if add_line_break else "")
185
+ ("\n\n" if add_line_break else "")
186
186
  + self.pptx_process_text(editor[0][1])
187
- + "\n"
188
187
  ),
189
188
  )
190
189
  add_line_break = True
@@ -193,9 +192,8 @@ class PptxExporter(BaseExporter):
193
192
  r = self.add_run(
194
193
  p,
195
194
  self._replace_no_break(
196
- ("\n" if add_line_break else "")
195
+ ("\n\n" if add_line_break else "")
197
196
  + self.pptx_process_text(element[1])
198
- + "\n"
199
197
  ),
200
198
  )
201
199
  add_line_break = True
@@ -91,6 +91,19 @@ class ChgkParser:
91
91
  BADNEXTFIELDS = set(["question", "answer"])
92
92
  RE_NUM = re.compile("^([0-9]+)\\.?$")
93
93
  RE_NUM_START = re.compile("^([0-9]+)\\.")
94
+ ZERO_PREFIXES = ("Нулевой вопрос", "Разминочный вопрос")
95
+ TOUR_NUMBERS_AS_WORDS = (
96
+ "Первый",
97
+ "Второй",
98
+ "Третий",
99
+ "Четвертый",
100
+ "Пятый",
101
+ "Шестой",
102
+ "Седьмой",
103
+ "Восьмой",
104
+ "Девятый",
105
+ "Десятый",
106
+ )
94
107
 
95
108
  def __init__(self, defaultauthor=None, args=None, logger=None):
96
109
  self.defaultauthor = defaultauthor
@@ -200,7 +213,7 @@ class ChgkParser:
200
213
  @classmethod
201
214
  def _replace(cls, obj, val, new_val):
202
215
  if isinstance(obj, str):
203
- return obj.replace(val, new_val)
216
+ return obj.replace(val, new_val).strip()
204
217
  elif isinstance(obj, list):
205
218
  for i, el in enumerate(obj):
206
219
  obj[i] = cls._replace(el, val, new_val)
@@ -214,6 +227,11 @@ class ChgkParser:
214
227
  for el in val:
215
228
  self._get_strings(el, list_)
216
229
 
230
+ def _get_strings_joined(self, val):
231
+ strings = []
232
+ self._get_strings(val, strings)
233
+ return "\n".join(strings)
234
+
217
235
  def _try_extract_field(self, question, k):
218
236
  regex = self.regexes[k]
219
237
  keys = sorted(question.keys())
@@ -255,14 +273,18 @@ class ChgkParser:
255
273
  and not question["number"].strip()
256
274
  ):
257
275
  question.pop("number")
276
+ question_str = self._get_strings_joined(question["question"])
277
+ for prefix in self.ZERO_PREFIXES:
278
+ if question_str.startswith(prefix):
279
+ question["question"] = self._replace(question["question"], prefix, "")
280
+ question["number"] = 0
281
+ question_str = self._get_strings_joined(question["question"])
258
282
  for k in ("zachet", "nezachet", "source", "comment", "author"):
259
283
  if k not in question:
260
284
  self._try_extract_field(question, k)
261
- strings = []
262
- self._get_strings(question["question"], strings)
263
- strings = "\n".join(strings)
285
+ question_str = self._get_strings_joined(question["question"])
264
286
  handout = self.labels["question_labels"]["handout"]
265
- srch = re.search(f"{handout}:([ \n]+)\\[", strings, flags=re.DOTALL)
287
+ srch = re.search(f"{handout}:([ \n]+)\\[", question_str, flags=re.DOTALL)
266
288
  if srch:
267
289
  question["question"] = self._replace(
268
290
  question["question"],
@@ -608,7 +630,8 @@ class ChgkParser:
608
630
 
609
631
  for element in self.structure:
610
632
  if (
611
- element[0] in set(["number", "tour", "tourrev", "question", "meta", "editor"])
633
+ element[0]
634
+ in set(["number", "tour", "tourrev", "question", "meta", "editor"])
612
635
  and "question" in current_question
613
636
  ):
614
637
  if self.defaultauthor and "author" not in current_question:
@@ -682,9 +705,13 @@ class ChgkParser:
682
705
  except ValueError:
683
706
  pass
684
707
 
708
+ tour_cnt = 0
685
709
  for i, element in enumerate(final_structure):
686
710
  if element[0] == "Question":
687
711
  self.postprocess_question(element[1])
712
+ elif element[0] == "tour" and self.args.tour_numbers_as_words == "on":
713
+ element[1] = f"{self.TOUR_NUMBERS_AS_WORDS[tour_cnt]} тур"
714
+ tour_cnt += 1
688
715
 
689
716
  if debug:
690
717
  with codecs.open("debug_final.json", "w", "utf8") as f:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "tour": "^(#\\s+)?Т[Уу][Рр]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
- "tourrev": "^([0-9IVXLCDM]+)\\s[Тт][Уу][Рр]([\\.:])?$",
3
+ "tourrev": "^([0-9IVXLCDM]+|[Пп][Ее][Рр][Вв][Ыы][Йй]|[Вв][Тт][Оо][Рр][Оо][Йй]|[Тт][Рр][Ее][Тт][Ии][Йй]|[Чч][Ее][Тт][Вв][Ее][Рр][Тт][Ыы][Йй]|[Пп][Яя][Тт][Ыы][Йй]|[Шш][Ее][Сс][Тт][Оо][Йй]|[Сс][Ее][Дд][Ьь][Мм][Оо][Йй]|[Вв][Оо][Сс][Ьь][Мм][Оо][Йй]|[Дд][Ее][Вв][Яя][Тт][Ыы][Йй]|[Дд][Ее][Сс][Яя][Тт][Ыы][Йй])\\s[Тт][Уу][Рр]([\\.:])?$",
4
4
  "question": "В[Оо][Пп][Рр][Оо][Сс]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
5
  "handout": "^Р[Аа][Зз][Дд][Аа][Тт][Оо][Чч][Нн][Ыы][Йй]\\s+[Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][\\.:]",
6
6
  "answer": "О[Тт][Вв][Ее][Тт][Ыы]?\\s?[№N]?([0-9]+)?\\s?[\\.:]",
@@ -0,0 +1 @@
1
+ __version__ = "0.26.0b10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chgksuite
3
- Version: 0.26.0b9
3
+ Version: 0.26.0b10
4
4
  Summary: A package for chgk automation
5
5
  Home-page: https://gitlab.com/peczony/chgksuite
6
6
  Author: Alexander Pecheny
@@ -1 +0,0 @@
1
- __version__ = "0.26.0b9"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes