-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdatabase.py
More file actions
69 lines (54 loc) · 2.38 KB
/
database.py
File metadata and controls
69 lines (54 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import base64
import logging
import jsonpickle
import pymongo
from bson.objectid import ObjectId
from iog_randomizer.randomizer.models.enums import FluteOpt
from iog_randomizer.randomizer.models.randomizer_data import RandomizerData as Settings
from config import Config
from models.entry import Entry
from models.patch import Patch
from models.spoiler import Spoiler
class Database(object):
def __init__(self, logging: logging, config: Config):
self.logging = logging
self.config = config
self.enabled = config.DB_ENABLED
if not self.enabled:
return
uri = "mongodb://{}:{}@{}:{}/{}?authSource={}".format(self.config.DB_USERNAME, self.config.DB_PASSWORD,
self.config.DB_HOST, self.config.DB_PORT,
self.config.DB_DATABASE_ID, self.config.DB_AUTHDB)
self.client = pymongo.MongoClient(uri)
self.db = self.client[self.config.DB_DATABASE_ID]
self.collection = self.db[self.config.DB_COLLECTION_ID]
def create(self,
patch: Patch,
spoiler: Spoiler,
settings: Settings,
hide_settings: bool = False,
return_spoiler: bool = False) -> str:
if not self.enabled:
raise EnvironmentError("Database not enabled")
_settings = None
if not hide_settings:
_settings = jsonpickle.encode(settings.__dict__)
_fluteless = True if settings.flute == FluteOpt.FLUTELESS else False
_spoiler = None
_spoiler_name = None
if spoiler is not None:
_spoiler = spoiler.spoiler
_spoiler_name = spoiler.spoilerName
entry = Entry(settings.seed, patch.version, patch.patch, patch.patchName, _spoiler, _spoiler_name, _settings,
str(_fluteless), str(return_spoiler))
key = self.collection.insert_one(entry.__dict__)
return str(key.inserted_id)
def get(self, key: str) -> Entry:
if not self.enabled:
raise EnvironmentError("Database not enabled")
entry = self.collection.find_one({"_id": ObjectId(key)})
return entry
def __encode__(self, obj):
json = jsonpickle.encode(obj, unpicklable=True)
json_bytes = json.encode('utf-8')
return base64.b64encode(json_bytes)