Uppercase the Visibility enum keys

There is currently a mismatch, causing for example project creation via
the web interface to fail, because the validation code is using the enum
keys, which are lowercase, but everything else uses uppercase.

Simply use uppercase everywhere, like already the case in other
services.
This commit is contained in:
Conrad Hoffmann 2022-06-30 23:05:56 +02:00 committed by Drew DeVault
parent 7e78dc04d9
commit d637723564
15 changed files with 55 additions and 50 deletions

View File

@ -42,16 +42,16 @@ def upgrade():
for ml in session.query(MailingList).all():
m = lists.get_list(ml.owner, ml.name)
if any(m["permissions"]["nonsubscriber"]):
ml.visibility = Visibility.public
ml.visibility = Visibility.PUBLIC
else:
ml.visibility = Visibility.unlisted
ml.visibility = Visibility.UNLISTED
for tracker in session.query(Tracker).all():
t = todo.get_tracker(tracker.owner, tracker.name)
if any(t["default_permissions"]["anonymous"]):
tracker.visibility = Visibility.public
tracker.visibility = Visibility.PUBLIC
else:
tracker.visibility = Visibility.unlisted
tracker.visibility = Visibility.UNLISTED
session.commit()

View File

@ -21,7 +21,7 @@ def lists_GET(owner, project_name):
.order_by(MailingList.updated.desc()))
if not current_user or current_user.id != owner.id:
mailing_lists = mailing_lists.filter(
MailingList.visibility == Visibility.public)
MailingList.visibility == Visibility.PUBLIC)
terms = request.args.get("search")
search_error = None
@ -116,9 +116,9 @@ Mailing list for end-user discussion and questions related to the
ml.name = mailing_list["name"]
ml.description = mailing_list["description"]
if any(mailing_list["permissions"]["nonsubscriber"]):
ml.visibility = Visibility.public
ml.visibility = Visibility.PUBLIC
else:
ml.visibility = Visibility.unlisted
ml.visibility = Visibility.UNLISTED
db.session.add(ml)
db.session.flush()
@ -190,9 +190,9 @@ def new_POST(owner, project_name):
ml.name = mailing_list["name"]
ml.description = mailing_list["description"]
if any(mailing_list["permissions"]["nonsubscriber"]):
ml.visibility = Visibility.public
ml.visibility = Visibility.PUBLIC
else:
ml.visibility = Visibility.unlisted
ml.visibility = Visibility.UNLISTED
db.session.add(ml)
db.session.flush()

View File

@ -50,7 +50,7 @@ def summary_GET(owner, project_name):
sources = (SourceRepo.query
.filter(SourceRepo.project_id == project.id)
.filter(SourceRepo.repo_type == RepoType.hg)
.filter(SourceRepo.visibility == Visibility.public)
.filter(SourceRepo.visibility == Visibility.PUBLIC)
.order_by(SourceRepo.updated.desc())
.limit(5))
@ -81,9 +81,9 @@ def summary_GET(owner, project_name):
.outerjoin(SourceRepo)
.outerjoin(MailingList)
.outerjoin(Tracker)
.filter(or_(Event.source_repo == None, SourceRepo.visibility == Visibility.public),
or_(Event.mailing_list == None, MailingList.visibility == Visibility.public),
or_(Event.tracker == None, Tracker.visibility == Visibility.public)))
.filter(or_(Event.source_repo == None, SourceRepo.visibility == Visibility.PUBLIC),
or_(Event.mailing_list == None, MailingList.visibility == Visibility.PUBLIC),
or_(Event.tracker == None, Tracker.visibility == Visibility.PUBLIC)))
events = events.limit(2).all()
return render_template("project-summary.html", view="summary",
@ -99,7 +99,7 @@ def summary_refs(owner, project_name):
sources = (SourceRepo.query
.filter(SourceRepo.project_id == project.id)
.filter(SourceRepo.repo_type == RepoType.git)
.filter(SourceRepo.visibility == Visibility.public)
.filter(SourceRepo.visibility == Visibility.PUBLIC)
.order_by(SourceRepo.updated.desc())
.limit(5))
@ -125,9 +125,9 @@ def feed_GET(owner, project_name):
.outerjoin(SourceRepo)
.outerjoin(MailingList)
.outerjoin(Tracker)
.filter(or_(Event.source_repo == None, SourceRepo.visibility == Visibility.public),
or_(Event.mailing_list == None, MailingList.visibility == Visibility.public),
or_(Event.tracker == None, Tracker.visibility == Visibility.public)))
.filter(or_(Event.source_repo == None, SourceRepo.visibility == Visibility.PUBLIC),
or_(Event.mailing_list == None, MailingList.visibility == Visibility.PUBLIC),
or_(Event.tracker == None, Tracker.visibility == Visibility.PUBLIC)))
events, pagination = paginate_query(events)

View File

