[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