Skip to content

Commit

Permalink
Remove institute / region / province / city
Browse files Browse the repository at this point in the history
Leave institute_id as a simple string ID, to be used with an external database of institutes (fetched from olimanager). See olimpiadi-informatica/training-frontend#13
  • Loading branch information
wil93 committed Jan 28, 2025
1 parent 1129a75 commit 2ae43f3
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 138 deletions.
1 change: 0 additions & 1 deletion cmsocial/db/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
71 changes: 0 additions & 71 deletions cmsocial/db/location.py

This file was deleted.

21 changes: 1 addition & 20 deletions cmsocial/db/socialuser.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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
Expand Down
49 changes: 3 additions & 46 deletions cmsocial/server/pws.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -419,27 +418,14 @@ 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
info['global_access_level'] = user.social_user.access_level
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
Expand Down Expand Up @@ -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'
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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']:
Expand Down
21 changes: 21 additions & 0 deletions sql_updaters/2025-01-28-remove-institutes.sql
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit 2ae43f3

Please sign in to comment.