psql-migration-fixes
This commit is contained in:
parent
0cd6761dd3
commit
450cf89b50
|
@ -7,6 +7,9 @@ from migration.tables.content_items import get_shout_slug, migrate as migrateSho
|
||||||
from migration.tables.topics import migrate as migrateTopic
|
from migration.tables.topics import migrate as migrateTopic
|
||||||
from migration.tables.comments import migrate as migrateComment
|
from migration.tables.comments import migrate as migrateComment
|
||||||
from migration.tables.comments import migrate_2stage as migrateComment_2stage
|
from migration.tables.comments import migrate_2stage as migrateComment_2stage
|
||||||
|
from orm.base import local_session
|
||||||
|
from orm.community import Community
|
||||||
|
from orm.user import User
|
||||||
|
|
||||||
OLD_DATE = '2016-03-05 22:22:00.350000'
|
OLD_DATE = '2016-03-05 22:22:00.350000'
|
||||||
|
|
||||||
|
|
|
@ -1037,5 +1037,5 @@ def html2text(html: str, baseurl: str = "", bodywidth: Optional[int] = config.BO
|
||||||
if h:
|
if h:
|
||||||
h = HTML2Text(baseurl=baseurl, bodywidth=bodywidth)
|
h = HTML2Text(baseurl=baseurl, bodywidth=bodywidth)
|
||||||
h = h.handle(html.strip())
|
h = h.handle(html.strip())
|
||||||
print('[html2text] %d bytes' % len(html))
|
# print('[html2text] %d bytes' % len(html))
|
||||||
return h
|
return h
|
||||||
|
|
|
@ -57,7 +57,7 @@ def migrate(entry, storage):
|
||||||
author = session.query(User).filter(User.oid == entry['createdBy']).first()
|
author = session.query(User).filter(User.oid == entry['createdBy']).first()
|
||||||
shout_dict = storage['shouts']['by_oid'][shout_oid]
|
shout_dict = storage['shouts']['by_oid'][shout_oid]
|
||||||
if shout_dict:
|
if shout_dict:
|
||||||
comment_dict['shout'] = shout_dict['oid']
|
comment_dict['shout'] = shout_dict['slug']
|
||||||
comment_dict['createdBy'] = author.slug if author else 'discours'
|
comment_dict['createdBy'] = author.slug if author else 'discours'
|
||||||
# FIXME if entry.get('deleted'): comment_dict['deletedAt'] = date_parse(entry['updatedAt']) or ts
|
# FIXME if entry.get('deleted'): comment_dict['deletedAt'] = date_parse(entry['updatedAt']) or ts
|
||||||
# comment_dict['deletedBy'] = session.query(User).filter(User.oid == (entry.get('updatedBy') or dd['oid'])).first()
|
# comment_dict['deletedBy'] = session.query(User).filter(User.oid == (entry.get('updatedBy') or dd['oid'])).first()
|
||||||
|
|
|
@ -7,14 +7,6 @@ from orm.base import local_session
|
||||||
from migration.extract import prepare_body
|
from migration.extract import prepare_body
|
||||||
from orm.community import Community
|
from orm.community import Community
|
||||||
|
|
||||||
DISCOURS_USER = {
|
|
||||||
'id': 9999999,
|
|
||||||
'slug': 'discours',
|
|
||||||
'name': 'Дискурс',
|
|
||||||
'email': 'welcome@discours.io',
|
|
||||||
'userpic': 'https://discours.io/images/logo-mini.svg',
|
|
||||||
'createdAt': '2016-03-05 22:22:00.350000'
|
|
||||||
}
|
|
||||||
OLD_DATE = '2016-03-05 22:22:00.350000'
|
OLD_DATE = '2016-03-05 22:22:00.350000'
|
||||||
ts = datetime.now()
|
ts = datetime.now()
|
||||||
type2layout = {
|
type2layout = {
|
||||||
|
@ -38,7 +30,7 @@ def migrate(entry, storage):
|
||||||
r = {
|
r = {
|
||||||
'layout': type2layout[entry['type']],
|
'layout': type2layout[entry['type']],
|
||||||
'title': entry['title'],
|
'title': entry['title'],
|
||||||
'community': 0,
|
'community': Community.default_community.id,
|
||||||
'authors': [],
|
'authors': [],
|
||||||
'topics': set([]),
|
'topics': set([]),
|
||||||
'rating': 0,
|
'rating': 0,
|
||||||
|
@ -70,12 +62,7 @@ def migrate(entry, storage):
|
||||||
'wasOnlineAt': ts
|
'wasOnlineAt': ts
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
userdata = {
|
userdata = User.default_user.dict()
|
||||||
'name': 'Дискурс',
|
|
||||||
'slug': 'discours',
|
|
||||||
'email': 'welcome@discours.io',
|
|
||||||
'userpic': 'https://discours.io/image/logo-mini.svg'
|
|
||||||
}
|
|
||||||
assert userdata, 'no user found for %s from ' % [oid, len(users_by_oid.keys())]
|
assert userdata, 'no user found for %s from ' % [oid, len(users_by_oid.keys())]
|
||||||
r['authors'] = [userdata, ]
|
r['authors'] = [userdata, ]
|
||||||
|
|
||||||
|
@ -151,7 +138,7 @@ def migrate(entry, storage):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
s = Shout.create(**shout_dict)
|
s = Shout.create(**shout_dict)
|
||||||
except sqlalchemy.exc.IntegrityError:
|
except sqlalchemy.exc.IntegrityError as e:
|
||||||
with local_session() as session:
|
with local_session() as session:
|
||||||
s = session.query(Shout).filter(Shout.slug == shout_dict['slug']).first()
|
s = session.query(Shout).filter(Shout.slug == shout_dict['slug']).first()
|
||||||
bump = False
|
bump = False
|
||||||
|
@ -168,6 +155,7 @@ def migrate(entry, storage):
|
||||||
s.update(shout_dict)
|
s.update(shout_dict)
|
||||||
else:
|
else:
|
||||||
print('[migration] something went wrong with shout: \n%r' % shout_dict)
|
print('[migration] something went wrong with shout: \n%r' % shout_dict)
|
||||||
|
raise e
|
||||||
session.commit()
|
session.commit()
|
||||||
except:
|
except:
|
||||||
print(s)
|
print(s)
|
||||||
|
@ -182,15 +170,17 @@ def migrate(entry, storage):
|
||||||
if newslug:
|
if newslug:
|
||||||
with local_session() as session:
|
with local_session() as session:
|
||||||
shout_topic_old = session.query(ShoutTopic)\
|
shout_topic_old = session.query(ShoutTopic)\
|
||||||
.filter(ShoutTopic.shout == s.slug)\
|
.filter(ShoutTopic.shout == shout_dict['slug'])\
|
||||||
.filter(ShoutTopic.topic == oldslug).first()
|
.filter(ShoutTopic.topic == oldslug).first()
|
||||||
if shout_topic_old:
|
if shout_topic_old:
|
||||||
shout_topic_old.update({ 'slug': newslug })
|
shout_topic_old.update({ 'slug': newslug })
|
||||||
else:
|
else:
|
||||||
shout_topic_new = session.query(ShoutTopic)\
|
shout_topic_new = session.query(ShoutTopic)\
|
||||||
.filter(ShoutTopic.shout == s.slug)\
|
.filter(ShoutTopic.shout == shout_dict['slug'])\
|
||||||
.filter(ShoutTopic.topic == newslug).first()
|
.filter(ShoutTopic.topic == newslug).first()
|
||||||
if not shout_topic_new: ShoutTopic.create(**{ 'shout': s.slug, 'topic': newslug })
|
if not shout_topic_new:
|
||||||
|
try: ShoutTopic.create(**{ 'shout': shout_dict['slug'], 'topic': newslug })
|
||||||
|
except: print('[migration] shout topic error: ' + newslug)
|
||||||
session.commit()
|
session.commit()
|
||||||
if newslug not in shout_dict['topics']:
|
if newslug not in shout_dict['topics']:
|
||||||
shout_dict['topics'].append(newslug)
|
shout_dict['topics'].append(newslug)
|
||||||
|
@ -208,12 +198,12 @@ def migrate(entry, storage):
|
||||||
shout_rating_dict = {
|
shout_rating_dict = {
|
||||||
'value': shout_rating_old['value'],
|
'value': shout_rating_old['value'],
|
||||||
'rater': rater.slug,
|
'rater': rater.slug,
|
||||||
'shout': s.slug
|
'shout': shout_dict['slug']
|
||||||
}
|
}
|
||||||
cts = shout_rating_old.get('createdAt')
|
cts = shout_rating_old.get('createdAt')
|
||||||
if cts: shout_rating_dict['ts'] = date_parse(cts)
|
if cts: shout_rating_dict['ts'] = date_parse(cts)
|
||||||
shout_rating = session.query(ShoutRating).\
|
shout_rating = session.query(ShoutRating).\
|
||||||
filter(ShoutRating.shout == s.slug).\
|
filter(ShoutRating.shout == shout_dict['slug']).\
|
||||||
filter(ShoutRating.rater == rater.slug).first()
|
filter(ShoutRating.rater == rater.slug).first()
|
||||||
if shout_rating:
|
if shout_rating:
|
||||||
shout_rating_dict['value'] = int(shout_rating_dict['value'] or 0) + int(shout_rating.value or 0)
|
shout_rating_dict['value'] = int(shout_rating_dict['value'] or 0) + int(shout_rating.value or 0)
|
||||||
|
@ -225,7 +215,7 @@ def migrate(entry, storage):
|
||||||
# raise Exception
|
# raise Exception
|
||||||
|
|
||||||
# shout views
|
# shout views
|
||||||
ShoutViewByDay.create( shout = s.slug, value = entry.get('views', 1) )
|
ShoutViewByDay.create( shout = shout_dict['slug'], value = entry.get('views', 1) )
|
||||||
del shout_dict['ratings']
|
del shout_dict['ratings']
|
||||||
shout_dict['oid'] = entry.get('_id')
|
shout_dict['oid'] = entry.get('_id')
|
||||||
storage['shouts']['by_oid'][entry['_id']] = shout_dict
|
storage['shouts']['by_oid'][entry['_id']] = shout_dict
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from enum import unique
|
||||||
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime
|
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime
|
||||||
from sqlalchemy.orm import relationship, backref
|
from sqlalchemy.orm import relationship, backref
|
||||||
from orm.base import Base, local_session
|
from orm.base import Base, local_session
|
||||||
|
@ -16,7 +17,7 @@ class Community(Base):
|
||||||
__tablename__ = 'community'
|
__tablename__ = 'community'
|
||||||
|
|
||||||
name: str = Column(String, nullable=False, comment="Name")
|
name: str = Column(String, nullable=False, comment="Name")
|
||||||
slug: str = Column(String, nullable = False)
|
slug: str = Column(String, nullable = False, unique=True, comment="Slug")
|
||||||
desc: str = Column(String, nullable=False, default='')
|
desc: str = Column(String, nullable=False, default='')
|
||||||
pic: str = Column(String, nullable=False, default='')
|
pic: str = Column(String, nullable=False, default='')
|
||||||
createdAt: str = Column(DateTime, nullable=False, default = datetime.now, comment="Created at")
|
createdAt: str = Column(DateTime, nullable=False, default = datetime.now, comment="Created at")
|
||||||
|
@ -30,7 +31,7 @@ class Community(Base):
|
||||||
default = Community.create(
|
default = Community.create(
|
||||||
name = "Дискурс",
|
name = "Дискурс",
|
||||||
slug = "discours",
|
slug = "discours",
|
||||||
createdBy = 0 #TODO: use default user
|
createdBy = "discours"
|
||||||
)
|
)
|
||||||
|
|
||||||
Community.default_community = default
|
Community.default_community = default
|
||||||
|
|
|
@ -73,13 +73,14 @@ class User(Base):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def init_table():
|
def init_table():
|
||||||
with local_session() as session:
|
with local_session() as session:
|
||||||
default = session.query(User).filter(User.slug == "default").first()
|
default = session.query(User).filter(User.slug == "discours").first()
|
||||||
if not default:
|
if not default:
|
||||||
default = User.create(
|
default = User.create(
|
||||||
id = 0,
|
id = 0,
|
||||||
email = "discours@discours.io",
|
email = "welcome@discours.io",
|
||||||
username = "discours",
|
username = "welcome@discours.io",
|
||||||
slug = "default"
|
slug = "discours",
|
||||||
|
userpic = 'https://discours.io/images/logo-mini.svg',
|
||||||
)
|
)
|
||||||
|
|
||||||
User.default_user = default
|
User.default_user = default
|
||||||
|
|
|
@ -10,7 +10,7 @@ RESET_PWD_URL = environ.get("RESET_PWD_URL") or "https://localhost:8080/reset_pw
|
||||||
CONFIRM_EMAIL_URL = environ.get("CONFIRM_EMAIL_URL") or "https://new.discours.io"
|
CONFIRM_EMAIL_URL = environ.get("CONFIRM_EMAIL_URL") or "https://new.discours.io"
|
||||||
ERROR_URL_ON_FRONTEND = environ.get("ERROR_URL_ON_FRONTEND") or "https://new.discours.io"
|
ERROR_URL_ON_FRONTEND = environ.get("ERROR_URL_ON_FRONTEND") or "https://new.discours.io"
|
||||||
|
|
||||||
DB_URL = environ.get("DATABASE_URL") or environ.get("DB_URL") or "postgres://localhost:5432" or "sqlite:///db.sqlite3"
|
DB_URL = environ.get("DATABASE_URL") or environ.get("DB_URL") or "postgresql://localhost:5432/discoursio" or "sqlite:///db.sqlite3"
|
||||||
JWT_ALGORITHM = "HS256"
|
JWT_ALGORITHM = "HS256"
|
||||||
JWT_SECRET_KEY = "8f1bd7696ffb482d8486dfbc6e7d16dd-secret-key"
|
JWT_SECRET_KEY = "8f1bd7696ffb482d8486dfbc6e7d16dd-secret-key"
|
||||||
JWT_LIFE_SPAN = 24 * 60 * 60 # seconds
|
JWT_LIFE_SPAN = 24 * 60 * 60 # seconds
|
||||||
|
|
Loading…
Reference in New Issue
Block a user