mirror of https://gitlab.com/openlp/openlp.git
Merge branch 'migrate-to-declarative-songusage' into 'master'
Migrate Song Usage to declarative See merge request openlp/openlp!595
This commit is contained in:
commit
20b4102c77
|
@ -23,40 +23,45 @@ The :mod:`db` module provides the database and schema that is the backend for
|
|||
the SongUsage plugin
|
||||
"""
|
||||
|
||||
from sqlalchemy import Column, Table, types
|
||||
from sqlalchemy.orm import mapper
|
||||
from sqlalchemy import Column, MetaData
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.types import Integer, Date, Time, Unicode
|
||||
|
||||
from openlp.core.lib.db import BaseModel, init_db
|
||||
# Maintain backwards compatibility with older versions of SQLAlchemy while supporting SQLAlchemy 1.4+
|
||||
try:
|
||||
from sqlalchemy.orm import declarative_base
|
||||
except ImportError:
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
from openlp.core.lib.db import init_db
|
||||
|
||||
|
||||
class SongUsageItem(BaseModel):
|
||||
Base = declarative_base(MetaData())
|
||||
|
||||
|
||||
class SongUsageItem(Base):
|
||||
"""
|
||||
SongUsageItem model
|
||||
"""
|
||||
pass
|
||||
__tablename__ = 'songusage_data'
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
usagedate = Column(Date, index=True, nullable=False)
|
||||
usagetime = Column(Time, index=True, nullable=False)
|
||||
title = Column(Unicode(255), nullable=False)
|
||||
authors = Column(Unicode(255), nullable=False)
|
||||
copyright = Column(Unicode(255))
|
||||
ccl_number = Column(Unicode(65))
|
||||
plugin_name = Column(Unicode(20))
|
||||
source = Column(Unicode(10))
|
||||
|
||||
|
||||
def init_schema(url):
|
||||
def init_schema(url: str) -> Session:
|
||||
"""
|
||||
Setup the songusage database connection and initialise the database schema
|
||||
|
||||
:param url: The database to setup
|
||||
"""
|
||||
session, metadata = init_db(url)
|
||||
|
||||
songusage_table = Table('songusage_data', metadata,
|
||||
Column('id', types.Integer(), primary_key=True),
|
||||
Column('usagedate', types.Date, index=True, nullable=False),
|
||||
Column('usagetime', types.Time, index=True, nullable=False),
|
||||
Column('title', types.Unicode(255), nullable=False),
|
||||
Column('authors', types.Unicode(255), nullable=False),
|
||||
Column('copyright', types.Unicode(255)),
|
||||
Column('ccl_number', types.Unicode(65)),
|
||||
Column('plugin_name', types.Unicode(20)),
|
||||
Column('source', types.Unicode(10))
|
||||
)
|
||||
|
||||
mapper(SongUsageItem, songusage_table)
|
||||
|
||||
session, metadata = init_db(url, base=Base)
|
||||
metadata.create_all(checkfirst=True)
|
||||
return session
|
||||
|
|
|
@ -190,15 +190,16 @@ class SongUsagePlugin(Plugin):
|
|||
def _add_song_usage(self, source, item):
|
||||
audit = item[0].audit
|
||||
if self.song_usage_active and audit:
|
||||
song_usage_item = SongUsageItem()
|
||||
song_usage_item.usagedate = datetime.today()
|
||||
song_usage_item.usagetime = datetime.now().time()
|
||||
song_usage_item.title = audit[0]
|
||||
song_usage_item.copyright = audit[2]
|
||||
song_usage_item.ccl_number = audit[3]
|
||||
song_usage_item.authors = ' '.join(audit[1])
|
||||
song_usage_item.plugin_name = item[0].name
|
||||
song_usage_item.source = source
|
||||
song_usage_item = SongUsageItem(
|
||||
usagedate=datetime.today(),
|
||||
usagetime=datetime.now().time(),
|
||||
title=audit[0],
|
||||
copyright=audit[2],
|
||||
ccl_number=audit[3],
|
||||
authors=' '.join(audit[1]),
|
||||
plugin_name=item[0].name,
|
||||
source=source
|
||||
)
|
||||
self.manager.save_object(song_usage_item)
|
||||
|
||||
def on_song_usage_delete(self):
|
||||
|
|
Loading…
Reference in New Issue