diff --git a/cmsocial/db/__init__.py b/cmsocial/db/__init__.py index 96a4adb..e7111ed 100644 --- a/cmsocial/db/__init__.py +++ b/cmsocial/db/__init__.py @@ -7,7 +7,6 @@ from cmsocial.db.socialcontest import SocialContest from cmsocial.db.lesson import Lesson, LessonTask from cmsocial.db.test import Test, TestQuestion, QuestionFile, TestScore -from cmsocial.db.location import Region, Province, City, Institute from cmsocial.db.material import Material from sqlalchemy.orm import relationship SocialUser.tasktags = relationship("TaskTag") diff --git a/cmsocial/db/location.py b/cmsocial/db/location.py deleted file mode 100644 index fba4b1c..0000000 --- a/cmsocial/db/location.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- - -from sqlalchemy.schema import Column, ForeignKey -from sqlalchemy.types import Integer, Unicode -from sqlalchemy.orm import relationship, backref - -from cmsocial.db.base import Base - - -class Region(Base): - __tablename__ = 'regions' - - id = Column(Integer, primary_key=True, unique=True) - name = Column(Unicode) - - -class Province(Base): - __tablename__ = 'provinces' - - id = Column(Integer, primary_key=True, unique=True) - name = Column(Unicode) - - region_id = Column( - Integer, - ForeignKey(Region.id, - onupdate="CASCADE", ondelete="CASCADE"), - nullable=False, - index=True) - region = relationship( - Region, - backref=backref("provinces", - cascade="all, delete-orphan", - passive_deletes=True)) - - -class City(Base): - __tablename__ = 'cities' - - id = Column(Integer, primary_key=True, unique=True) - name = Column(Unicode) - - province_id = Column( - Integer, - ForeignKey(Province.id, - onupdate="CASCADE", ondelete="CASCADE"), - nullable=False, - index=True) - province = relationship( - Province, - backref=backref("cities", - cascade="all, delete-orphan", - passive_deletes=True)) - - -class Institute(Base): - __tablename__ = 'institutes' - - id = Column(Integer, primary_key=True, unique=True) - name = Column(Unicode) - - city_id = Column( - Integer, - ForeignKey(City.id, - onupdate="CASCADE", ondelete="CASCADE"), - nullable=False, - index=True) - city = relationship( - City, - backref=backref("institutes", - cascade="all, delete-orphan", - passive_deletes=True)) diff --git a/cmsocial/db/socialuser.py b/cmsocial/db/socialuser.py index d9df6f6..1292b5c 100644 --- a/cmsocial/db/socialuser.py +++ b/cmsocial/db/socialuser.py @@ -18,7 +18,6 @@ from cms.db import Contest, Participation, User from cmsocial.db.base import Base -from cmsocial.db.location import Institute class SocialUser(Base): @@ -76,25 +75,7 @@ class SocialUser(Base): # CUSTOM FIELDS: # Institute - institute_id = Column( - Integer, - ForeignKey( - Institute.id, - onupdate="CASCADE", - ondelete="SET NULL" - ), - nullable=True, - index=True - ) - - institute = relationship( - Institute, - backref=backref( - "users", - cascade="all, delete-orphan", - passive_deletes=True - ) - ) + institute_id = Column(String, nullable=True, index=True) # List of tasktags (not "approved" yet) created by this user # FIXME: the following causes a circular dependency diff --git a/cmsocial/server/pws.py b/cmsocial/server/pws.py index f59466c..4a75453 100644 --- a/cmsocial/server/pws.py +++ b/cmsocial/server/pws.py @@ -55,7 +55,6 @@ from cmscommon.datetime import make_datetime, make_timestamp from cmsocial.db.lesson import Lesson from cmsocial.db.material import Material -from cmsocial.db.location import City, Institute, Province, Region from cmsocial.db.socialcontest import SocialContest from cmsocial.db.socialtask import SocialTask, Tag, TaskScore, TaskTag from cmsocial.db.socialuser import SocialParticipation, SocialUser @@ -419,18 +418,6 @@ def send_mail(self, to, subject, body): server.quit() return sent - def get_institute_info(self, institute_id): - info = dict() - if institute_id is not None: - institute = local.session.query(Institute)\ - .filter(Institute.id == institute_id).first() - info['id'] = institute.id - info['name'] = institute.name - info['city'] = institute.city.name - info['province'] = institute.city.province.name - info['region'] = institute.city.province.region.name - return info - def get_user_info(self, user): info = dict() info['username'] = user.username @@ -438,8 +425,7 @@ def get_user_info(self, user): info['access_level'] = info['global_access_level'] info['join_date'] = make_timestamp(user.social_user.registration_time) info['mail_hash'] = self.hash(user.email, 'md5') - info['institute'] = self.get_institute_info( - user.social_user.institute_id) + info['institute'] = user.social_user.institute_id info['first_name'] = user.first_name info['last_name'] = user.last_name info['tasks_solved'] = -1 @@ -582,35 +568,6 @@ def check_handler(self): return 'Bad request' return err - def location_handler(self): - if local.data['action'] == 'get': - institute = local.session.query(Institute)\ - .filter(Institute.id == local.data['id']).first() - if institute is None: - return 'Not found' - local.resp = self.get_institute_info(institute) - elif local.data['action'] == 'listregions': - out = local.session.query(Region).all() - local.resp['regions'] = [{'id': r.id, 'name': r.name} for r in out] - elif local.data['action'] == 'listprovinces': - out = local.session.query(Province)\ - .filter(Province.region_id == local.data['id']).all() - local.resp['provinces'] = [{ - 'id': r.id, - 'name': r.name - } for r in out] - elif local.data['action'] == 'listcities': - out = local.session.query(City)\ - .filter(City.province_id == local.data['id']).all() - local.resp['cities'] = [{'id': r.id, 'name': r.name} for r in out] - elif local.data['action'] == 'listinstitutes': - out = local.session.query(Institute)\ - .filter(Institute.city_id == local.data['id']).all() - local.resp['institutes'] = [{ - 'id': r.id, - 'name': r.name - } for r in out] - def sso_handler(self): if local.user is None: return 'Unauthorized' @@ -696,7 +653,7 @@ def user_handler(self): social_user.user = user if 'institute' in local.data: - social_user.institute_id = int(local.data['institute']) + social_user.institute_id = local.data['institute'] try: local.session.add(user) @@ -823,7 +780,7 @@ def user_handler(self): return 'Unauthorized' if 'institute' in local.data and \ local.data['institute'] is not None: - local.user.institute_id = int(local.data['institute']) + local.user.institute_id = local.data['institute'] if 'email' in local.data and \ local.data['email'] != '' and \ local.user.email != local.data['email']: diff --git a/sql_updaters/2025-01-28-remove-institutes.sql b/sql_updaters/2025-01-28-remove-institutes.sql new file mode 100644 index 0000000..324cc71 --- /dev/null +++ b/sql_updaters/2025-01-28-remove-institutes.sql @@ -0,0 +1,21 @@ +BEGIN; + +ALTER TABLE + social_users DROP COLUMN institute_id; + +DROP TABLE institutes; + +DROP TABLE cities; + +DROP TABLE provinces; + +DROP TABLE regions; + +ALTER TABLE + social_users +ADD + COLUMN institute_id VARCHAR; + +CREATE INDEX ON social_users (institute_id); + +ROLLBACK;