diff --git a/radiopanik_tracks_db/__init__.py b/radiopanik_tracks_db/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2300ce7357020528d9d4ced201758436500f2abc --- /dev/null +++ b/radiopanik_tracks_db/__init__.py @@ -0,0 +1,18 @@ +from pyramid.config import Configurator +from sqlalchemy import engine_from_config + +from radiopanik_tracks_db.models import initialize_sql + +def main(global_config, **settings): + """ This function returns a Pyramid WSGI application. + """ + engine = engine_from_config(settings, 'sqlalchemy.') + initialize_sql(engine) + config = Configurator(settings=settings) + config.add_static_view('static', 'radiopanik_tracks_db:static') + config.add_route('home', '/') + config.add_view('radiopanik_tracks_db.views.my_view', + route_name='home', + renderer='templates/mytemplate.pt') + return config.make_wsgi_app() + diff --git a/radiopanik_tracks_db/models.py b/radiopanik_tracks_db/models.py new file mode 100644 index 0000000000000000000000000000000000000000..cffb8f5ef2326b788082feea20c61506882afa6b --- /dev/null +++ b/radiopanik_tracks_db/models.py @@ -0,0 +1,42 @@ +import transaction + +from sqlalchemy import Column +from sqlalchemy import Integer +from sqlalchemy import Unicode + +from sqlalchemy.exc import IntegrityError +from sqlalchemy.ext.declarative import declarative_base + +from sqlalchemy.orm import scoped_session +from sqlalchemy.orm import sessionmaker + +from zope.sqlalchemy import ZopeTransactionExtension + +DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) +Base = declarative_base() + +class MyModel(Base): + __tablename__ = 'models' + id = Column(Integer, primary_key=True) + name = Column(Unicode(255), unique=True) + value = Column(Integer) + + def __init__(self, name, value): + self.name = name + self.value = value + +def populate(): + session = DBSession() + model = MyModel(name=u'root', value=55) + session.add(model) + session.flush() + transaction.commit() + +def initialize_sql(engine): + DBSession.configure(bind=engine) + Base.metadata.bind = engine + Base.metadata.create_all(engine) + try: + populate() + except IntegrityError: + transaction.abort() diff --git a/radiopanik_tracks_db/static/favicon.ico b/radiopanik_tracks_db/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..71f837c9e27a57cc290a775b8260241d456582e9 Binary files /dev/null and b/radiopanik_tracks_db/static/favicon.ico differ diff --git a/radiopanik_tracks_db/static/footerbg.png b/radiopanik_tracks_db/static/footerbg.png new file mode 100644 index 0000000000000000000000000000000000000000..1fbc873daa930207b3a5a07a4d34a9478241d67e Binary files /dev/null and b/radiopanik_tracks_db/static/footerbg.png differ diff --git a/radiopanik_tracks_db/static/headerbg.png b/radiopanik_tracks_db/static/headerbg.png new file mode 100644 index 0000000000000000000000000000000000000000..0596f2020327efd97a4467c3025691844bb703d5 Binary files /dev/null and b/radiopanik_tracks_db/static/headerbg.png differ diff --git a/radiopanik_tracks_db/static/ie6.css b/radiopanik_tracks_db/static/ie6.css new file mode 100644 index 0000000000000000000000000000000000000000..b7c8493d8f9df3834d3804e9da431a30943783f6 --- /dev/null +++ b/radiopanik_tracks_db/static/ie6.css @@ -0,0 +1,8 @@ +* html img, +* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none", +this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')", +this.src = "static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''), +this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')", +this.runtimeStyle.backgroundImage = "none")),this.pngSet=true) +);} +#wrap{display:table;height:100%} diff --git a/radiopanik_tracks_db/static/middlebg.png b/radiopanik_tracks_db/static/middlebg.png new file mode 100644 index 0000000000000000000000000000000000000000..2369cfb7da3e5052c2ad4932a6d56240c92654c7 Binary files /dev/null and b/radiopanik_tracks_db/static/middlebg.png differ diff --git a/radiopanik_tracks_db/static/pylons.css b/radiopanik_tracks_db/static/pylons.css new file mode 100644 index 0000000000000000000000000000000000000000..c54499ddd80ab17d508c687ea92f3d8eff902df2 --- /dev/null +++ b/radiopanik_tracks_db/static/pylons.css @@ -0,0 +1,65 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;/* 16px */ +vertical-align:baseline;background:transparent;} +body{line-height:1;} +ol,ul{list-style:none;} +blockquote,q{quotes:none;} +blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;} +:focus{outline:0;} +ins{text-decoration:none;} +del{text-decoration:line-through;} +table{border-collapse:collapse;border-spacing:0;} +sub{vertical-align:sub;font-size:smaller;line-height:normal;} +sup{vertical-align:super;font-size:smaller;line-height:normal;} +ul,menu,dir{display:block;list-style-type:disc;margin:1em 0;padding-left:40px;} +ol{display:block;list-style-type:decimal-leading-zero;margin:1em 0;padding-left:40px;} +li{display:list-item;} +ul ul,ul ol,ul dir,ul menu,ul dl,ol ul,ol ol,ol dir,ol menu,ol dl,dir ul,dir ol,dir dir,dir menu,dir dl,menu ul,menu ol,menu dir,menu menu,menu dl,dl ul,dl ol,dl dir,dl menu,dl dl{margin-top:0;margin-bottom:0;} +ol ul,ul ul,menu ul,dir ul,ol menu,ul menu,menu menu,dir menu,ol dir,ul dir,menu dir,dir dir{list-style-type:circle;} +ol ol ul,ol ul ul,ol menu ul,ol dir ul,ol ol menu,ol ul menu,ol menu menu,ol dir menu,ol ol dir,ol ul dir,ol menu dir,ol dir dir,ul ol ul,ul ul ul,ul menu ul,ul dir ul,ul ol menu,ul ul menu,ul menu menu,ul dir menu,ul ol dir,ul ul dir,ul menu dir,ul dir dir,menu ol ul,menu ul ul,menu menu ul,menu dir ul,menu ol menu,menu ul menu,menu menu menu,menu dir menu,menu ol dir,menu ul dir,menu menu dir,menu dir dir,dir ol ul,dir ul ul,dir menu ul,dir dir ul,dir ol menu,dir ul menu,dir menu menu,dir dir menu,dir ol dir,dir ul dir,dir menu dir,dir dir dir{list-style-type:square;} +.hidden{display:none;} +p{line-height:1.5em;} +h1{font-size:1.75em;line-height:1.7em;font-family:helvetica,verdana;} +h2{font-size:1.5em;line-height:1.7em;font-family:helvetica,verdana;} +h3{font-size:1.25em;line-height:1.7em;font-family:helvetica,verdana;} +h4{font-size:1em;line-height:1.7em;font-family:helvetica,verdana;} +html,body{width:100%;height:100%;} +body{margin:0;padding:0;background-color:#ffffff;position:relative;font:16px/24px "NobileRegular","Lucida Grande",Lucida,Verdana,sans-serif;} +a{color:#1b61d6;text-decoration:none;} +a:hover{color:#e88f00;text-decoration:underline;} +body h1, +body h2, +body h3, +body h4, +body h5, +body h6{font-family:"NeutonRegular","Lucida Grande",Lucida,Verdana,sans-serif;font-weight:normal;color:#373839;font-style:normal;} +#wrap{min-height:100%;} +#header,#footer{width:100%;color:#ffffff;height:40px;position:absolute;text-align:center;line-height:40px;overflow:hidden;font-size:12px;vertical-align:middle;} +#header{background:#000000;top:0;font-size:14px;} +#footer{bottom:0;background:#000000 url(footerbg.png) repeat-x 0 top;position:relative;margin-top:-40px;clear:both;} +.header,.footer{width:750px;margin-right:auto;margin-left:auto;} +.wrapper{width:100%} +#top,#top-small,#bottom{width:100%;} +#top{color:#000000;height:230px;background:#ffffff url(headerbg.png) repeat-x 0 top;position:relative;} +#top-small{color:#000000;height:60px;background:#ffffff url(headerbg.png) repeat-x 0 top;position:relative;} +#bottom{color:#222;background-color:#ffffff;} +.top,.top-small,.middle,.bottom{width:750px;margin-right:auto;margin-left:auto;} +.top{padding-top:40px;} +.top-small{padding-top:10px;} +#middle{width:100%;height:100px;background:url(middlebg.png) repeat-x;border-top:2px solid #ffffff;border-bottom:2px solid #b2b2b2;} +.app-welcome{margin-top:25px;} +.app-name{color:#000000;font-weight:bold;} +.bottom{padding-top:50px;} +#left{width:350px;float:left;padding-right:25px;} +#right{width:350px;float:right;padding-left:25px;} +.align-left{text-align:left;} +.align-right{text-align:right;} +.align-center{text-align:center;} +ul.links{margin:0;padding:0;} +ul.links li{list-style-type:none;font-size:14px;} +form{border-style:none;} +fieldset{border-style:none;} +input{color:#222;border:1px solid #ccc;font-family:sans-serif;font-size:12px;line-height:16px;} +input[type=text],input[type=password]{width:205px;} +input[type=submit]{background-color:#ddd;font-weight:bold;} +/*Opera Fix*/ +body:before{content:"";height:100%;float:left;width:0;margin-top:-32767px;} diff --git a/radiopanik_tracks_db/static/pyramid-small.png b/radiopanik_tracks_db/static/pyramid-small.png new file mode 100644 index 0000000000000000000000000000000000000000..a5bc0ade71d3da5eab67391e840ff20448c42cd6 Binary files /dev/null and b/radiopanik_tracks_db/static/pyramid-small.png differ diff --git a/radiopanik_tracks_db/static/pyramid.png b/radiopanik_tracks_db/static/pyramid.png new file mode 100644 index 0000000000000000000000000000000000000000..347e0554962610340ca1fa8e527261fcabe21763 Binary files /dev/null and b/radiopanik_tracks_db/static/pyramid.png differ diff --git a/radiopanik_tracks_db/static/transparent.gif b/radiopanik_tracks_db/static/transparent.gif new file mode 100644 index 0000000000000000000000000000000000000000..0341802e5111ad58a05ef6e93e59bfa6e5d3d1a6 Binary files /dev/null and b/radiopanik_tracks_db/static/transparent.gif differ diff --git a/radiopanik_tracks_db/templates/mytemplate.pt b/radiopanik_tracks_db/templates/mytemplate.pt new file mode 100644 index 0000000000000000000000000000000000000000..55bb4b0d39fd9c372a5617325f64bf037596f7c3 --- /dev/null +++ b/radiopanik_tracks_db/templates/mytemplate.pt @@ -0,0 +1,76 @@ + + + + The Pyramid Web Application Development Framework + + + + + + + + + + +
+
+
+
pyramid
+
+
+
+
+

