123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- from __future__ import absolute_import
- import abc
- class Database(object):
- __metaclass__ = abc.ABCMeta
- FIELD_FILE_SHA1 = 'file_sha1'
- FIELD_SONG_ID = 'id'
- FIELD_SONGNAME = 'name'
- FIELD_LENGTH = 'length'
- FIELD_OFFSET = 'offset'
- FIELD_HASH = 'hash'
- # 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, ads_filter):
- """
- 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 dejavu.database_mem
|