mirror of
				https://github.com/TitanEmbeds/Titan.git
				synced 2025-11-04 15:57:02 +01:00 
			
		
		
		
	Remove keyvalue properties in favor of redis
This commit is contained in:
		@@ -7,7 +7,6 @@ from .unauthenticated_users import UnauthenticatedUsers
 | 
			
		||||
from .unauthenticated_bans import UnauthenticatedBans
 | 
			
		||||
from .authenticated_users import AuthenticatedUsers
 | 
			
		||||
from .guild_members import GuildMembers, list_all_guild_members, get_guild_member
 | 
			
		||||
from .keyvalue_properties import KeyValueProperties, set_keyvalproperty, get_keyvalproperty, getexpir_keyvalproperty, setexpir_keyvalproperty, ifexists_keyvalproperty, delete_keyvalproperty
 | 
			
		||||
from .messages import Messages, get_channel_messages
 | 
			
		||||
from .cosmetics import Cosmetics, set_badges, get_badges, add_badge, remove_badge
 | 
			
		||||
from .user_css import UserCSS
 | 
			
		||||
 
 | 
			
		||||
@@ -1,98 +0,0 @@
 | 
			
		||||
from titanembeds.database import db
 | 
			
		||||
from datetime import datetime, timedelta
 | 
			
		||||
from limits.storage import Storage
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
def set_keyvalproperty(key, value, expiration=None):
 | 
			
		||||
    q = db.session.query(KeyValueProperties).filter(KeyValueProperties.key == key)
 | 
			
		||||
    if q.count() == 0:
 | 
			
		||||
        db.session.add(KeyValueProperties(key=key, value=value, expiration=expiration))
 | 
			
		||||
    else:
 | 
			
		||||
        if expiration is not None:
 | 
			
		||||
            converted_expr = datetime.fromtimestamp(time.time() + expiration)
 | 
			
		||||
        else:
 | 
			
		||||
            converted_expr = None
 | 
			
		||||
        firstobj = q.first()
 | 
			
		||||
        firstobj.value = value
 | 
			
		||||
        firstobj.expiration = converted_expr
 | 
			
		||||
    db.session.commit()
 | 
			
		||||
 | 
			
		||||
def get_keyvalproperty(key):
 | 
			
		||||
    q = db.session.query(KeyValueProperties).filter(KeyValueProperties.key == key)
 | 
			
		||||
    now = datetime.now()
 | 
			
		||||
    if q.count() > 0 and (q.first().expiration is None or q.first().expiration.replace(tzinfo=None) > now.replace(tzinfo=None)):
 | 
			
		||||
        return q.first().value
 | 
			
		||||
    return None
 | 
			
		||||
 | 
			
		||||
def getexpir_keyvalproperty(key):
 | 
			
		||||
    q = db.session.query(KeyValueProperties).filter(KeyValueProperties.key == key)
 | 
			
		||||
    now = datetime.now()
 | 
			
		||||
    if q.count() > 0 and (q.first().expiration is not None and q.first().expiration.replace(tzinfo=None) > now.replace(tzinfo=None)):
 | 
			
		||||
        return int(q.first().expiration.strftime('%s'))
 | 
			
		||||
    return 0
 | 
			
		||||
 | 
			
		||||
def setexpir_keyvalproperty(key, expiration=None):
 | 
			
		||||
    q = db.session.query(KeyValueProperties).filter(KeyValueProperties.key == key)
 | 
			
		||||
    if q.count() > 0:
 | 
			
		||||
        if expiration:
 | 
			
		||||
            q.first().expiration = datetime.now()
 | 
			
		||||
        else:
 | 
			
		||||
            q.first().expiration = None
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
 | 
			
		||||
def ifexists_keyvalproperty(key):
 | 
			
		||||
    q = db.session.query(KeyValueProperties).filter(KeyValueProperties.key == key)
 | 
			
		||||
    return q.count() > 0
 | 
			
		||||
 | 
			
		||||
def delete_keyvalproperty(key):
 | 
			
		||||
    q = db.session.query(KeyValueProperties).filter(KeyValueProperties.key == key).first()
 | 
			
		||||
    if q:
 | 
			
		||||
        db.session.delete(q)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
 | 
			
		||||
class KeyValueProperties(db.Model):
 | 
			
		||||
    __tablename__ = "keyvalue_properties"
 | 
			
		||||
    id = db.Column(db.Integer, primary_key=True)                    # Auto incremented id
 | 
			
		||||
    key = db.Column(db.String(255), nullable=False)                 # Property Key
 | 
			
		||||
    value = db.Column(db.Text())                                    # Property value
 | 
			
		||||
    expiration = db.Column(db.TIMESTAMP)                            # Suggested Expiration for value (None = no expire) in secs
 | 
			
		||||
 | 
			
		||||
    def __init__(self, key, value, expiration=None):
 | 
			
		||||
        self.key = key
 | 
			
		||||
        self.value = value
 | 
			
		||||
        if expiration:
 | 
			
		||||
            self.expiration = datetime.now() + timedelta(seconds = expiration)
 | 
			
		||||
        else:
 | 
			
		||||
            self.expiration = None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LimitsKeyValueProperties(Storage): # For Python Limits
 | 
			
		||||
    STORAGE_SCHEME = "keyvalprops"
 | 
			
		||||
    def __init__(self, uri, **options):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def check(self):
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
    def get_expiry(self, key):
 | 
			
		||||
        return getexpir_keyvalproperty(key) + time.time()
 | 
			
		||||
 | 
			
		||||
    def incr(self, key, expiry, elastic_expiry=False):
 | 
			
		||||
        if not ifexists_keyvalproperty(key):
 | 
			
		||||
            set_keyvalproperty(key, 1, expiration=expiry)
 | 
			
		||||
        else:
 | 
			
		||||
            oldexp = getexpir_keyvalproperty(key) - time.time()
 | 
			
		||||
            if oldexp <= 0:
 | 
			
		||||
                delete_keyvalproperty(key)
 | 
			
		||||
                return self.incr(key, expiry, elastic_expiry)
 | 
			
		||||
            set_keyvalproperty(key, int(get_keyvalproperty(key))+1, expiration=int(round(oldexp)))
 | 
			
		||||
        return int(self.get(key))
 | 
			
		||||
 | 
			
		||||
    def get(self, key):
 | 
			
		||||
        value = get_keyvalproperty(key)
 | 
			
		||||
        if value:
 | 
			
		||||
            return int(value)
 | 
			
		||||
        return 0
 | 
			
		||||
 | 
			
		||||
    def reset(self):
 | 
			
		||||
        return False
 | 
			
		||||
		Reference in New Issue
	
	Block a user