+ Welcome to ${project}, an application generated by
+ the Pyramid web application development framework. +

+
+
+
+
+
+

Search documentation

+
+ + +
+
+ +
+
+
+ + + diff --git a/radiopanik_tracks_db/tests.py b/radiopanik_tracks_db/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..01784fc509ffc252d497f8741b9fb473dec926f5 --- /dev/null +++ b/radiopanik_tracks_db/tests.py @@ -0,0 +1,24 @@ +import unittest +from pyramid.config import Configurator +from pyramid import testing + +def _initTestingDB(): + from sqlalchemy import create_engine + from radiopanik_tracks_db.models import initialize_sql + session = initialize_sql(create_engine('sqlite://')) + return session + +class TestMyView(unittest.TestCase): + def setUp(self): + self.config = testing.setUp() + _initTestingDB() + + def tearDown(self): + testing.tearDown() + + def test_it(self): + from radiopanik_tracks_db.views import my_view + request = testing.DummyRequest() + info = my_view(request) + self.assertEqual(info['root'].name, 'root') + self.assertEqual(info['project'], 'radiopanik_tracks_db') diff --git a/radiopanik_tracks_db/views.py b/radiopanik_tracks_db/views.py new file mode 100644 index 0000000000000000000000000000000000000000..d2d949f1a4d068e6aeccfffc4a9571bfe77d69e1 --- /dev/null +++ b/radiopanik_tracks_db/views.py @@ -0,0 +1,7 @@ +from radiopanik_tracks_db.models import DBSession +from radiopanik_tracks_db.models import MyModel + +def my_view(request): + dbsession = DBSession() + root = dbsession.query(MyModel).filter(MyModel.name==u'root').first() + return {'root':root, 'project':'radiopanik_tracks_db'}