fatiherikli

Bir önceki blog post'umda bahsettiğim Lettuce ve Gherkin dilini kullandıktan sonra böyle bir şey yapmaya karar verdim. Lettuce dışında test verisi olarak metin halinde tablolar kullanmak testleri daha anlaşabilir ve değistirebilir hale getirebiliyor.

Tablo yapısındaki metinlerden kastettiğim şöyle bir şey:

--------------------------------------
| city         | country  | continent |
---------------------------------------
| Istanbul     | Turkey   | Asia      |
| Ankara       | Turkey   | Asia      |
| Dusseldorf   | Germany  | Europe    |
---------------------------------------

Bu tabloyu tabularize.py ile aşağıdaki gibi python dictionary tipine çevirebiliyoruz.

import tabularize

cities = tabularize.loads("""
Buraya istediğimiz şeyi yazabiliriz.
--------------------------------------
| city         | country  | continent |
---------------------------------------
| Istanbul     | Turkey   | Asia      |
| Ankara       | Turkey   | Asia      |
| Dusseldorf   | Germany  | Europe    |
---------------------------------------
Tabularize.py sadece pipe (|) ile başlayan satırları okuyor.
""")

# artık `cities` aşağıdaki gibi:
# [
#     {
#         "city": "Istanbul", 
#         "continent": "Asia", 
#         "country": "Turkey"
#     }, 
#     {
#         "city": "Ankara", 
#         "continent": "Asia", 
#         "country": "Turkey"
#     }, 
#     {
#         "city": "Dusseldorf", 
#         "continent": "Europe", 
#         "country": "Germany"
#     }
# ]

Modül load, loads, ve from_docstring metodlarından oluşuyor. Metod isimlerinden de anlaşıldığı gibi json ya da yaml kütüphaneleri gibi bir yapısı var. loads ile string, load ile de file objeleri gibi içinde read metodu olan yapılardan parse edebiliyorsunuz. Ayrıca from_docstring ile herhangi bir objenin docstring'indeki verileri okumak mümkün.

load ve loads metodları return_type adında bir parametre alıyor. Bu parametrenin varsayılan değeri dict. Bu parametreye tuple, list ya da herhangi bir tipi verebilirsiniz.

cities = tabularize.loads("""
--------------------------------------
| city         | country  | continent |
---------------------------------------
| Istanbul     | Turkey   | Asia      |
| Ankara       | Turkey   | Asia      |
| Dusseldorf   | Germany  | Europe    |
---------------------------------------
""", return_type=tuple)

for city, country, continent in cities:
    print city, country, continent

Kodları github'a koydum. Ayrıca repo içindeki testlere bakarak örnekleri inceleyebilirsiniz.

https://github.com/fatiherikli/tabularize.py

comments powered by Disqus