refactored id's to be 64-bit integers
This commit is contained in:
parent
1835e60cd1
commit
0bd4e96b27
@ -1,31 +1,31 @@
|
||||
import random
|
||||
import uuid
|
||||
from collections import defaultdict
|
||||
from typing import Optional, Dict, Tuple, List
|
||||
|
||||
from .metadata import Metadata
|
||||
from .option import Options
|
||||
from ..utils.shared import OBJECT_LOGGER as LOGGER
|
||||
from ..utils.shared import ID_RANGE, OBJECT_LOGGER as LOGGER
|
||||
|
||||
|
||||
class DatabaseObject:
|
||||
COLLECTION_ATTRIBUTES: tuple = tuple()
|
||||
SIMPLE_ATTRIBUTES: dict = dict()
|
||||
|
||||
def __init__(self, _id: str = None, dynamic: bool = False, **kwargs) -> None:
|
||||
def __init__(self, _id: int = None, dynamic: bool = False, **kwargs) -> None:
|
||||
self.automatic_id: bool = False
|
||||
|
||||
if _id is None and not dynamic:
|
||||
"""
|
||||
generates a random UUID
|
||||
https://docs.python.org/3/library/uuid.html
|
||||
generates a random integer id
|
||||
64 bit integer, but this is defined in shared.py in ID_BITS
|
||||
the range is defined in the Tuple ID_RANGE
|
||||
"""
|
||||
_id = str(uuid.uuid4())
|
||||
_id = random.randint(*ID_RANGE)
|
||||
self.automatic_id = True
|
||||
LOGGER.debug(f"id for {type(self).__name__} isn't set. Setting to {_id}")
|
||||
LOGGER.debug(f"Id for {type(self).__name__} isn't set. Setting to {_id}")
|
||||
|
||||
# The id can only be None, if the object is dynamic (self.dynamic = True)
|
||||
self.id: Optional[str] = _id
|
||||
self.id: Optional[int] = _id
|
||||
|
||||
self.dynamic = dynamic
|
||||
|
||||
@ -35,6 +35,10 @@ class DatabaseObject:
|
||||
if not isinstance(other, type(self)):
|
||||
return False
|
||||
|
||||
# add the checks for dynamic, to not throw an exception
|
||||
if not self.dynamic and not other.dynamic and self.id == other.id:
|
||||
return True
|
||||
|
||||
temp_attribute_map: Dict[str, set] = defaultdict(set)
|
||||
|
||||
# building map with sets
|
||||
@ -117,7 +121,7 @@ class MainObject(DatabaseObject):
|
||||
but also some added functions as well.
|
||||
"""
|
||||
|
||||
def __init__(self, _id: str = None, dynamic: bool = False, **kwargs):
|
||||
def __init__(self, _id: int = None, dynamic: bool = False, **kwargs):
|
||||
DatabaseObject.__init__(self, _id=_id, dynamic=dynamic, **kwargs)
|
||||
|
||||
self.additional_arguments: dict = kwargs
|
||||
|
@ -46,7 +46,7 @@ class Song(MainObject):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
_id: str = None,
|
||||
_id: int = None,
|
||||
dynamic: bool = False,
|
||||
title: str = None,
|
||||
unified_title: str = None,
|
||||
@ -203,7 +203,7 @@ class Album(MainObject):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
_id: str = None,
|
||||
_id: int = None,
|
||||
title: str = None,
|
||||
unified_title: str = None,
|
||||
language: pycountry.Languages = None,
|
||||
@ -408,7 +408,7 @@ class Artist(MainObject):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
_id: str = None,
|
||||
_id: int = None,
|
||||
dynamic: bool = False,
|
||||
name: str = None,
|
||||
unified_name: str = None,
|
||||
@ -579,7 +579,7 @@ class Label(MainObject):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
_id: str = None,
|
||||
_id: int = None,
|
||||
dynamic: bool = False,
|
||||
name: str = None,
|
||||
unified_name: str = None,
|
||||
|
@ -1,4 +1,4 @@
|
||||
from typing import List, Set
|
||||
from typing import List, Set, Tuple
|
||||
import logging
|
||||
import tempfile
|
||||
import os
|
||||
@ -36,6 +36,9 @@ def get_random_message() -> str:
|
||||
return random.choice(HAPPY_MESSAGES)
|
||||
|
||||
|
||||
ID_BITS: int = 64
|
||||
ID_RANGE: Tuple[int] = 0, 2**ID_BITS
|
||||
|
||||
TEMP_DIR = Path(tempfile.gettempdir(), "music-downloader")
|
||||
TEMP_DIR.mkdir(exist_ok=True)
|
||||
LOG_PATH = Path(TEMP_DIR, "download_logs.log")
|
||||
|
Loading…
Reference in New Issue
Block a user