mirror of
https://github.com/correl/dejavu.git
synced 2024-11-23 19:19:53 +00:00
e071804ea5
Fixed a bug in the SQL database pertaining to the use of grouper. Made SQLDatabase pickleable, for better multiprocessing support.
170 lines
4.1 KiB
Python
Executable file
170 lines
4.1 KiB
Python
Executable file
from __future__ import absolute_import
|
|
import abc
|
|
|
|
|
|
class Database(object):
|
|
__metaclass__ = abc.ABCMeta
|
|
|
|
# Name of your Database subclass, this is used in configuration
|
|
# to refer to your class
|
|
type = None
|
|
|
|
def __init__(self):
|
|
super(Database, self).__init__()
|
|
|
|
def before_fork(self):
|
|
"""
|
|
Called before the database instance is given to the new process
|
|
"""
|
|
pass
|
|
|
|
def after_fork(self):
|
|
"""
|
|
Called after the database instance has been given to the new process
|
|
|
|
This will be called in the new process.
|
|
"""
|
|
pass
|
|
|
|
def setup(self):
|
|
"""
|
|
Called on creation or shortly afterwards.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def empty(self):
|
|
"""
|
|
Called when the database should be cleared of all data.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def delete_unfingerprinted_songs(self):
|
|
"""
|
|
Called to remove any song entries that do not have any fingerprints
|
|
associated with them.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_num_songs(self):
|
|
"""
|
|
Returns the amount of songs in the database.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_num_fingerprints(self):
|
|
"""
|
|
Returns the number of fingerprints in the database.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def set_song_fingerprinted(self, sid):
|
|
"""
|
|
Sets a specific song as having all fingerprints in the database.
|
|
|
|
sid: Song identifier
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_songs(self):
|
|
"""
|
|
Returns all fully fingerprinted songs in the database.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_song_by_id(self, sid):
|
|
"""
|
|
Return a song by its identifier
|
|
|
|
sid: Song identifier
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def insert(self, hash, sid, offset):
|
|
"""
|
|
Inserts a single fingerprint into the database.
|
|
|
|
hash: Part of a sha1 hash, in hexadecimal format
|
|
sid: Song identifier this fingerprint is off
|
|
offset: The offset this hash is from
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def insert_song(self, song_name):
|
|
"""
|
|
Inserts a song name into the database, returns the new
|
|
identifier of the song.
|
|
|
|
song_name: The name of the song.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def query(self, hash):
|
|
"""
|
|
Returns all matching fingerprint entries associated with
|
|
the given hash as parameter.
|
|
|
|
hash: Part of a sha1 hash, in hexadecimal format
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def get_iterable_kv_pairs(self):
|
|
"""
|
|
Returns all fingerprints in the database.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def insert_hashes(self, sid, hashes):
|
|
"""
|
|
Insert a multitude of fingerprints.
|
|
|
|
sid: Song identifier the fingerprints belong to
|
|
hashes: A sequence of tuples in the format (hash, offset)
|
|
- hash: Part of a sha1 hash, in hexadecimal format
|
|
- offset: Offset this hash was created from/at.
|
|
"""
|
|
pass
|
|
|
|
@abc.abstractmethod
|
|
def return_matches(self, hashes):
|
|
"""
|
|
Searches the database for pairs of (hash, offset) values.
|
|
|
|
hashes: A sequence of tuples in the format (hash, offset)
|
|
- hash: Part of a sha1 hash, in hexadecimal format
|
|
- offset: Offset this hash was created from/at.
|
|
|
|
Returns a sequence of (sid, offset_difference) tuples.
|
|
|
|
sid: Song identifier
|
|
offset_difference: (offset - database_offset)
|
|
"""
|
|
pass
|
|
|
|
|
|
def get_database(database_type=None):
|
|
# Default to using the mysql database
|
|
database_type = database_type or "mysql"
|
|
# Lower all the input.
|
|
database_type = database_type.lower()
|
|
|
|
for db_cls in Database.__subclasses__():
|
|
if db_cls.type == database_type:
|
|
return db_cls
|
|
|
|
raise TypeError("Unsupported database type supplied.")
|
|
|
|
|
|
# Import our default database handler
|
|
import dejavu.database_sql
|