Commit Graph

213 Commits

Author SHA1 Message Date
Min RK
d4b5373c05 synchronize implementation of expiring values
- base Expiring class
- ensures expiring values (OAuthCode, OAuthAccessToken, APIToken) are not returned from `find`
- all expire appropriately via purge_expired
2020-06-11 10:40:06 +02:00
Min RK
84acdd5a7f handle uselist=False in our relationship expiry 2020-02-21 14:10:36 +01:00
Min RK
7735c7ddd4 make spawner:server backref explicitly one-to-one
using backref(uselist=False), single_parent=True
2020-02-21 10:09:08 +01:00
Min RK
79a51dfdce make init_spawners check O(running servers) not O(total users)
query on Server objects instead of User objects

avoids lots of ORM work on startup since there are typically a small number of running servers
relative to the total number of users

this also means that the users dict is not fully populated. Is that okay? I hope so.
2020-02-18 17:10:19 +01:00
Chico Venancio
096b159c23 ORM: allow MySQL variables to not exist
In current versions of MySQL and MariaDB `innodb_file_format`
and `innodb_large_prefix` have been removed. This allows them to not
exist and makes sure the format for the rows are `Dynamic` (default
for current versions).
2019-08-30 13:00:56 -03:00
Min RK
82c889861d limit special handling to bytes in user_options
uploaded form data can be bytes, which we base64-encode

don't persist any other unsupported data types, persist None instead
2019-03-07 15:30:00 +01:00
Min RK
0d86c4ecf5 allow arbitrary data types in JSONDicts in the db
via json default encoder and object hooks
2019-03-06 13:48:12 +01:00
Min RK
ddc852d658 persist user_options
remember user_options from the previous run

this allows user options set via spawn form to be re-used when restarting e.g. a named server via the api
2019-02-28 14:27:47 +01:00
Min RK
5e60582ef3 run autoformat
apologies to anyone finding this commit via git blame or log

run the autoformatting by

    pre-commit run --all-files
2019-02-19 17:00:10 +01:00
Min RK
087dd0fcd2 Merge pull request #2330 from Deepakdubey90/jupyterhub-oracle-integration
Modified JSON-DICT Implementation from TEXT to Text
2019-02-11 16:41:47 +01:00
Min RK
e51ea3f2be s/TEXT/Text/ 2019-02-06 14:02:08 +01:00
Min RK
bf36f9fc9a use Text instead of TEXT
TEXT is wrong on Oracle, LargeBinary is wrong everywhere else.

Text seems to be the high-level type that maps to the right thing both places.
This results in no change on supported implementations, as Text == TEXT there.
2019-02-06 13:47:40 +01:00
Min RK
a46032b549 use non-deprecated event to register foreign_keys connection listener 2018-12-12 15:41:09 +01:00
pydeepak
047bd4e7cc Fixed incorrect import 2018-11-27 08:42:28 +05:30
pydeepak
10d781c570 Modified Json Implementation from Text to LargeBinary. 2018-11-27 08:39:46 +05:30
Min RK
a1dc73882a move helper properties onto orm.Spawner
since that's where they belong
2018-09-24 16:21:40 +02:00
Min RK
9031b9aa57 add some re-usable APIs
define some pending/ready helpers as static constants on orm.Spawner

allows treating orm.Spawner the same as Spawner wrappers,
as long as `.active` etc. checks are performed first
2018-09-24 16:21:40 +02:00
Min RK
5e2c133669 flesh out oauth provider
- avoid logging credentials
- implement some missing methods
2018-09-10 14:26:40 +02:00
Min RK
f84c73eb15 [wip] switch to oauthlib from python-oauth2
lower-level implementation, but more robust and gives us more control
2018-09-04 15:10:58 +02:00
Matthias Bussonnier
077d8dec9a Fix some typos using codespell.
And checking each manually. It's funny because one of the words in the
sphinx custom dictionary was wrong :-)
2018-08-29 21:24:28 -07:00
Min RK
2d99b3943f enable pessimistic connection handling
from the sqlalchemy docs

checks if a connection is valid via `SELECT 1` prior to using it.

