diff --git a/libertywiki/__init__.py b/libertywiki/__init__.py new file mode 100644 index 0000000..43f8419 --- /dev/null +++ b/libertywiki/__init__.py @@ -0,0 +1,3 @@ +from libertywiki.app import get_app + +__all__ = ['get_app'] diff --git a/libertywiki/__main__.py b/libertywiki/__main__.py new file mode 100644 index 0000000..1d443ed --- /dev/null +++ b/libertywiki/__main__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from libertywiki import get_app + +if __name__ == "__main__": + get_app().run(port=8080, debug=True) diff --git a/libertywiki/app.py b/libertywiki/app.py new file mode 100644 index 0000000..1834bb3 --- /dev/null +++ b/libertywiki/app.py @@ -0,0 +1,26 @@ +from flask import Flask + +from rst2html import rst2html + +from libertywiki.db import db +from libertywiki.views import wiki + + +def get_app(): + """Create and configure the application object""" + app = Flask(__name__) + db.init_app(app) + + with app.app_context(): + db.create_all() + + @app.template_filter('rst2html') + def rst2html_filter(text): + html, warning = rst2html(text) + print(html) + print(warning) + return html + + app.register_blueprint(wiki) + + return app diff --git a/libertywiki/db.py b/libertywiki/db.py new file mode 100644 index 0000000..485568f --- /dev/null +++ b/libertywiki/db.py @@ -0,0 +1,17 @@ +from flask_sqlalchemy import SQLAlchemy + +db = SQLAlchemy() +Model = db.Model +Boolean = db.Boolean +Column = db.Column +DateTime = db.DateTime +Float = db.Float +ForeignKey = db.ForeignKey +Integer = db.Integer +LargeBinary = db.LargeBinary +Table = db.Table +String = db.String +Text = db.Text +relationship = db.relationship +inspect = db.inspect +session = db.session diff --git a/libertywiki/models.py b/libertywiki/models.py new file mode 100644 index 0000000..802056c --- /dev/null +++ b/libertywiki/models.py @@ -0,0 +1,45 @@ +from datetime import datetime + +from sqlalchemy.ext.hybrid import hybrid_property + +from libertywiki.db import Model, Column, ForeignKey, DateTime, Integer, String, Text +from libertywiki.utils import bcrypt + + +class Page(Model): + """ + Page model + """ + __tablename__ = 'pages' + + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey('users.id')) + title = Column(String(255), nullable=False) + body = Column(Text) + slug = Column(String(255), nullable=False, index=True, unique=True) + created = Column(DateTime, default=datetime.now()) + modified = Column(DateTime, default=datetime.now()) + + def __str__(self): + return self.title + + +class User(Model): + """ + User model + """ + __tablename__ = 'users' + + id = Column(Integer, primary_key=True) + name = Column(String(255)) + email = Column(String(255), nullable=False, index=True, unique=True) + _password = Column('password', String(255), nullable=False) + activation_code = Column(String(255)) + + @hybrid_property + def password(self): + return self.password + + @password.setter + def password(self, value): + self._password = bcrypt.generate_password_hash(value) diff --git a/libertywiki/templates/base.html b/libertywiki/templates/base.html new file mode 100644 index 0000000..bbcd9b7 --- /dev/null +++ b/libertywiki/templates/base.html @@ -0,0 +1,32 @@ + + +
+ + +