zum weiterlesen: heise meldung zu schwachen schluesseln unter debian und co
Archive for the 'Linux' Category
Zur Zeit mache ich beim ZID mein Praxissemester, ich programmiere für uns den Python Computer Room Manager (pycrman). Dieses Projekt ist in Python geschrieben und benutzt verschiedene Python Erweiterung. Zur einer Erweiterung will ich hiermit ein bissel was schreiben
Elixir
Elixir ist “dünner” Wrapper für die SQLAlchemy Library. Beide zusammen vereinfachen den Umgang mit einer Datenbank in Python um ein vielfaches.
Hier ein kleines Beispiel mit 2 Tabellen:
# import elixir stuff from elixir import * # setup db connection metadata.bind = "sqlite:///movies.sqlite" metadata.bind.echo = True # first table class Device(Entity): """representation of a device """ using_options(tablename='device', inheritance='multi') id = Field(Integer, primary_key=True) name = Field(String(127), required=True, unique=True) domain = Field(String(255), required=True) interfaces = OneToMany('Interface') def __repr__(self): return 'Device %s' % (self.name) # second table class Interface(Entity): """network interfaces """ using_options(tablename='interface') id = Field(Integer, primary_key=True) name = Field(String(16), required=True) ip = Field(String(38), required=True, unique=True) mac = Field(String(17), unique=True) device = ManyToOne('Device') def __repr__(self): return '<Interface: %s ip: %s mac: %s>' % ( self.name, self.ip, self.mac) setup_all() drop_all() create_all()
und schon kann mal auf einfache und sehr elegante Weise diese 2 Tabellen benutzen:
# create new device object device = Device(name="foobar") device.domain = "test.localdomain" # create new interface object interface = Interface(name="eth0", ip="1.1.1.1") # add interface object to device object device.interfaces = [interface] # store objects in db session.flush([device, interface]) # query device = Device.get_by(name="foobar") print device
Ein schönes Beispiel gibt es auch im Elixir Tutorial.
Noch ein kleiner Beitrag zu den elixir/sqlalchemy sessions. In der Standard Einstellung sind die Elixir sessions sogenannte “scoped_session”, d.h. das jeder Thread in einer threaded Umgebung seine eigene Elixir session hat. Das hat zur folge, das wenn ein Thread ein Objekt anlegt bzw. verändert, ein anderer Thread das nicht unbedingt mit bekommt, da Elixir/SQLAlchemy die Query Resultate cached. Am besten geht man damit um das man den Cache ausschaltet:
import elixir elixir.options_defaults['mapper_options'] = dict(always_refresh=True)
oder bei einer Query populate_existing() benutzt.
posted with Vim
Ich habe gerade vimpress installiert. Mit diesem kleinen feinen vim plugin kann man aus dem vim heraus wordpress blog eintraege erstellen, speichern, listen und sogar wieder bearbeiten.
die kommandos sind folgende 4:
- :BlogList Lists all articles in the blog
- :BlogNew Opens page to write new article
- :BlogOpen id Opens the article id for edition
- :BlogSend Saves the article to the blog
Vielleicht schaffe ich es damit oefters ein posting zu machen
