From b1b484a0b93a5651da7d1ca20e77f70089b215bb Mon Sep 17 00:00:00 2001 From: Simeon Simeonov Date: Mon, 12 Nov 2012 15:09:47 +0100 Subject: bpynotify - started --- .gitignore | 2 ++ bpynotify_orm.py | 32 +++++++++++++++++++++++++++ socket_server.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 .gitignore create mode 100644 bpynotify_orm.py create mode 100755 socket_server.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..184ce68 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyc +*.db \ No newline at end of file diff --git a/bpynotify_orm.py b/bpynotify_orm.py new file mode 100644 index 0000000..0540d0a --- /dev/null +++ b/bpynotify_orm.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +import datetime + +from sqlalchemy import schema, types +from sqlalchemy.orm import mapper + +metadata = schema.MetaData() + +notification_entry_table = schema.Table('notification_entries', metadata, + schema.Column('id', types.Integer, primary_key=True), + schema.Column('timestamp', types.DateTime), + schema.Column('message', types.Unicode(), default = u'Empty message'), + schema.Column('viewed', types.Boolean, default=False) + ) + + + +class NotificationEntry(object): + + def __init__(self, message): + + self.timestamp = datetime.datetime.now() + self.message = message + + + def __repr__(self): + + return message + + +mapper(NotificationEntry, notification_entry_table) diff --git a/socket_server.py b/socket_server.py new file mode 100755 index 0000000..7297d24 --- /dev/null +++ b/socket_server.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import SocketServer +import sys + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from bpynotify_orm import NotificationEntry + + +class CustomSocketServer(SocketServer.TCPServer): + + def __init__(self, server_address, RequestHandlerClass, session): + print "Done" + SocketServer.TCPServer.__init__(self, + server_address, + RequestHandlerClass) + self.session = session + + +class MyTCPHandler(SocketServer.StreamRequestHandler): + """ + The RequestHandler class for our server. + + It is instantiated once per connection to the server, and must + override the handle() method to implement communication to the + client. + """ + + def handle(self): + # self.request is the TCP socket connected to the client + ##self.data = self.request.recv(1024).strip() + ##print "{} wrote:".format(self.client_address[0]) + ##print self.data + + self.data = self.rfile.readline().strip() + + entry = NotificationEntry(unicode(self.data)) + self.server.session.add(entry) + self.server.session.commit() + + +def main(): + + HOST, PORT = "localhost", 9999 + + try: + engine = create_engine('sqlite:///notifications.db') + Session = sessionmaker(bind=engine) # bound session + session = Session() + + server = CustomSocketServer((HOST, PORT), MyTCPHandler, session) + # Activate the server; this will keep running until you + # interrupt the program with Ctrl-C + server.serve_forever() + + except Exception as e: + sys.stderr.write("Server error: {0}".format(e)) + sys.exit(1) + + sys.exit(0) + + +if __name__ == "__main__": + main() -- cgit v1.3