mirror of
https://github.com/gryf/slack-backup.git
synced 2025-12-17 11:30:25 +01:00
Added Attachement object, fixed some sqlite-specific issues
This commit is contained in:
@@ -3,7 +3,7 @@ Convinient object mapping from slack API reponses
|
|||||||
"""
|
"""
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from sqlalchemy import Column, Integer, Text, Boolean, ForeignKey, Float
|
from sqlalchemy import Column, Integer, Text, Boolean, ForeignKey
|
||||||
from sqlalchemy import DateTime
|
from sqlalchemy import DateTime
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
@@ -118,6 +118,7 @@ class UserProfile(Base):
|
|||||||
last_name = Column(Text)
|
last_name = Column(Text)
|
||||||
real_name = Column(Text)
|
real_name = Column(Text)
|
||||||
real_name_normalized = Column(Text)
|
real_name_normalized = Column(Text)
|
||||||
|
image_path = Column(Text)
|
||||||
|
|
||||||
user_id = Column(Integer, ForeignKey("users.id"), index=True)
|
user_id = Column(Integer, ForeignKey("users.id"), index=True)
|
||||||
user = relationship("User", back_populates="profile")
|
user = relationship("User", back_populates="profile")
|
||||||
@@ -206,9 +207,18 @@ class Message(Base):
|
|||||||
__tablename__ = "messages"
|
__tablename__ = "messages"
|
||||||
|
|
||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
ts = Column(Float, index=True)
|
# NOTE(gryf): timestamp from messages are coming as text. It might be
|
||||||
|
# tempting to store them as Decimal or Integer, but it doesn't really
|
||||||
|
# matters since in case of Decimal sqlite doesn't support it, and Integer
|
||||||
|
# require additional conversion. It might be critical for messages to have
|
||||||
|
# exact timestamp including microseconds, since it will be extracted for
|
||||||
|
# API query. Such query have an option for specify timestam which is the
|
||||||
|
# oldest, that's why it could be easy to lost some messages if the
|
||||||
|
# difference would be on microseconds level.
|
||||||
|
ts = Column(Text, index=True)
|
||||||
text = Column(Text)
|
text = Column(Text)
|
||||||
type = Column(Text)
|
type = Column(Text)
|
||||||
|
is_starred = Column(Boolean, default=False)
|
||||||
|
|
||||||
user_id = Column(Integer, ForeignKey("users.id"), nullable=True,
|
user_id = Column(Integer, ForeignKey("users.id"), nullable=True,
|
||||||
index=True)
|
index=True)
|
||||||
@@ -220,6 +230,7 @@ class Message(Base):
|
|||||||
|
|
||||||
reactions = relationship("Reaction", back_populates="message")
|
reactions = relationship("Reaction", back_populates="message")
|
||||||
files = relationship("File", back_populates="message")
|
files = relationship("File", back_populates="message")
|
||||||
|
attachments = relationship("Attachment", back_populates="message")
|
||||||
|
|
||||||
def __init__(self, data_dict=None):
|
def __init__(self, data_dict=None):
|
||||||
self.update(data_dict)
|
self.update(data_dict)
|
||||||
@@ -230,7 +241,7 @@ class Message(Base):
|
|||||||
def update(self, data_dict):
|
def update(self, data_dict):
|
||||||
data_dict = data_dict or {}
|
data_dict = data_dict or {}
|
||||||
|
|
||||||
self.ts = float(data_dict.get('ts', 0))
|
self.ts = data_dict.get('ts', 0)
|
||||||
self.text = data_dict.get('text', '')
|
self.text = data_dict.get('text', '')
|
||||||
self.type = data_dict.get('subtype', '')
|
self.type = data_dict.get('subtype', '')
|
||||||
|
|
||||||
@@ -240,8 +251,40 @@ class File(Base):
|
|||||||
|
|
||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
url = Column(Text)
|
url = Column(Text)
|
||||||
thumbnail = Column(Text)
|
name = Column(Text)
|
||||||
relative_path = Column(Text)
|
title = Column(Text)
|
||||||
|
filepath = Column(Text)
|
||||||
|
|
||||||
message_id = Column(Integer, ForeignKey('messages.id'))
|
message_id = Column(Integer, ForeignKey('messages.id'))
|
||||||
message = relationship('Message', back_populates='files')
|
message = relationship('Message', back_populates='files')
|
||||||
|
|
||||||
|
def __init__(self, data_dict=None):
|
||||||
|
self.update(data_dict)
|
||||||
|
|
||||||
|
def update(self, data_dict):
|
||||||
|
data_dict = data_dict or {}
|
||||||
|
|
||||||
|
self.name = data_dict.get('name', '')
|
||||||
|
self.title = data_dict.get('title', '')
|
||||||
|
|
||||||
|
|
||||||
|
class Attachment(Base):
|
||||||
|
__tablename__ = "attachments"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True)
|
||||||
|
title = Column(Text)
|
||||||
|
fallback = Column(Text)
|
||||||
|
text = Column(Text)
|
||||||
|
|
||||||
|
message_id = Column(Integer, ForeignKey('messages.id'))
|
||||||
|
message = relationship('Message', back_populates='attachments')
|
||||||
|
|
||||||
|
def __init__(self, data_dict=None):
|
||||||
|
self.update(data_dict)
|
||||||
|
|
||||||
|
def update(self, data_dict):
|
||||||
|
data_dict = data_dict or {}
|
||||||
|
|
||||||
|
self.title = data_dict.get('title', '')
|
||||||
|
self.text = data_dict.get('text', '')
|
||||||
|
self.fallback = data_dict.get('fallback', '')
|
||||||
|
|||||||
Reference in New Issue
Block a user