mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-17 15:03:02 +00:00
trade backref for back_populates
backref considered 'legacy', and back_populates makes it easier to specify lazy loading options
This commit is contained in:
@@ -29,7 +29,6 @@ from sqlalchemy import (
|
||||
)
|
||||
from sqlalchemy.orm import (
|
||||
Session,
|
||||
backref,
|
||||
declarative_base,
|
||||
interfaces,
|
||||
object_session,
|
||||
@@ -139,6 +138,9 @@ class Server(Base):
|
||||
base_url = Column(Unicode(255), default='/')
|
||||
cookie_name = Column(Unicode(255), default='cookie')
|
||||
|
||||
service = relationship("Service", back_populates="server", uselist=False)
|
||||
spawner = relationship("Spawner", back_populates="server", uselist=False)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Server({self.ip}:{self.port})>"
|
||||
|
||||
@@ -178,9 +180,11 @@ class Role(Base):
|
||||
name = Column(Unicode(255), unique=True)
|
||||
description = Column(Unicode(1023))
|
||||
scopes = Column(JSONList, default=[])
|
||||
users = relationship('User', secondary='user_role_map', backref='roles')
|
||||
services = relationship('Service', secondary='service_role_map', backref='roles')
|
||||
groups = relationship('Group', secondary='group_role_map', backref='roles')
|
||||
users = relationship('User', secondary='user_role_map', back_populates='roles')
|
||||
services = relationship(
|
||||
'Service', secondary='service_role_map', back_populates='roles'
|
||||
)
|
||||
groups = relationship('Group', secondary='group_role_map', back_populates='roles')
|
||||
|
||||
def __repr__(self):
|
||||
return "<{} {} ({}) - scopes: {}>".format(
|
||||
@@ -213,8 +217,9 @@ class Group(Base):
|
||||
__tablename__ = 'groups'
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
name = Column(Unicode(255), unique=True)
|
||||
users = relationship('User', secondary='user_group_map', backref='groups')
|
||||
users = relationship('User', secondary='user_group_map', back_populates='groups')
|
||||
properties = Column(JSONDict, default={})
|
||||
roles = relationship('Role', secondary='group_role_map', back_populates='groups')
|
||||
|
||||
def __repr__(self):
|
||||
return f"<{self.__class__.__name__} {self.name}>"
|
||||
@@ -254,8 +259,10 @@ class User(Base):
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
name = Column(Unicode(255), unique=True)
|
||||
|
||||
roles = relationship('Role', secondary='user_role_map', back_populates='users')
|
||||
|
||||
_orm_spawners = relationship(
|
||||
"Spawner", backref="user", cascade="all, delete-orphan"
|
||||
"Spawner", back_populates="user", cascade="all, delete-orphan"
|
||||
)
|
||||
|
||||
@property
|
||||
@@ -266,9 +273,16 @@ class User(Base):
|
||||
created = Column(DateTime, default=datetime.utcnow)
|
||||
last_activity = Column(DateTime, nullable=True)
|
||||
|
||||
api_tokens = relationship("APIToken", backref="user", cascade="all, delete-orphan")
|
||||
api_tokens = relationship(
|
||||
"APIToken", back_populates="user", cascade="all, delete-orphan"
|
||||
)
|
||||
groups = relationship(
|
||||
"Group",
|
||||
secondary='user_group_map',
|
||||
back_populates="users",
|
||||
)
|
||||
oauth_codes = relationship(
|
||||
"OAuthCode", backref="user", cascade="all, delete-orphan"
|
||||
"OAuthCode", back_populates="user", cascade="all, delete-orphan"
|
||||
)
|
||||
cookie_id = Column(Unicode(255), default=new_token, nullable=False, unique=True)
|
||||
# User.state is actually Spawner state
|
||||
@@ -308,11 +322,12 @@ class Spawner(Base):
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
user_id = Column(Integer, ForeignKey('users.id', ondelete='CASCADE'))
|
||||
user = relationship("User", back_populates="_orm_spawners")
|
||||
|
||||
server_id = Column(Integer, ForeignKey('servers.id', ondelete='SET NULL'))
|
||||
server = relationship(
|
||||
Server,
|
||||
backref=backref('spawner', uselist=False),
|
||||
back_populates="spawner",
|
||||
single_parent=True,
|
||||
cascade="all, delete-orphan",
|
||||
)
|
||||
@@ -334,7 +349,7 @@ class Spawner(Base):
|
||||
)
|
||||
oauth_client = relationship(
|
||||
'OAuthClient',
|
||||
backref=backref("spawner", uselist=False),
|
||||
back_populates="spawner",
|
||||
cascade="all, delete-orphan",
|
||||
single_parent=True,
|
||||
)
|
||||
@@ -375,16 +390,19 @@ class Service(Base):
|
||||
# common user interface:
|
||||
name = Column(Unicode(255), unique=True)
|
||||
admin = Column(Boolean(create_constraint=False), default=False)
|
||||
roles = relationship(
|
||||
'Role', secondary='service_role_map', back_populates='services'
|
||||
)
|
||||
|
||||
api_tokens = relationship(
|
||||
"APIToken", backref="service", cascade="all, delete-orphan"
|
||||
"APIToken", back_populates="service", cascade="all, delete-orphan"
|
||||
)
|
||||
|
||||
# service-specific interface
|
||||
_server_id = Column(Integer, ForeignKey('servers.id', ondelete='SET NULL'))
|
||||
server = relationship(
|
||||
Server,
|
||||
backref=backref('service', uselist=False),
|
||||
back_populates="service",
|
||||
single_parent=True,
|
||||
cascade="all, delete-orphan",
|
||||
)
|
||||
@@ -400,7 +418,7 @@ class Service(Base):
|
||||
)
|
||||
oauth_client = relationship(
|
||||
'OAuthClient',
|
||||
backref=backref("service", uselist=False),
|
||||
back_populates="service",
|
||||
cascade="all, delete-orphan",
|
||||
single_parent=True,
|
||||
)
|
||||
@@ -575,6 +593,10 @@ class APIToken(Hashed, Base):
|
||||
nullable=True,
|
||||
)
|
||||
|
||||
user = relationship("User", back_populates="api_tokens")
|
||||
service = relationship("Service", back_populates="api_tokens")
|
||||
oauth_client = relationship("OAuthClient", back_populates="access_tokens")
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
hashed = Column(Unicode(255), unique=True)
|
||||
prefix = Column(Unicode(16), index=True)
|
||||
@@ -780,12 +802,14 @@ class OAuthCode(Expiring, Base):
|
||||
client_id = Column(
|
||||
Unicode(255), ForeignKey('oauth_clients.identifier', ondelete='CASCADE')
|
||||
)
|
||||
client = relationship("OAuthClient", back_populates="codes")
|
||||
code = Column(Unicode(36))
|
||||
expires_at = Column(Integer)
|
||||
redirect_uri = Column(Unicode(1023))
|
||||
session_id = Column(Unicode(255))
|
||||
# state = Column(Unicode(1023))
|
||||
user_id = Column(Integer, ForeignKey('users.id', ondelete='CASCADE'))
|
||||
user = relationship("User", back_populates="oauth_codes")
|
||||
|
||||
scopes = Column(JSONList, default=[])
|
||||
|
||||
@@ -820,10 +844,14 @@ class OAuthClient(Base):
|
||||
def client_id(self):
|
||||
return self.identifier
|
||||
|
||||
spawner = relationship("Spawner", back_populates="oauth_client", uselist=False)
|
||||
service = relationship("Service", back_populates="oauth_client", uselist=False)
|
||||
access_tokens = relationship(
|
||||
APIToken, backref='oauth_client', cascade='all, delete-orphan'
|
||||
APIToken, back_populates='oauth_client', cascade='all, delete-orphan'
|
||||
)
|
||||
codes = relationship(
|
||||
OAuthCode, back_populates='client', cascade='all, delete-orphan'
|
||||
)
|
||||
codes = relationship(OAuthCode, backref='client', cascade='all, delete-orphan')
|
||||
|
||||
# these are the scopes an oauth client is allowed to request
|
||||
# *not* the scopes of the client itself
|
||||
|
Reference in New Issue
Block a user