You've already forked double-entry-accounting
Initial project
This commit is contained in:
85
server.py
Normal file
85
server.py
Normal file
@@ -0,0 +1,85 @@
|
||||
import cherrypy
|
||||
from sqlalchemy import create_engine
|
||||
from accounting.models import Base
|
||||
from accounting.api import AccountingAPI
|
||||
import os
|
||||
from config import DATABASE_URI
|
||||
|
||||
|
||||
def CORS():
|
||||
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
|
||||
cherrypy.response.headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS"
|
||||
cherrypy.response.headers["Access-Control-Allow-Headers"] = "Content-Type"
|
||||
|
||||
|
||||
class Root:
|
||||
@cherrypy.expose
|
||||
def index(self):
|
||||
return open(os.path.join(os.path.dirname(__file__), 'accounting/templates/index.html')).read()
|
||||
|
||||
@cherrypy.expose
|
||||
def favicon_ico(self):
|
||||
return cherrypy.lib.static.serve_file(
|
||||
os.path.join(os.path.dirname(__file__), 'static/favicon.ico'),
|
||||
content_type='image/x-icon'
|
||||
)
|
||||
|
||||
|
||||
def setup_database():
|
||||
engine = create_engine(DATABASE_URI)
|
||||
Base.metadata.create_all(engine)
|
||||
return engine
|
||||
|
||||
|
||||
def main():
|
||||
# Database setup
|
||||
db_engine = setup_database()
|
||||
|
||||
# Create static directory if it doesn't exist
|
||||
static_path = os.path.join(os.path.dirname(__file__), 'static')
|
||||
if not os.path.exists(static_path):
|
||||
os.makedirs(static_path)
|
||||
|
||||
# CherryPy configuration
|
||||
conf = {
|
||||
'/': {
|
||||
'tools.sessions.on': True,
|
||||
'tools.staticdir.root': os.path.abspath(os.path.dirname(__file__)),
|
||||
'tools.CORS.on': True
|
||||
},
|
||||
'/static': {
|
||||
'tools.staticdir.on': True,
|
||||
'tools.staticdir.dir': 'static',
|
||||
},
|
||||
'/api': {
|
||||
'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
|
||||
'tools.CORS.on': True,
|
||||
'tools.response_headers.on': True,
|
||||
'tools.response_headers.headers': [('Content-Type', 'application/json')],
|
||||
}
|
||||
}
|
||||
|
||||
# Register CORS tool
|
||||
cherrypy.tools.CORS = cherrypy.Tool('before_handler', CORS)
|
||||
|
||||
# Create application
|
||||
root = Root()
|
||||
root.api = AccountingAPI(db_engine)
|
||||
|
||||
cherrypy.tree.mount(root, '/', conf)
|
||||
|
||||
# Start server
|
||||
cherrypy.config.update({
|
||||
'server.socket_host': '0.0.0.0',
|
||||
'server.socket_port': 8080,
|
||||
'log.screen': True,
|
||||
'engine.autoreload.on': True
|
||||
})
|
||||
|
||||
print("Starting accounting system...")
|
||||
cherrypy.engine.start()
|
||||
cherrypy.engine.block()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user