pythome.com
Python hatalarını, açıklamalarını ve çözüm yollarını bir araya getiren pythome.com sitesinin kaynak kodu.
pythome.com, Python ile çalışırken karşılaşılan hata mesajlarını tek bir yerde toplamak için 2016 yılının Nisan ayında kurduğum bir siteydi. Bu depo sitenin ilk sürümünün kaynak kodunu içeriyor. Bu sürümü Django ile, şablonlar için Jinja2 kullanarak yazdım; kayıtlar MySQL'de tutuluyor, sık açılan sayfalar memcached ile önbelleğe alınıyordu.
Amaç
Bir Python kütüphanesi hata verdiğinde ekranda gördüğümüz mesaj çoğu zaman kısa ve bağlamsızdır. Mesajı aratınca da genellikle o hatanın hangi modülden ve hangi dosyadan geldiğini gösteren bir sonuç çıkmaz. Ben bu işi tersinden yapmak istedim: hata mesajlarını doğrudan kütüphanelerin kaynak kodundan toplayıp her birine ayrı bir sayfa açmak. Böylece bir hata mesajını arayan kişi, mesajın hangi modülde, hangi dosyada ve hangi satırda üretildiğini görebilecek, aynı türdeki diğer hatalara da kolayca ulaşabilecekti.
Nasıl çalışır
Verinin kaynağı, sunucuda kurulu Python 2.7 kütüphaneleri. hatabul adlı görünüm, kütüphane klasöründe grep ile Error(" ifadesini içeren raise satırlarını arıyor. Mesaj birden fazla satıra bölünmüşse sed ile sonraki bir iki satırı da okuyup mesajı birleştiriyor. Her bulgudan hata türünü (örneğin TypeError ya da AssertionError), modül adını, dosya yolunu, satır numarasını ve mesajın kendisini ayırıp Hatalar tablosuna yazıyor. Mesajdan bir de slug üretiliyor; sayfa adresleri bu yüzden /modül/hata-türü/mesaj/ biçiminde.
Ana sayfa bütün kayıtları modüle, hata türüne ve satır numarasına göre sıralanmış olarak listeliyor. Her kayıt açılıp kapanan bir kutu içinde hata türünü, modülü ve mesajın tamamını gösteriyor. Sayfanın üstündeki arama kutusu jQuery Easy Autocomplete ile çalışıyor ve yazmaya başlar başlamaz eşleşen hata mesajlarını öneriyor. Adres satırından mesaja ya da hata türüne göre arama yapmak da mümkün. Detay sayfasında dosya yolu, satır numarası ve açıklama alanı yer alıyor; altında da aynı türden diğer hataların bağlantıları listeleniyor.
Öne çıkan özellikler
- Hata mesajları elle girilmedi; kurulu kütüphanelerin kaynak kodundan otomatik olarak çıkarıldı.
- Her hatanın modülü, dosya yolu ve satır numarası kayıtla birlikte saklanıyor.
- Aynı türdeki hatalar detay sayfasında birbirine bağlanıyor.
- Ana sayfa, arama sonuçları ve detay sayfaları memcached ile önbelleğe alınıyor.
robots.txtve 540 adres içeren birsitemap.xmlarama motorlarının sayfaları bulmasını kolaylaştırıyor.
Teknik altyapı
Proje Django 1.9 dönemine ait ve Python 2.7 ile çalışıyor. Şablon motoru olarak Django'nun kendi şablonları yerine Jinja2 kullandım; static ve url yardımcılarını Jinja2 ortamına kendim ekledim. Veritabanı sorgularını Django ORM yerine doğrudan MySQLdb ile yazdım. Arayüzde Bootstrap ve jQuery var. Geliştirme sırasında sorguları ve önbellek kullanımını izlemek için Django Debug Toolbar'ı açık tuttum.
Bugünden bakınca
Bu sürümde sorgular metin birleştirerek kuruluyordu. Birkaç gün sonra siteyi Flask ile yeniden yazarken sorguları parametreli hâle getirdim; o sürüm pythome.com_flask deposunda duruyor.
- Kategori
- Web siteleri
- Yıl
- 2016
Teknolojiler
- Python
- Django
- Jinja2
- MySQL
Bağlantılar
- GitHub https://github.com/muslu/pythome.com