Decorator pattern & Code Standarization & Error Code

Decorator Pattern

Decorator pattern merupakan salah satu jenis design pattern. Salah satu penerapan decorator pattern pada Django adalah pada saat melakukan patching dan mocking pada unit test. Berikut adalah contohnya.

class Application:
admin = Admin()
def get_application_admin():
results = admin.get_admin()
return result
class TestAdmin(TestCase):
    @patch('Admin.get_admin_name'):
def test_get_admin(fake_get_admin):
app = Application()
result = app.get_application_admin()
fake_get_admin.assert_called()

Pada code tersebut fungsi get_admin “dipalsukan” menggunakan patch sehingga dapat dilakukan assertion called.

Kita juga dapat memanfaatkan decorator sebagai semacam middleware. Misalnya seperti berikut.

mail_content = None
def set_content(content):
mail_content = content

@set_content(content='Pengajuan perlu revisi')
def send_revision_mail(cyd):
try:
faculty_name = cyd.faculty.name
faculty_email = str(Admin.objects.get(name = faculty_name).email)
djmail.send_mail('Update Status CYD', '', settings.EMAIL_HOST_USER, [faculty_email], fail_silently=False, html_message=mail_content)
except Exception:
return 0

Pada code tersebut dapat dilihat bahwa sebelum menjalankan fungsi untuk mengirimkan email revisi, konten email diset terlebih dahulu sesuai fungsinya.

Code Standarization

  • Naming

Untuk penamaan variabel, fungsi, dan kelas, kami menggunakan penamaan Bahasa Inggris. Kemudian, nama fungsi dan variabel mengikuti format konvensi dari Django yaitu semua nama menggunakan lowercase dimana tiap kata dipisahkan oleh underscore (snake_case). Untuk nama kelas kami menggunakan CamelCase. Selain itu, penamaan fungsi, variable, dan kelas juga mengikuti panduan Clean Code. Misalnya, nama harus representatif, tidak disingkat-singkat, dan nama fungsi pada umumnya merupakan kata kerja.

  • Indentation

Untuk indentation kami mengikuti format Python. Pada python, indentasi menentukan suatu sub-blok merupakan bagian dari blok yang mana. Suatu sub-blok memiliki indentasi +1 tab dibanding blok yang terkait denganya.

  • Import statement

Penulisan import statement mengikuti panduan dari python, dimana tiap baris hanya melakukan import sebanyak 1 modul (namun bisa banyak function/attribute).

Berikut adalah contoh penerapannya.

contoh penerapan code standarization untuk variable dan function (snake_case) serta indentation
contoh penerapan code standarization untuk class (CamelCase)
contoh penerapan code standarization untuk import statement

Penamaan File

Untuk penamaan file menggunakan format <role>_<verb>. Berikut adalah contohnya.

penamaan file

Error Code

Berikut adalah error code yang kami gunakan pada project PPL kami.

"""
Descriptive error codes, for code readability.
"""
HTTP_500_INTERNAL_SERVER_ERROR = 500
HTTP_501_NOT_IMPLEMENTED = 501
HTTP_502_BAD_GATEWAY = 502
HTTP_503_SERVICE_UNAVAILABLE = 503
HTTP_504_GATEWAY_TIMEOUT = 504
HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505
HTTP_507_INSUFFICIENT_STORAGE = 507
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511
LIPSY_551_APPLICATION_NOT_FOUND = 551
LIPSY_552_LEVEL_NOT_FOUND = 552
LIPSY_553_RULE_NOT_FOUND = 553
LIPSY_554_CONFIGUTAION_NOT_FOUND = 554
LIPSY_555_REGULATION_NOT_FOUND = 555
LIPSY_556_REGULATION_IS_APPLIED = 556
LIPSY_557_QUESTION_NOT_FOUND = 557
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.