Commits

Markus Zapke-Gründemann committed 4c2a294

Initial commit.

Comments (0)

Files changed (1)

+Dedun Vortrag
+*************
+
+**Leipzig Python User Group - 13.12.2011**
+
+Übersicht
+=========
+
+- Was ist die API Leipzig?
+- Warum ein Python Client?
+- Releases
+
+    - 0.1.0
+    - 0.2.4
+    - 0.2.5
+    - 0.3.0
+    - 0.3.1
+    - 0.3.2
+
+- Entwicklungswerkzeuge
+
+    - virtualenv & virtualenvwrapper
+    - pylint & pep8
+    - versiontools
+
+- Python 3
+
+Was ist die API Leipzig?
+========================
+
+- RESTful API für Open Data der Stadt Leipzig
+- http://www.apileipzig.de/
+- Datenquellen: http://www.apileipzig.de/wiki/show/Ressourcen
+
+Warum ein Python Client?
+========================
+
+- Auf Dauer ist es umständlich, die Daten manuell abzufragen
+- Man kann HTTP Requests sparen
+- Ein Client kann mehr Funktionen zur Verarbeitung der Daten bieten
+- Ergebis: http://pypi.python.org/pypi/dedun/
+- Namesherkunft
+
+    Dedun war ein nubischer Gott, der im Altertum in Form eines Löwen verehrt
+    wurde. Der Löwe ist auch Teil des Leipziger Wappens.
+
+Releases
+========
+
+0.1.0
+-----
+
+====    =========   =========================
+SLOC    Directory   SLOC-by-Language (Sorted)
+====    =========   =========================
+94      top_dir         python=94
+====    =========   =========================
+
+- Ein Python Module
+- Drei Klassen: ``Resource``, ``Results``, ``DedunError``
+    - ``path`` muss an der ``Resource`` Klasse manuell geändert werden (Methode ``change_path``)
+- JSON wird zu Dictionaries umgewandelt
+- ``Results`` Klasse
+
+    - Kann einzelne Elemente oder Slices zurück geben
+    - Hat einen Iterator
+
+::
+
+    >>> from apileipzig import key
+    >>> from dedun import Resource
+    >>> r = Resource(api_key=key, path='mediahandbook/companies')
+    >>> companies = r.all()
+    >>> companies.count()
+    1042
+    >>> for c in companies[:5]:
+    ...     print c['name']
+    ...
+    Leipziger Universitätsverlag GmbH und Akademische Verlagsanstalt AVA
+    Sittauer Mediendesign
+    Realdesign GmbH
+    Frauenkultur e.V. Leipzig
+    Jürgen Auge Atelier für Gebrauchs- und Werbegrafik
+    >>> r.get(id=1)
+    {u'phone_primary': u'+49 341 9900440', u'people': [1, 2], u'past_customers': None, u'updated_at': u'2011-03-14T17:47:47+01:00', u'street': u'Oststra\xdfe', u'postcode': u'04317', u'id': 1, u'city': u'Leipzig', u'email_secondary': None, u'fax_secondary': None, u'mobile_secondary': None, u'housenumber_additional': None, u'housenumber': 41, u'fax_primary': None, u'resources': None, u'main_activity': None, u'old_id': 3, u'sub_branches': [23], u'sub_market_id': 3, u'mobile_primary': None, u'url_primary': u'http://www.univerlag-leipzig.de', u'url_secondary': u'http://www.univerlag-leipzig.de', u'name': u'Leipziger Universit\xe4tsverlag GmbH und Akademische Verlagsanstalt AVA', u'created_at': u'2011-02-23T03:06:15+01:00', u'phone_secondary': None, u'products': None, u'email_primary': u'info@univerlag-leipzig.de', u'main_branch_id': 17}
+    >>> r.get(id=232323)
+    Traceback (most recent call last):
+      File "<stdin>", line 1, in <module>
+      File "dedun.py", line 72, in get
+        item = self.search(**kwargs)[0]
+      File "dedun.py", line 38, in __getitem__
+        raise DedunError('Item not found.')
+    dedun.DedunError: Item not found.
+
+0.2.4
+-----
+
+====    =========   =========================
+SLOC    Directory   SLOC-by-Language (Sorted)
+====    =========   =========================
+170     top_dir         python=170
+====    =========   =========================
+
+- Immer noch ein Python Module
+- Einführung von Resource und Result Klassen für jede Ressource
+
+    - ``ResourceBase`` Klasse (ersetzt ``Resource``) hat ein ``debug`` Argument bekommen, ``path`` kann nicht mehr geändert werden
+    - ``Results`` Klasse hat ein zweites Argument ``resource`` und die Factory Methode ``_get_result_class`` bekommen
+    - ``ResultBase`` wird von der Factory zum dynamischen Erzeugen der Result Klassen genutzt
+
+        - Dadurch kann jetzt auf die Attribute eines Datensatzes über Attribute der Klasse zugegriffen werden
+- Neue Exceptions: ``ObjectNotFound``, ``ImproperlyConfigured`` und ``MultipleResults``
+
+::
+
+    >>> from apileipzig import key
+    >>> from dedun import MediahandbookCompanies
+    >>> r = MediahandbookCompanies(api_key=key)
+    >>> companies = r.all()
+    >>> for c in companies[:5]:
+    ...     print c.name
+    ...
+    Leipziger Universitätsverlag GmbH und Akademische Verlagsanstalt AVA
+    Sittauer Mediendesign
+    Realdesign GmbH
+    Frauenkultur e.V. Leipzig
+    Jürgen Auge Atelier für Gebrauchs- und Werbegrafik
+    >>> r.get(id=1)
+    MediahandbookCompaniesResult: Leipziger Universitätsverlag GmbH und Akademische Verlagsanstalt AVA
+    >>> type(companies[0])
+    <class 'dedun.MediahandbookCompaniesResult'>
+    >>> r = MediahandbookCompanies(api_key=key, path='mediahandbook/foo')
+    Traceback (most recent call last):
+      File "<stdin>", line 1, in <module>
+      File "dedun.py", line 141, in __init__
+        self.__class__.__name__)
+    dedun.ImproperlyConfigured: Don't specify a path when using MediahandbookCompanies.
+
+0.2.5
+-----
+
+====    =========   =========================
+SLOC    Directory   SLOC-by-Language (Sorted)
+====    =========   =========================
+184     top_dir         python=184
+====    =========   =========================
+
+- Die Klasse ``Results`` bekommt zwei neue Methoden: ``order_by`` und ``reverse``
+    - Leider funktionieren die Methoden nicht wie gewünscht, was vor allem an den fehlenden Tests liegt
+
+
+0.3.0
+-----
+
+====    =========   =========================
+SLOC    Directory   SLOC-by-Language (Sorted)
+====    =========   =========================
+207     tests           python=207
+170     dedun           python=170
+42      top_dir         python=42
+====    =========   =========================
+
+- Umwandlung vom Module in ein Package
+
+::
+
+    .
+    ├── CHANGELOG.rst
+    ├── LICENSE
+    ├── MANIFEST.in
+    ├── README.rst
+    ├── dedun
+    │   ├── __init__.py
+    │   ├── exceptions.py
+    │   ├── resources.py
+    │   ├── results.py
+    │   └── settings.py
+    ├── requirements.txt
+    ├── runtests.py
+    ├── setup.cfg
+    ├── setup.py
+    └── tests
+        ├── __init__.py
+        ├── conftest.py
+        ├── mediahandbook_companies.json
+        ├── mediahandbook_company.json
+        ├── test_resources.py
+        ├── test_results.py
+        └── utils.py
+
+- Neue Methode ``ResultBase.get_json``
+- Tests mit py.test_
+
+    - Nutzung von der py.test Plugins pytest-cov_ und pytest-localserver_
+    - Dadurch war es möglich, ``order_by`` und ``reverse`` korrekt zu implementieren
+    - Vorteile von py.test
+
+        - Sehr gute, ausführliche Dokumentation
+        - Test Suite muss keine besonderen Vorraussetzungen erfüllen
+
+            - In ``setup.cfg`` kann man definieren, welche Verzeichnisse durchsucht werden
+
+        - Man kann ausschliesslich mit dem ``assert`` Statement arbeiten (mit Introspection)
+        - Dependency injection mit Hilfe von Funktionsargumenten
+        - Markieren von Tests möglich
+        - PDB kann bei fehlgeschlagenen Tests aufgerufen werden (``py.test -x --pdb``)
+        - Man kann ein Skript zum ausführen der Tests ohne py.test Installation erstellen (``python setup.py test`` oder ``python runtests.py``)
+        - Eigene Kommandozeilenoptionen möglich (``py.test --no-localserver``)
+
+..  _py.test: http://pytest.org/
+..  _pytest-cov: http://pypi.python.org/pypi/pytest-cov
+..  _pytest-localserver: http://pypi.python.org/pypi/pytest-localserver
+
+0.3.1
+-----
+
+- versiontools_ eingeführt
+
+..  _versiontools: http://packages.python.org/versiontools/
+
+0.3.2
+-----
+
+- Deprecated ``__getslice__`` Methode in ``dedun.results`` entfernt
+- Kommandos zum Ausführen von coverage (``python setup.py coverage``) and pylint (``python setup.py pylint``) in setup.py hinzugefügt
+
+Entwicklungswerkzeuge
+=====================
+
+virtualenv & virtualenvwrapper
+------------------------------
+
+- virtualenv_ und virtualenvwrapper_ helfen bei Entwicklung und Testen
+
+..  _virtualenv: http://www.virtualenv.org/
+..  _virtualenvwrapper: http://www.doughellmann.com/projects/virtualenvwrapper/
+
+pylint & pep8
+-------------
+
+- pylint_ und pep8_ helfen bei der Analyse des Codes
+
+..  _pylint: http://pypi.python.org/pypi/pylint
+..  _pep8: http://pypi.python.org/pypi/pep8
+
+Python 3
+========
+
+- In einem neuen Branch begonnen, Python 3 Unterstützung umzusetzen
+- Problem können anderen Packages sein, die noch nicht Python 3 kompatibel sein (z.B. anyjson)
+- Unterstützung für Python 3 führt dazu, dass man den Code aufräumt und verbessert
+- Website mit vielen Informationen: http://getpython3.com/