Shanraq.org Shanraq.org
Финал: тексеру, жариялау және қайта орындай алу
IT

Python: деректен өз есебіңізге дейін 56-сабақ (барлығы 56)

Финал: тексеру, жариялау және қайта орындай алу

Python бастапқы курсының елу бесінші әрі соңғы сабағы. Барлық тексеруді бір шлюзге жинап, есептің өзгермейтін каталогын құрамыз, оны тек сәтті тексеруден кейін жариялап, дереккөз бен жинау уақытын оқырманға көрсетеміз.

Не құрастырдық

55 сабақта print пәрменінен нақты деректерді алатын, сақтайтын, есептейтін, график пен HTML жасайтын, кесте бойынша жұмыс істейтін және модель жауабына шек қоятын бағдарламаға жеттіңіз. Соңғы қадам жаңа кітапхана қоспайды. Ол нәтижені жартылай жариялауға жол бермейді.

Жариялау алдындағы бір шлюз

release.py міндетті тексерулерді орындап, алғашқы қатеде тоқтайды:

import subprocess
import sys

CHECKS = [
    [sys.executable, "-m", "pytest", "-q"],
    [sys.executable, "-m", "mypy", "--strict", "sholu", "main.py"],
    [sys.executable, "main.py", "--offline", "--dry-run"],
]

for command in CHECKS:
    print("+", " ".join(command), flush=True)
    subprocess.run(command, check=True)

print("READY")

check=True нөлден бөлек қайтару кодында үдерісті тоқтатады. Жасыл жазу үшін бұл қатені жұтып қоймаңыз. Жариялау тексеруіне желі қатыспайды: кештелген сурет нәтижені қайталатады, ал деректі жаңарту бөлек тексеріледі.

Жұмыс қалтасын емес, артефакт каталогын жариялаңыз

Алдымен уақытша каталогқа index.html, сурет, тексеруге арналған CSV және manifest.json жинаңыз. Манифестке UTC уақыты, дереккөз идентификаторлары және әр файлдың SHA-256 мәні кіреді. Барлығы өткен соң public каталогын жаңасымен атомарлы ауыстырыңыз.

Сонда оқырман жаңа HTML мен ескі суретті қатар көрмейді. Сыртқа жібермей тұрып жергілікті серверде ашыңыз:

python release.py
python -m http.server 8000 --directory public

http://localhost:8000 адресінде мобильді енді, тақырыпты, күнді, дереккөздерді, кестені, графикті және review күйіндегі себептік мәтіннің жоқтығын тексеріңіз.

Соңғы тексеру тізімі

  • жұмыс ағашында тек күтілген өзгеріс бар;
  • тесттер мен mypy таза ортада өтеді;
  • offline dry-run ештеңе жазбайды;
  • бос не толық емес есеп бұрынғысын алмастырмайды;
  • HTML ішінде құпия мен жеке жол жоқ;
  • күн, бірлік, кезең және дереккөз көрінеді;
  • пайдаланушы мәтіні экрандалған;
  • алдыңғы каталогтың сақтық көшірмесі немесе жылдам қайтару бар;
  • жарияланған URL 200 қайтарады және файлдар манифестке сәйкес;
  • журнал дерек нұсқасы мен жариялау нәтижесін сақтайды.

Жариялау — файл көшіру емес. Бұл күй ауысуы: тексерілген артефакт бұрынғысын толық алмастырады немесе ештеңе өзгермейді.

Сабақ картасы

Сабақ картасы: тексеру, артефакт, жариялау және бақылау

Тірек белгі: тексерулер → уақытша артефакт → атомарлы ауыстыру → HTTP тексеру → қайтару.

Өз сөзіңізбен айтыңыз

  1. Неге файлдарды public ішіне бір-бірден көшіруге болмайды?
  2. manifest.json нені сақтайды?
  3. Неге нақты URL арқылы smoke-test керек?
  4. Қайтару деген не?

Жаттығу

1. Болжаңыз. Бірінші пәрмен құласа, екіншісі орындала ма?

import subprocess
import sys

try:
    subprocess.run([sys.executable, "-c", "raise SystemExit(1)"], check=True)
    print("publish")
except subprocess.CalledProcessError:
    print("stopped")

2. Қауіпсіз іске қосу режимін толтырыңыз.

python main.py --offline ...

3. Түзетіңіз. Скрипт жаңа каталогты тексермей тұрып ескі public каталогын өшіреді.

Қорытынды тапсырма

Міндетті. Бір шлюзді іске қосыңыз, public каталогын және SHA-256 манифесін жасаңыз, жергілікті HTTP-сервер ашып, тізіммен тексеріңіз. Бір тексеруді әдейі құлатып, бұрынғы каталогтың сақталғанын растаңыз.

тексерулер: өтті
артефакт: толық
жариялау: дайын

Өз дерегіңізбен. Сводканы статикалық хостингке жариялап, URL, тексеру уақытын және қайтару тәсілін жазыңыз.

Қосымша. Шлюзді ең аз құқықтары бар CI-ға көшіріп, тек қорғалған тармақтан жариялаңыз.

Бұдан әрі

Бастапқы курс аяқталды. Келесі синтаксисті емес, міндетті таңдаңыз: деректер талдауын тереңдету, API құру, SQL оқу, машиналық оқыту инженериясы немесе ашық Python жобасына шағын түзету енгізу.

Сводканы портфолио ретінде сақтаңыз. Міндет, қайталанатын орнату, скриншот, дереккөз, шектеу және жұмыс істейтін сілтемесі бар README меңгерген тақырыптар тізімінен көбірек айтады.

Жауаптар

  1. Оқырман әртүрлі нұсқаның қоспасын алуы мүмкін; каталог тексерілген соң тұтас ауысады.
  2. Жинау уақытын, дереккөздерді және файл бақылау сомаларын.
  3. Жергілікті жинақ DNS, сервер, маршрут пен нақты жауапты тексермейді.
  4. Соңғы белгілі жұмыс істейтін артефактқа оралу.
stopped
  1. --dry-run жалаушасы.
command = "python main.py --offline --dry-run"
print(command)
python main.py --offline --dry-run
  1. Алдымен уақытша каталогты толық жинап, тексеріңіз; ескісін соңғы атомарлы әрекетпен ғана ауыстырыңыз.
states = ["build temporary", "verify", "replace public", "smoke test"]
print(" -> ".join(states))
build temporary -> verify -> replace public -> smoke test

Дереккөздер

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.