Bare bones for JSON database
This commit is contained in:
@@ -68,7 +68,6 @@ class VersionInfo(NamedTuple):
|
|||||||
releaselevel: Literal["alpha", "beta", "candidate", "final"]
|
releaselevel: Literal["alpha", "beta", "candidate", "final"]
|
||||||
serial: int
|
serial: int
|
||||||
|
|
||||||
|
|
||||||
version_info: VersionInfo = VersionInfo(major=2, minor=0, micro=0, releaselevel='alpha', serial=0)
|
version_info: VersionInfo = VersionInfo(major=2, minor=0, micro=0, releaselevel='alpha', serial=0)
|
||||||
|
|
||||||
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ class Cog(metaclass=CogMeta):
|
|||||||
for command in self.__cog_commands__:
|
for command in self.__cog_commands__:
|
||||||
setattr(self, command.callback.__name__, command)
|
setattr(self, command.callback.__name__, command)
|
||||||
parent = command.parent
|
parent = command.parent
|
||||||
if parent is not None:
|
if parent:
|
||||||
# Get the latest parent reference
|
# Get the latest parent reference
|
||||||
parent = lookup[parent.qualified_name] # type: ignore
|
parent = lookup[parent.qualified_name] # type: ignore
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ class Cog(metaclass=CogMeta):
|
|||||||
|
|
||||||
This does not include subcommands.
|
This does not include subcommands.
|
||||||
"""
|
"""
|
||||||
return [c for c in self.__cog_commands__ if c.parent is None]
|
return [c for c in self.__cog_commands__ if not c.parent]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def qualified_name(self) -> str:
|
def qualified_name(self) -> str:
|
||||||
|
|||||||
0
discord/ext/json/__init__.py
Normal file
0
discord/ext/json/__init__.py
Normal file
95
discord/ext/json/types.py
Normal file
95
discord/ext/json/types.py
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
from typing import Union, Any
|
||||||
|
|
||||||
|
class Serializer:
|
||||||
|
def bind_file(self, file:str):
|
||||||
|
"""Bind file to be serialized(loaded or dumped)"""
|
||||||
|
|
||||||
|
self.file = file
|
||||||
|
|
||||||
|
async def load(self, content:str):
|
||||||
|
raise NotImplementedError("Serializer has to be implemented!")
|
||||||
|
|
||||||
|
async def dump(self):
|
||||||
|
raise NotImplementedError("Serializer hasn't been implemented")
|
||||||
|
|
||||||
|
class File:
|
||||||
|
def __init__(self, path:str):
|
||||||
|
"""
|
||||||
|
Initialize a file.
|
||||||
|
|
||||||
|
=======
|
||||||
|
|
||||||
|
path `str` :
|
||||||
|
|
||||||
|
path to the file
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.path : str = path
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def construct(path:str):
|
||||||
|
"""
|
||||||
|
Construct a File object statically
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not isinstance(path, str):
|
||||||
|
raise TypeError(f"Expected path to be type str, got {type(path)} instead.")
|
||||||
|
|
||||||
|
return File(path)
|
||||||
|
|
||||||
|
async def access(self, mode:str):
|
||||||
|
"""
|
||||||
|
Open object to access file. Don't use this in your code.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not isinstance(mode, str):
|
||||||
|
raise TypeError(f"Expected mode to be type str, got {type(mode)} instead.")
|
||||||
|
|
||||||
|
return open(self.path, mode)
|
||||||
|
|
||||||
|
async def open_writer(self):
|
||||||
|
"""Open plain writer for file"""
|
||||||
|
|
||||||
|
return await self.access("w+")
|
||||||
|
|
||||||
|
async def open_reader(self):
|
||||||
|
"""Open plain reader for file"""
|
||||||
|
|
||||||
|
return await self.access("r+")
|
||||||
|
|
||||||
|
async def open_binary_writer(self):
|
||||||
|
"""Open binary writer for file"""
|
||||||
|
|
||||||
|
return await self.access("wb+")
|
||||||
|
|
||||||
|
async def open_binary_reader(self):
|
||||||
|
"""Open binary reader for file"""
|
||||||
|
|
||||||
|
return await self.access("rb+")
|
||||||
|
|
||||||
|
async def read_contents(self, binary=False) -> Union[str, bytes]:
|
||||||
|
"""
|
||||||
|
Dump out file contents
|
||||||
|
======
|
||||||
|
|
||||||
|
binary `bool` (optional):
|
||||||
|
|
||||||
|
Set to False normally. Controls whether to read file as binary or read as normal text.
|
||||||
|
"""
|
||||||
|
|
||||||
|
reader = None # initialize
|
||||||
|
|
||||||
|
if binary:
|
||||||
|
reader = await self.open_binary_reader()
|
||||||
|
else:
|
||||||
|
reader = await self.open_reader()
|
||||||
|
|
||||||
|
contents = reader.read()
|
||||||
|
|
||||||
|
reader.close() # safely close file
|
||||||
|
|
||||||
|
return contents
|
||||||
|
|
||||||
|
async def serialize(self, serializer:Serializer) -> Union[Any]:
|
||||||
Reference in New Issue
Block a user