@ -29,7 +29,7 @@ def index():
features = (Feature.query
.join(Project, Feature.project_id == Project.id)
.join(User, Project.owner_id == User.id)
.filter(Project.visibility == Visibility.public)
.filter(Project.visibility == Visibility.PUBLIC)
.order_by(Feature.created.desc())
.limit(6)).all()
return render_template("index.html", features=features)
@ -42,7 +42,7 @@ def getting_started():
@public.route("/projects")
def project_index():
projects = Project.query.filter(Project.visibility == Visibility.public)
projects = Project.query.filter(Project.visibility == Visibility.PUBLIC)
search = request.args.get("search")
search_error = None
@ -69,7 +69,7 @@ def project_index():
features = (Feature.query
.join(Project, Feature.project_id == Project.id)
.join(User, Project.owner_id == User.id)
.filter(Project.visibility == Visibility.public)
.filter(Project.visibility == Visibility.PUBLIC)
.order_by(Feature.created.desc())
.limit(5)).all()
@ -82,7 +82,7 @@ def featured_projects():
features = (Feature.query
.join(Project, Feature.project_id == Project.id)
.join(User, Project.owner_id == User.id)
.filter(Project.visibility == Visibility.public)
.filter(Project.visibility == Visibility.PUBLIC)
.order_by(Feature.created.desc()))
features, pagination = paginate_query(features)
return render_template("featured-projects.html",

View File

@ -19,7 +19,7 @@ def sources_GET(owner, project_name):
.filter(SourceRepo.project_id == project.id)
.order_by(SourceRepo.updated.desc()))
if not current_user or current_user.id != owner.id:
sources = sources.filter(SourceRepo.visibility == Visibility.public)
sources = sources.filter(SourceRepo.visibility == Visibility.PUBLIC)
terms = request.args.get("search")
search_error = None

View File

@ -18,7 +18,7 @@ def trackers_GET(owner, project_name):
.filter(Tracker.project_id == project.id)
.order_by(Tracker.updated.desc()))
if not current_user or current_user.id != owner.id:
trackers = trackers.filter(Tracker.visibility == Visibility.public)
trackers = trackers.filter(Tracker.visibility == Visibility.PUBLIC)
terms = request.args.get("search")
search_error = None
@ -90,9 +90,9 @@ def new_POST(owner, project_name):
tracker.name = remote_tracker["name"]
tracker.description = remote_tracker["description"]
if any(remote_tracker["default_access"]):
tracker.visibility = Visibility.public
tracker.visibility = Visibility.PUBLIC
else:
tracker.visibility = Visibility.unlisted
tracker.visibility = Visibility.UNLISTED
db.session.add(tracker)
db.session.flush()

View File

@ -23,17 +23,17 @@ def summary_GET(username):
if not current_user or current_user.id != user.id:
# TODO: ACLs
projects = projects.filter(Project.visibility == Visibility.public)
projects = projects.filter(Project.visibility == Visibility.PUBLIC)
events = (events
.join(Project, Event.project_id == Project.id)
.filter(Project.visibility == Visibility.public))
.filter(Project.visibility == Visibility.PUBLIC))
events = (events
.outerjoin(SourceRepo, Event.source_repo_id == SourceRepo.id)
.outerjoin(MailingList, Event.source_repo_id == MailingList.id)
.outerjoin(Tracker, Event.source_repo_id == Tracker.id)
.filter(or_(Event.source_repo == None, SourceRepo.visibility == Visibility.public),
or_(Event.mailing_list == None, MailingList.visibility == Visibility.public),
or_(Event.tracker == None, Tracker.visibility == Visibility.public)))
.filter(or_(Event.source_repo == None, SourceRepo.visibility == Visibility.PUBLIC),
or_(Event.mailing_list == None, MailingList.visibility == Visibility.PUBLIC),
or_(Event.tracker == None, Tracker.visibility == Visibility.PUBLIC)))
projects = projects.limit(5).all()
events, pagination = paginate_query(events)
@ -53,7 +53,7 @@ def projects_GET(owner):
.filter(Project.owner_id == owner.id))
if not current_user or current_user.id != owner.id:
# TODO: ACLs
projects = projects.filter(Project.visibility == Visibility.public)
projects = projects.filter(Project.visibility == Visibility.PUBLIC)
search = request.args.get("search")
search_error = None

View File

@ -226,9 +226,9 @@ def mailing_list(list_id):
ml.name = payload["name"]
ml.description = payload["description"]
if any(payload["permissions"]["nonsubscriber"]):
ml.visibility = Visibility.public
ml.visibility = Visibility.PUBLIC
else:
ml.visibility = Visibility.unlisted
ml.visibility = Visibility.UNLISTED
ml.project.updated = datetime.utcnow()
db.session.commit()
return f"Updated local:{ml.id}/remote:{ml.remote_id}. Thanks!", 200
@ -293,9 +293,9 @@ def todo_user(user_id):
tracker.name = payload["name"]
tracker.description = payload["description"]
if any(payload["default_access"]):
tracker.visibility = Visibility.public
tracker.visibility = Visibility.PUBLIC
else:
tracker.visibility = Visibility.unlisted
tracker.visibility = Visibility.UNLISTED
tracker.project.updated = datetime.utcnow()
summary += f"Updated local:{tracker.id}/remote:{tracker.remote_id}\n"
db.session.commit()

