[Gelistirici] [RFC] comar.Link()

Bahadır Kandemir bahadir at pardus.org.tr
25 Eki 2008 Cmt 01:53:11 EEST


Selamlar,

COMAR 1.0'da kullandığımız bir API vardı hatırlarsanız. 2.0'da DBus'a 
geçtiğimizde, neden hatırlamıyorum, comar-api modülünü DBus uyumlu hale 
getirmek yerine tüm işleri Python-DBus modülüne bırakmıştım, hata 
yapmışım.

Manager geliştiricileri ve kodlara şöyle bir göz atanlar bilir, aslında 
comar-api'nin yapması gereken işi yapan iğrenç bir handler.py var. 3.0'da 
niyetim, comar-api'yi DBus uyumlu hale getirmek ve eskisi gibi temiz 
kodlar yazabilmek. Ne varsa eskilerde var...

  import comar
  link = comar.Link()
  link.System.Service["cups"].start()

Sıkıntı, asenkron çağrılarda başlıyor. DBus bize asenkron çağrılar yapma 
fırsatı tanıyor, bu sayede COMAR'dan cevap gelene kadar beklememiz 
gerekmiyor. Çağrının asenkron olması gerektiğini bir şekilde belirtmemiz 
gerekiyor.

Python-DBus'daki gibi yaparsak, şöyle bir kod çıkıyor ortaya:

  def hede(package, arg1, arg2, ...):
    ...
  def hodo(package, error):
    ...
  link.System.Service["cups"].start(reply_handler=hede, error_handler=hodo)

Cevap geldiğinde, ya da hata oluştuğunda çağrılacak fonksiyonlar 
tanımlıyoruz bu şekilde. Fonksiyonlara verilen ilk argümanın paket adı 
olması gerekiyor. Paket adı belirtilmeden (link.System.Service.start(...) 
gibi) yapılan çağrılarda, dönen cevabın hangi pakete ait olduğunu bilmemiz 
gerekeceği için.

Ya da dönen cevap umursanmıyorsa:

  link.System.Service["cups"].start(ignore_reply=True)

kullanılabiliyor.

2.0 uyumlu Manager'lardaki handler.py'ye kıyasla çok daha temiz olduğu 
aşikâr. Yine de daha temiz/okunabilir bir kullanım bulunabilir belki.

Bahadır
-------------- sonraki bölüm --------------
A non-text attachment was scrubbed...
Name: kullanılamıyor
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://liste.pardus.org.tr/gelistirici/attachments/20081025/ebd72d5d/attachment-0002.pgp>


Gelistirici mesaj listesiyle ilgili daha fazla bilgi