Since we have long-running connections, this helps us survive database restarts, disconnects, etc.
2018-05-21 22:14:11 +02:00
Min RK
58c91e3fd4 implement API token expiry 2018-05-07 13:00:37 +02:00
Chico Venancio
f215adcfa2 move check after engine creation 2018-05-06 04:39:26 +00:00
Chico Venancio
1549af6f56 move large_prefix_check to previous mysql if 2018-05-06 04:29:37 +00:00
Chico Venancio
c553f82580 add comment 2018-05-06 04:27:16 +00:00
Chico Venancio
196b4ebc9f fix py syntax 2018-05-06 04:27:16 +00:00
Chico Venancio
8710ce1687 fixing py syntax 2018-05-06 04:27:16 +00:00
Chico Venancio
f65e8d7369 add ROW_FORMAT=DYNAMIC if server is configured to need it for large collums 2018-05-06 04:27:16 +00:00
Min RK
a021f910c8 expose expire_on_commit option
conservative deployments may set

    c.JupyterHub.db_kwargs['expire_on_commit'] = True

as an escape if the optimization is causing problems.
2018-04-23 12:54:22 +02:00
Min RK
b1840e8be7 use relationships everywhere
in order to use sqlalchemy's expire_on_commit=False optimization,
we need to make sure that objects are kept up to date.

This means we cannot rely on ForeignKey ondelete/onupdate behavior,
we must use sqlalchemy's local relationship cascades

The main key here is that we must use relationships to set foreign-key relations,
e.g. APIToken.user = user instead of APIToken.user_id = user.id.

It also means that we cannot use passive_deletes,
which allows sqlalchemy to defer to the database's more efficient ON DELETE behavior.

This makes deletions more expensive in particular,
but should improve db performance overall.
2018-04-23 12:53:38 +02:00
yuvipanda
15e4b1ad8b Don't expire objects on commit 2018-04-23 12:53:38 +02:00
Min RK
30280cc6a4 add token.api_id
id key used in rest api
2018-04-20 15:34:52 +02:00
Min RK
8dc73a852d add oauth client description 2018-04-20 15:34:42 +02:00
Min RK
1ac47d2bb0 consolidate stale client_id check to AccessToken.find 2018-04-13 21:49:57 +02:00
Min RK
c49fc14528 move oauth token relation to user
for symmetry with APIToken
2018-04-13 21:26:18 +02:00
Min RK
078bd8c627 fix and test deletion cascades
- ensure foreign keys are enabled on sqlite
- fix deletion cascades where relationships were causing dissociation instead of deletion
2018-04-13 21:23:58 +02:00
Min RK
33ba9fb5cf ensure foreign keys are enabled on sqlite 2018-04-13 21:23:58 +02:00
Min RK
9dc24c0995 add user.created, spawner.started
- alembic revision
- in user/spawner models
2018-04-03 15:14:47 +02:00
Min RK
8973dea33e add user.created and start last_activity as None
need to handle last_activity being None throughout
2018-04-03 15:14:47 +02:00
Min RK
22c3064ec4 pass note arg in User.new_api_token 2018-02-22 15:10:13 +01:00
Min RK
aa23b01a57 add notes on API tokens when they are allocated 2018-02-22 15:06:01 +01:00
Min RK
7df8597484 cleanup oauth clients at startup
avoids leaving stale oauth clients in db

- cascade oauth access token, code deletion on delete of oauth client
2018-02-22 15:06:01 +01:00
Min RK
d16461052b track activity of individual tokens 2018-02-22 15:05:18 +01:00
Min RK
b29f19e206 add session_id for OAuth tokens
allows tracking and revoking tokens for a login session
2017-12-11 12:15:36 +01:00
Min RK
f002c67343 add dbutil.upgrade_if_needed
so it's reusable now that we want to use it in more than one place
2017-10-27 15:35:17 +02:00
Min RK
f11705ee26 delete service.server from db when they stop
same ondelete='SET NULL' as on spawner.server
2017-09-14 13:30:38 +02:00
Min RK
78ac5abf23 test restoring and deleting spawners while the Hub is down
- set ONDELETE='set null' on spawner->server relation (fixes error when deleting servers that stopped)
- set `spawner.server = None`, which is not triggered when deleting orm_spawner.server
2017-09-14 13:16:29 +02:00
Min RK
3955a8c1d0 limit unique columns to 255 chars
for MySQL key size limits (767 = 256 * 3 - 1 for utf8)
2017-08-07 13:18:27 +02:00
Carol Willing
5c64c88d5a Merge pull request #1312 from minrk/reverse-generated-token
reverse generated-tokens default logic
2017-08-06 08:57:27 -07:00
Carol Willing
924d095c68 Merge pull request #1311 from minrk/oauth-token-no-service
handle OAuthAccessTokens with no user
2017-08-06 08:49:37 -07:00