View File

@ -22,8 +22,8 @@ def get_project(owner, project_name, access, user=current_user):
if access == ProjectAccess.write:
abort(401)
# TODO: ACLs
if project.visibility in (Visibility.public, Visibility.unlisted):
if project.visibility in (Visibility.PUBLIC, Visibility.UNLISTED):
return project.owner, project
elif project.visibility == Visibility.private:
elif project.visibility == Visibility.PRIVATE:
abort(401)
assert False

View File

@ -6,9 +6,9 @@ class User(Base, ExternalUserMixin):
pass
class Visibility(Enum):
public = "PUBLIC"
private = "PRIVATE"
unlisted = "UNLISTED"
PUBLIC = "PUBLIC"
PRIVATE = "PRIVATE"
UNLISTED = "UNLISTED"
from hubsrht.types.event import Event, EventType
from hubsrht.types.feature import Feature

View File

@ -1,5 +1,6 @@
import sqlalchemy as sa
import sqlalchemy_utils as sau
from sqlalchemy.dialects import postgresql
from hubsrht.types import Visibility
from srht.config import get_origin
from srht.database import Base
@ -27,8 +28,8 @@ class MailingList(Base):
name = sa.Column(sa.Unicode(128), nullable=False)
description = sa.Column(sa.Unicode)
visibility = sa.Column(sau.ChoiceType(Visibility, impl=sa.String()),
nullable=False, server_default="unlisted")
visibility = sa.Column(postgresql.ENUM(Visibility),
nullable=False, server_default="UNLISTED")
def url(self):
return f"{_listsrht}/{self.owner.canonical_name}/{self.name}"

View File

@ -1,5 +1,6 @@
import sqlalchemy as sa
import sqlalchemy_utils as sau
from sqlalchemy.dialects import postgresql
from hubsrht.types import Visibility
from srht.database import Base
@ -20,8 +21,8 @@ class Project(Base):
tags = sa.Column(sa.ARRAY(sa.String(16), dimensions=1),
nullable=False, server_default="{}")
website = sa.Column(sa.Unicode)
visibility = sa.Column(sau.ChoiceType(Visibility, impl=sa.String()),
nullable=False, server_default="unlisted")
visibility = sa.Column(postgresql.ENUM(Visibility),
nullable=False, server_default="UNLISTED")
checklist_complete = sa.Column(sa.Boolean,
nullable=False, server_default='f')

View File

@ -1,5 +1,6 @@
import sqlalchemy as sa
import sqlalchemy_utils as sau
from sqlalchemy.dialects import postgresql
from hubsrht.types import Visibility
from srht.database import Base
from enum import Enum
@ -20,5 +21,5 @@ class Repository(Base):
name = sa.Column(sa.Unicode(128), nullable=False)
description = sa.Column(sa.Unicode(512), nullable=False)
visibility = sa.Column(sau.ChoiceType(Visibility, impl=sa.String()),
nullable=False, server_default="unlisted")
visibility = sa.Column(postgresql.ENUM(Visibility),
nullable=False, server_default="UNLISTED")

View File

@ -1,5 +1,6 @@
import sqlalchemy as sa
import sqlalchemy_utils as sau
from sqlalchemy.dialects import postgresql
from enum import Enum
from hubsrht.types import Visibility
from srht.config import get_origin
@ -40,8 +41,8 @@ class SourceRepo(Base):
description = sa.Column(sa.Unicode)
repo_type = sa.Column(sau.ChoiceType(RepoType, impl=sa.String()),
nullable=False)
visibility = sa.Column(sau.ChoiceType(Visibility, impl=sa.String()),
nullable=False, server_default="unlisted")
visibility = sa.Column(postgresql.ENUM(Visibility),
nullable=False, server_default="UNLISTED")
def url(self):
origin = _gitsrht if self.repo_type == RepoType.git else _hgsrht

View File

@ -1,5 +1,6 @@
import sqlalchemy as sa
import sqlalchemy_utils as sau
from sqlalchemy.dialects import postgresql
from hubsrht.types import Visibility
from srht.config import get_origin
from srht.database import Base
@ -26,8 +27,8 @@ class Tracker(Base):
name = sa.Column(sa.Unicode(128), nullable=False)
description = sa.Column(sa.Unicode)
visibility = sa.Column(sau.ChoiceType(Visibility, impl=sa.String()),
nullable=False, server_default="unlisted")
visibility = sa.Column(postgresql.ENUM(Visibility),
nullable=False, server_default="UNLISTED")
def url(self):
return f"{_todosrht}/{self.owner.canonical_name}/{self.name}"