рдирд┐рд░рдВрддрд░ рдЕрдЬрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░реАрдХреНрд╖рдг

рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдПрдХ рдЖрд▓рд╕реА рдЬрд╛рдирд╡рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЙрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╕рдордп рд╕реЗ TDD рдЙрдард╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдирд┐рд░рдВрддрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдХрд╛рд░реНрдп рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЬрд░реВрд░реА рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯреАрдо рдореЗрдВ рдирдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП: рдмрдЪрд╛рдУ, рд╕реНрд╡рд┐рдЪ рдХрд░реЛ, $ nosetestsред рдлрд┐рд░, рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рдФрд░ рдореБрдЭреЗ рд╕рдм рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдбрд╛рд▓рдирд╛ рдкрдбрд╝рд╛:
pyflakes *.py
pep8 *.py
pylint *.py
nosetests


рд╣рд░ рдмрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛ рдмрд╣реБрдд рд╣реА рдЖрд▓рд╕реА рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрдиреЛрдЯрд┐рдлрд╝рд╛рдЗрд╡рд╛рдЗрдЯ рдЫреЛрдЯреЗ рд╢реЗрд▓ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡ рдХреЗ рдмрд╛рдж рдЯреЗрд╕реНрдЯ рдФрд░ рдЪреЗрдХ рдЪрд▓рд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
while true; do
inotifywait -e modify project/*.py -qq; clear
./do_tests
done


рдлрд┐рд░ рдореИрдВ рдХрдореЛрдмреЗрд╢ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдкреНрд░рд╕рдиреНрди рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЖрд░рд╛рдо рднреАред рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдЖрд▓рд╕реА рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧрд░реНрд╡ рднреА рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рдХреЛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреА рдПрдХ рдХрд╣рд╛рдиреА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП (рдЬреЛ рдмреЙрд╕ рдХреЗ рдЖрдиреЗ рдкрд░ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреВрдЫрддрд╛ рд╣реИ: "рдареАрдХ рд╣реИ, рдЖрдк рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдХреНрдпрд╛ рд░рд╣реЗ рд╣реИрдВ?") рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╢реЛрдзрди рдХреА рд╕рдлрд▓рддрд╛ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдЭреВрда рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдФрд░ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрди рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреЛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЯреВрдЯрд╛ рд╣реБрдЖ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реЗ рдкреБрд▓ рдХреЗ рджреМрд░рд╛рди рдХреНрд▓рд╕реНрдЯрд░рдлрд╝рдХ рдЕрдЪрд╛рдирдХ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдлрд┐рд░, рдмрд╣реБрдд рд╕рдордп рдореЗрдВ, kmmbvnr @ lj рдиреЗ рдПрдХ рдкреЗрдВрдЪрдХрд╕ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬреЗрдирдХрд┐рдиреНрд╕ (рдкреВрд░реНрд╡ рдореЗрдВ рд╣рдбрд╕рди) рдХреЗ рд╡рд┐рд╖рдп рдХреЗ рд╕рд╛рде django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдПрдХреАрдХрд░рдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЗрди рд╕рднреА рд╕реБрдВрджрд░рд┐рдпреЛрдВ, рд░реЗрдЦрд╛рдВрдХрди рдФрд░ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдпрд╣ рднреА рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдЦреБрдж рдЧрд╛рдПрдВ рдФрд░ рдмрдЬрд╛рдПрдВред рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ django-jenkins, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЬрдВрдЧ рдореЗрдВ рд╕рдиреНрдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдкреЛрд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ dzhanga рдореЗрдВ рдирд╣реАрдВ рдмрдврд╝реА рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рдмрдврд╝реЗрдЧреА - рдпрд╣ рдПрдХ рдмрд▓реНрдХрд┐ рддреБрдЪреНрдЫ WSGI- рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ, рдЬреЛ рд╕рдЪреНрдЪрд╛рдИ рддреЗрдЬреА рд╕реЗ рдмрдврд╝ рд░рд╣реА рд╣реИред рдореБрдЭреЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕рдм рдХреБрдЫ рдЙрдард╛рдирд╛ рдкрдбрд╝рд╛ред

рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдорд╛рд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реАрдзрд╛ рд╣реИ рдФрд░ рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдЪреНрдЫреА рдЦрдмрд░реЗрдВ рд╣реИрдВ:



рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ?

0) рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢рд▓рдЬрдо рд╕реЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╕рд┐рд╕реНрдЯрдо рдмрд╣реБрдд рд╣реА рдкрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдПрдбрд┐рдЯ рдФрд░ рдХрдорд┐рдЯ рд╡рд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рдФрд░ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИрдВред

1) рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрд╕реЗрдореНрдмрд▓ рдХрд░рдирд╛, рдорд╛рдиреЛ рдЗрд╕реЗ рдХреЙрдореНрдмреИрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛред рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЙрдбреНрдпреВрд▓ рдкрдВрдк рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рд╕рдмред рд╕рд┐рд╕реНрдЯрдо рдЦреБрдж рд╣реА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рдд рд╣реИ: рдлреНрд░рд╛рдИ, рдкрд╛рдпрдерди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЕрд▓рдЧрд╛рд╡, рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рдмрдХрд╡рд╛рд╕ред

2) рдЯреЗрд╕реНрдЯ рдЪрд▓рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░, рдХреЛрдб рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рддреБрд░рдВрдд рд╣реЛрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╡рд┐рдлрд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ рдХрд╡рд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рд╢реАрд░реНрд╖ рдкрд░ рд╣рд░рд╛ рдЧреНрд░рд╛рдл - рд╡рд╣рд╛рдВ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмреЙрдЯрд▓рдореЙрд╕реНрдЯ рдЧреНрд░рд╛рдл рдХрд╡рд░реЗрдЬ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдХрд╡рд░реЗрдЬ рдХреЛ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

3) рдПрдХ рдЧреБрдгрд╡рддреНрддрд╛ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ: pep8 рдФрд░ рдкрд╛рдЗрд▓рд┐рдВрдЯ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рджрд┐рдорд╛рдЧ рдХреЛ рджрдмрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрд╕реЗ рдХреЛрдб, рд╡реИрд░рд┐рдПрдмрд▓ рдирд╛рдореЛрдВ рдФрд░ рдЕрдиреНрдп рдореЗрдВ рдЖрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХреЗред рдПрдХ рд▓рд╛рд▓ рдЯреВрдЯреА рд╣реБрдИ рд░реЗрдЦрд╛ рдЬреЛ рдХрд┐рд╕реА рддрд░рд╣ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИ рдХрд┐ рдпрд╣ рдХрдЪрд░рд╛ рдкрд╣рд▓реЗ рд╣реА рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛ред

4) рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдЯреВрдЯреЗ рд╣реБрдП рдХреЛрдб рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдИрдореЗрд▓ рдФрд░ рдЬреИрдмрд░ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдФрд░ рдПрдордпреВрд╕реА) рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рдВрдЯрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рд▓реАрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛, рдЬрд┐рд╕реЗ рдПрдХ рд╕рдорд╛рди рд╢рд┐рдХрд╛рдпрдд рднреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдХреЛ рднреА рд╕реНрдкреЗрдирд┐рд╢ рдкреВрдЫрддрд╛рдЫ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ!

рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рде рдХрдИ рд▓реЛрдЧреЛрдВ рдХреА рджрд┐рдирдЪрд░реНрдпрд╛ рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрддреА рд╣реИред

рдореБрдЭреЗ рджреЛ!

рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣реА рдЬрд╛рд╡рд╛ / рдпреБрджреНрдз рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдЖрдкрдХреЛ рдХреБрдЫ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ JRE рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдореБрдлреНрдд рдореЗрдВ рдореИрдВрдиреЗ Diablo-1.6 рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ)ред рд╕рд╛рдЗрдЯ рдкрд░, рдЖрдк рдПрдХ рд▓рд┐рдВрдХ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдЗрд╕реЗ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╣ рдмрд╕ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: рдЬрд╛рд╡рд╛ -рдЬреЗрди рдЬреЗрдирдХрд┐рдВрд╕.рд╡рд░ред рдкреЛрд░реНрдЯ рдФрд░ рд╕рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдореИрдВ рдПрдХ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдФрд░ рдирдЧреНрдиреЗрдХреНрд╕ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ред рдореИрдВ рдЬрдбрд╝ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдлреНрд░рд╛рдП рдкрд░, рдЙрд╕рдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдореЗрдВ рд▓рдкреЗрдЯ рджрд┐рдпрд╛ред рддрдм рдпрд╣ рдХрд╛рдо рдЖрдпрд╛ред рдмрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ - рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХред

рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдЬреЗрдирдХреАрдВрд╕ рдореЗрдиреВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреА рдЬрд╛рддреА рд╣реИрдВред

рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ рдкреНрд▓рдЧ рд╣реИред рд╡реЗ рд╕реНрд╡рд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЦреБрдж рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдмрд╕ рдмрдХреНрд╕реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдмрд╛рдХреА, рдореИрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдиреЗрдлрд┐рдЧред

рдмрд┐рдирд╛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рдХреБрдЫ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдВрдЧреЗред

рд╕реЗрдЯрд┐рдВрдЧреНрд╕

рдЖрдкрдХреЛ рддреБрд░рдВрдд рд╕реБрд░рдХреНрд╖рд╛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рдЖрдзрд╛рд░рд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд░рдгрдиреАрддрд┐ рд▓реАред рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ - рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдиреНрдпрдерд╛, рдлрд┐рд░ рдЖрдк рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рдХреМрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рдХрдорд┐рдЯ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╣реИрдВред

"рдХреНрд░реЙрд╕ рд╕рд╛рдЗрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдлреЙрд░рдЧрд┐рд░реА рдХрд╛рд░рдирд╛рдореЗ рд░реЛрдХреЗрдВ" рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛, рдореБрдЭреЗ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдерд╛ред

JDK рдФрд░ рдЕрдиреНрдп "рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди" рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╢реИрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ / usr / рд╕реНрдерд╛рдиреАрдп / bash рдпрд╛ / usr / bin / bash рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде, рдФрд░ рдлрд┐рд░ рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рд╣реЛрдЧрд╛ ... рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрдЬрдЧрд░ рдХреЛ рднреА рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдЬрд╛рдмрд░ рдФрд░ рдИрдореЗрд▓ рдЕрдиреБрднрд╛рдЧ рдЖрдкрдХреЛ рдХреИрдк рдФрд░ рдЙрдиреНрдирдд рдмрдЯрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдк

рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рдЬреЙрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреМрдХрд░реА рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдФрд░ "рдлреНрд░реА-рд╕реНрдЯрд╛рдЗрд▓" рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред рдлрд┐рд░ рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЖрдзрд╛ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдорд╛рд░рд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрд┐рд▓реНрдб рд╣реИрдВ рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╕рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП 10 рдЯреБрдХрдбрд╝реЗ / 30 рджрд┐рдиреЛрдВ рдХреА рднрдВрдбрд╛рд░рдг рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рдерд╛ред рдпрджрд┐ рд╡рд╣ - рдЖрдк рд╣рдореЗрд╢рд╛ рдмрд┐рд▓реНрдб рдирд╛рдЙ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдПрдХ рдирд┐рдЬреА рд╢рд▓рдЬрдо рдкрд░ рдХреЛрдб рдХреЛ рдмрд┐рдЯрдХреЙрдЗрди рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрд╡рддрдВрддреНрд░ рдФрд░ рдХрд╛рдлреА рдЪрд┐рддреНрд░рд┐рдд рд╣реИрдВред Git I рдирд╛рдкрд╕рдВрдж рдкреВрд░реЗ рд╕рд┐рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЬрдЧрд░ рдФрд░ рдЧрд┐рдердм рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдореБрдлреНрдд рдирд┐рдЬреА рд░реИрдк рдирд╣реАрдВ рд╣реИред

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпреВрдЖрд░рдПрд▓ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ (рд╣рд╛рдБ, рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЕрдкрдиреЗ рдЬреЗрдирдХреАрдВрд╕ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб-рдкреНрд░реЛрдЯреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛): [рдХреЛрдб] https: // рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: password@bitbucket.org/username-uniproxy [/ code]

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ - рдмрд┐рдЯрдмрдХреЗрдЯред

рдЯреНрд░рд┐рдЧрд░реНрд╕ рдмрдирд╛рдПрдБ - рдкреЛрд▓ рдПрд╕рд╕реАрдПрдоред рдХреНрд░реЛрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд╕реВрдЪреА: [рдХреЛрдб] * / 5 * * * * [/ рдХреЛрдб]
рд╢рд╛рдпрдж рдПрдХ рдЕрднреА рднреА рджреВрд░ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВред рдареАрдХ рд╣реИ, рдпрд╣ рд╣рд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдлрд┐рд░ рдЗрд╕ рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд╕рд╛рде рдбреНрд░реИрдЧрд┐рдВрдЧ рдХреЙрдиреНрдлрд┐рдЧ рд╣реЛ рдЬрд╛рдПрдЧрд╛ ... рдФрд░ рдмрд╛рд╕реНрдХреЗрдЯ рд╣рдореЗрд╢рд╛ рдПрдХ рдЬрдЧрд╣ рдкрд░ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рд╕реБрд▓рдн рд╣реИред

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХреЗ рдХрджрдо

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
.
buildenv.sh
pip-reqs.txt
pylint.rc
project/*.py
reports/*
venv/*

рдЖрдЦрд┐рд░реА рджреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВред рдореИрдВрдиреЗ рдореБрдЦреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдЧреАрдереВрдм рдкрд░ рд░рдЦрд╛ред

рд╕реНрдХреНрд░реИрдВрдХрд╛рд╕реНрдЯ рдореЗрдВ, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рдЪрд░рдг рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рддреАрди рддрд╛рд░реНрдХрд┐рдХ рд▓реЛрдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдирд┐рд░реНрдорд╛рдг, рдЬрд╛рдВрдЪ, рдкрд░реАрдХреНрд╖рдгред

рдкрд╣рд▓рд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: "./buildenv.sh" рд╡рд╣ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рд╡рд░реНрдЪреБрдЕрдирд╡ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЗрд╕реЗ рдХреЙрдкреА рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╢реНрд░рдо DRY рдирд╣реАрдВ рд╣реИред рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рдЦрдиреЗ рд╣реЛрдВрдЧреЗред

рджреВрд╕рд░рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ:
#!/usr/local/bin/bash
venv/bin/pep8 --repeat --ignore=E501,W391 project | perl -ple 's/: ([WE]\d+)/: [$1]/' > reports/pylint.report
venv/bin/pylint --rcfile pylint.rc project/*.py >> reports/pylint.report
echo "pylint complete"


рдкрд╣рд▓реА рдФрд░ рдЖрдЦрд┐рд░реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдкрд╛рдЗрд▓рд┐рдВрдЯ рдХреЛ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдкреВрд░реЗ рдХрджрдо рдХреЛ рдлрд┐рд╕рдбреНрдбреА рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ pylint рд╕рдмрд╕реЗ рдмреБрд░реЗ рд╢рд┐рдХреНрд╖рдХ рд╕реЗ рднреА рдмрджрддрд░ рд╣реИ, ALWAYS рдХреЛ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд┐рд▓реЗрдЧрд╛ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдХрд┐ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдореЗрд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рдереАрдВред pep8 pylint рдХреЛ рдкреВрд░рдХ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реИред рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЕрдХреНрд╖рдо рд╣реИрдВ (рдкрд╛рдЗрд▓рд┐рдВрдЯ рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рдЗрд╕реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реЗрдирд╡ рд╕реЗ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдЕрдЧрд░ рд╡рд╣рд╛рдБ рдХреБрдЫ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рдмрдбрд╝реА рд▓рд╛рд▓ рдЧреЗрдВрдж рд╢рд░реНрдо рдХреЗ рдмреЛрд░реНрдб рдкрд░ рд▓рдЯрдХ рдЬрд╛рдПрдЧреАред

рддреАрд╕рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╡рд░реЗрдЬ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ:
venv/bin/coverage run --include 'project/*.py' project/tests.py --with-xunit --xunit-file=reports/tests.xml --where=project
venv/bin/coverage xml -o reports/coverage.xml


рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд░рд╛рд╕реНрддреЛрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╡реЗ рднрдВрдбрд╛рд░ рдХреЗ рдореВрд▓ рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ, рддреЛ рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди рдХрд╡рд░реЗрдЬ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рд╕реНрд░реЛрдд рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ, рдзреВрдореНрд░рдкрд╛рди рдХрд░рдиреЗ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрднреА рднреА рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рд╣реИред

рд░рд┐рдкреЛрд░реНрдЯ

рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдм рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА рд╡рд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рд╣рдо рд╕реБрдВрджрд░ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкрд╣рд▓реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╣реЗрдЧрд╛ рдХрд┐ рдРрд╕реА рдХреЛрдИ рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рд╣рдо "рдкреНрд░рдХрд╛рд╢рд┐рдд JUnit рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рд░рд┐рдкреЛрд░реНрдЯ" рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ JUnit рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо nosetests ** / рд░рд┐рдкреЛрд░реНрдЯ / рдкрд░реАрдХреНрд╖рдг / xml, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рд░рд┐рдкреЛрд░реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╢рд▓рдЬрдо / рдиреМрдХрд░реА рдХреА рдЬрдбрд╝ рд╕реЗ" рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЕрдЧрд▓рд╛ рдЖрдЗрдЯрдо "рд░рд┐рдкреЛрд░реНрдЯ рдЙрд▓реНрд▓рдВрдШрди" рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ pylint рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо "XML рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдкреИрдЯрд░реНрди" рд╣реИ, рдФрд░ рдкрд╛рдЗрд▓рд┐рдВрдЯ рдХреЛрдИ рдЧреИрд░-xml рдирд╣реАрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ** / рд░рд┐рдкреЛрд░реНрдЯ / pylint.report, рдЬрд╣рд╛рдВ рд╡реЗ рд╣рд░ рд╕рдВрднрд╡ рддрд░реАрдХреЗ рд╕реЗ pep8 рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдореИрд▓рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдХреЛрдб рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ ред рдпрд╣ рд╕реБрдмрд╣ рдореЗрдВ рдХрд╛рдо рдкрд░ рдЬрд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ: рдореИрдВ рдЖрдпрд╛ рдерд╛, рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреЗрдЦрд╛ рдФрд░ рд╕рд╣реА рдХрд░рддреЗ рд╣реБрдП, рднрд▓реЗ рд╣реА рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд▓ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдерд╛ред

рдЦреИрд░, рдЖрдЦрд┐рд░реАред "** / рд░рд┐рдкреЛрд░реНрдЯ / рдХрд╡рд░реЗрдЬ / xml" рдореЗрдВ рдХреЛрдмреЗрдЯреБрд░рд╛ рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВред рдореБрдЭреЗ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдмрд░реНрдЯрд╛ рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╛рдпрдерди рдХрд╡рд░реЗрдЬ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реИред

рдкрд╛рдЗрд▓рд┐рдВрдЯ рдФрд░ рдХрд╡рд░реЗрдЬ рдХреЗ рд╕рд╛рде, рдЖрдк "рдореМрд╕рдо" рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдордЧреНрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдлрд┐рдЯ рд╣реЛрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред

рдХреЛрдбрд░ рдПрдХ рдЕрднрд┐рдорд╛рдиреА рдкрдХреНрд╖реА рд╣реИ - рдХрд┐рдХ рдордд рдХрд░реЛ, рдЙрдбрд╝ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛

рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдИрдореЗрд▓ рдФрд░ рдЬреИрдмрд░ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрдирд╛рдПрдВ рд╣реИрдВ, рдЖрдк рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдПрдХреАрдХрд░рдг рд╕рд░реНрд╡рд░ рдХреЗ рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд░реНрд╡рд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдЬрд╛рдиреЗ рджреЛ рдФрд░ рд▓рд╣рд░рд╛рдПрдВрдЧреЗ

рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЖрдк рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдб рдирд╛рдЙ рдмрдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рддреЛ рдХрдорд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рд╢рд▓рдЬрдо рдореЗрдВ рдбрд╛рд▓реЗрдВред рд╕рд╛рдЗрдбрдмрд╛рд░ рдХреЗ рдиреАрдЪреЗ, рдмрд┐рд▓реНрдб рд╣рд┐рд╕реНрдЯреНрд░реА рдореЗрдВ, рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдФрд░ рдПрдХ рдкреНрд░рдЧрддрд┐ рд╕реНрд▓рд╛рдЗрдбрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЖрдк рд╡рд░реНрддрдорд╛рди рдмрд┐рд▓реНрдб рдХреЗ "рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ" рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЗрд╡ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рд╕рдм рдХреБрдЫ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА, рдЬрд┐рд╕ рдкрд░ рдЖрдк рдЪрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдХреНрдпрд╛ рд╣реИред

рдмреЛрдирд╕!

рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд╡реЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рднреА рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рдкрд┐рдкреА рдХреЗ рд╕рд╛рде рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдпрд╛рддрд╛рдпрд╛рдд рд╣реИред рдереЛрдбрд╝реА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ pypi.python.org/simple рдХреЗ рддрд╣рдд рдПрдХ рдХреИрд╢рд┐рдВрдЧ рдкреНрд░реЙрдХреНрд╕реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирдХрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ pypi рдХрд▓реЗрдХреНрдЯрд┐рд╡ рдореЗрдВ рдкрд╛рдпрд╛ред рдпрд╣ `eggproxy_run` рдХреА рддрд░рд╣ рд╣реА рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреА рдХреЛрдИ рд╕рд╣рд╛рдпрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рдм рдХреБрдЫ / var / www рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд╛рдЗрдЯ рдкрд░ рдЗрд╕рдХреЗ рдбреЙрдХ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрде рдФрд░ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдПред рдпрд╣ рднреА рдзреНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЬреЗрдирдХрд┐рдВрд╕ рдХреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреА рдмрд╛рд╣реЛрдВ рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рджред

buildenv.sh рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ / рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╣реИ, рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред

рдХреНрд░реЗрдбрд┐рдЯ

kmmbvnr @ lj: рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ ред рдЬреЗрдирдХрд┐рдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, django-any рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА dzhangists рдкрдврд╝реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╣рдбрд╕рди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЬрдЧрд░ рд╕реАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ , рдЕрднреА рднреА рд╕рд╣реА рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдкреЛрд╕реНрдЯ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЗрд░рд╛ рдпрд╣ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, WSGI рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдЬреЛ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрд╡рд╛рд╕реАрд░ рдХреЗ рдмрд┐рдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ wsgi рдХрдВрдЯреЗрдирд░реЛрдВ рдФрд░ рдореИрдиреБрдЕрд▓ рдХрд╛рдо рдХреЗ рдмрд┐рдирд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In114745/


All Articles