Downgrade prettier to last proper release v3.6.2
This commit is contained in:
Simon Li
2025-07-02 22:35:00 +01:00
parent 01a43f41f8
commit faa5e31f52
7 changed files with 118 additions and 110 deletions

View File

@@ -29,8 +29,8 @@ repos:
- jupyter - jupyter
# Autoformat: markdown, yaml, javascript (see the file .prettierignore) # Autoformat: markdown, yaml, javascript (see the file .prettierignore)
- repo: https://github.com/pre-commit/mirrors-prettier - repo: https://github.com/rbubley/mirrors-prettier
rev: v4.0.0-alpha.8 rev: v3.6.2
hooks: hooks:
- id: prettier - id: prettier
exclude: .*/templates/.*|docs/source/_static/rest-api.yml|docs/source/rbac/scope-table.md exclude: .*/templates/.*|docs/source/_static/rest-api.yml|docs/source/rbac/scope-table.md

View File

@@ -58,7 +58,6 @@ for administration of the Hub and its users.
- A Linux/Unix based system - A Linux/Unix based system
- [Python](https://www.python.org/downloads/) 3.8 or greater - [Python](https://www.python.org/downloads/) 3.8 or greater
- [nodejs/npm](https://www.npmjs.com/) - [nodejs/npm](https://www.npmjs.com/)
- If you are using **`conda`**, the nodejs and npm dependencies will be installed for - If you are using **`conda`**, the nodejs and npm dependencies will be installed for
you by conda. you by conda.

View File

@@ -62,18 +62,19 @@ paths:
properties: properties:
class: class:
type: string type: string
description: The Python class currently active for JupyterHub description: The Python class currently active for
Authentication JupyterHub Authentication
version: version:
type: string type: string
description: The version of the currently active Authenticator description: The version of the currently active
Authenticator
spawner: spawner:
type: object type: object
properties: properties:
class: class:
type: string type: string
description: The Python class currently active for spawning description: The Python class currently active for
single-user notebook servers spawning single-user notebook servers
version: version:
type: string type: string
description: The version of the currently active Spawner description: The version of the currently active Spawner
@@ -256,8 +257,8 @@ paths:
parameters: parameters:
- $ref: "#/components/parameters/userName" - $ref: "#/components/parameters/userName"
requestBody: requestBody:
description: Updated user info. At least one key to be updated (name or admin) description: Updated user info. At least one key to be updated (name or
is required. admin) is required.
content: content:
application/json: application/json:
schema: schema:
@@ -265,12 +266,12 @@ paths:
properties: properties:
name: name:
type: string type: string
description: the new name (optional, if another key is updated i.e. description: the new name (optional, if another key is updated
admin) i.e. admin)
admin: admin:
type: boolean type: boolean
description: update admin (optional, if another key is updated i.e. description: update admin (optional, if another key is updated
name) i.e. name)
required: true required: true
responses: responses:
200: 200:
@@ -286,8 +287,8 @@ paths:
post: post:
operationId: post-user-activity operationId: post-user-activity
summary: Notify Hub of activity for a given user summary: Notify Hub of activity for a given user
description: Notify the Hub of activity by the user, e.g. accessing a service description: Notify the Hub of activity by the user, e.g. accessing a
or (more likely) actively using a server. service or (more likely) actively using a server.
parameters: parameters:
- $ref: "#/components/parameters/userName" - $ref: "#/components/parameters/userName"
requestBody: requestBody:
@@ -366,8 +367,8 @@ paths:
description: The user's notebook server has started description: The user's notebook server has started
content: {} content: {}
202: 202:
description: The user's notebook server has not yet started, but has been description: The user's notebook server has not yet started, but has
requested been requested
content: {} content: {}
security: security:
- oauth2: - oauth2:
@@ -380,8 +381,8 @@ paths:
- $ref: "#/components/parameters/userName" - $ref: "#/components/parameters/userName"
responses: responses:
202: 202:
description: The user's notebook server has not yet stopped as it is taking description: The user's notebook server has not yet stopped as it is
a while to stop taking a while to stop
content: {} content: {}
204: 204:
description: The user's notebook server has stopped description: The user's notebook server has stopped
@@ -412,8 +413,8 @@ paths:
description: The user's notebook named-server has started description: The user's notebook named-server has started
content: {} content: {}
202: 202:
description: The user's notebook named-server has not yet started, but has description: The user's notebook named-server has not yet started, but
been requested has been requested
content: {} content: {}
security: security:
- oauth2: - oauth2:
@@ -448,8 +449,8 @@ paths:
required: false required: false
responses: responses:
202: 202:
description: The user's notebook named-server has not yet stopped as it description: The user's notebook named-server has not yet stopped as
is taking a while to stop it is taking a while to stop
content: {} content: {}
204: 204:
description: The user's notebook named-server has stopped description: The user's notebook named-server has stopped
@@ -462,8 +463,8 @@ paths:
get: get:
operationId: get-user-shared operationId: get-user-shared
summary: List servers shared with user summary: List servers shared with user
description: Returns list of Shares granting the user access to servers owned description: Returns list of Shares granting the user access to servers
by others (new in 5.0) owned by others (new in 5.0)
parameters: parameters:
- $ref: "#/components/parameters/userName" - $ref: "#/components/parameters/userName"
@@ -576,11 +577,13 @@ paths:
expires_in: expires_in:
type: number type: number
example: 3600 example: 3600
description: lifetime (in seconds) after which the requested token description: lifetime (in seconds) after which the requested
will expire. Omit, or specify null or 0 for no expiration. token will expire. Omit, or specify null or 0 for no
expiration.
note: note:
type: string type: string
description: A note attached to the token for future bookkeeping description: A note attached to the token for future
bookkeeping
roles: roles:
type: array type: array
description: | description: |
@@ -758,7 +761,8 @@ paths:
- $ref: "#/components/parameters/sharedServerName" - $ref: "#/components/parameters/sharedServerName"
responses: responses:
200: 200:
description: The permissions granted to members of `group` on `owner/server` description: The permissions granted to members of `group` on
`owner/server`
content: content:
application/json: application/json:
schema: schema:
@@ -1173,7 +1177,8 @@ paths:
description: | description: |
The full URL for accepting the code, The full URL for accepting the code,
if JupyterHub.public_url configuration is defined. if JupyterHub.public_url configuration is defined.
example: https://hub.example.org/hub/accept-share?code=abc123 example:
https://hub.example.org/hub/accept-share?code=abc123
security: security:
- oauth2: - oauth2:
- shares - shares
@@ -1250,8 +1255,8 @@ paths:
get: get:
operationId: get-proxy operationId: get-proxy
summary: Get the proxy's routing table summary: Get the proxy's routing table
description: A convenience alias for getting the routing table directly from description: A convenience alias for getting the routing table directly
the proxy from the proxy
parameters: parameters:
- $ref: "#/components/parameters/paginationOffset" - $ref: "#/components/parameters/paginationOffset"
- $ref: "#/components/parameters/paginationLimit" - $ref: "#/components/parameters/paginationLimit"
@@ -1262,8 +1267,8 @@ paths:
application/json: application/json:
schema: schema:
type: object type: object
description: configurable-http-proxy routing table (see configurable-http-proxy description: configurable-http-proxy routing table (see
docs for details) configurable-http-proxy docs for details)
security: security:
- oauth2: - oauth2:
- proxy - proxy
@@ -1282,8 +1287,8 @@ paths:
summary: Notify the Hub about a new proxy summary: Notify the Hub about a new proxy
description: Notifies the Hub of a new proxy to use. description: Notifies the Hub of a new proxy to use.
requestBody: requestBody:
description: Any values that have changed for the new proxy. All keys are description: Any values that have changed for the new proxy. All keys
optional. are optional.
content: content:
application/json: application/json:
schema: schema:
@@ -1374,8 +1379,8 @@ paths:
get: get:
operationId: get-auth-cookie operationId: get-auth-cookie
summary: Identify a user from a cookie summary: Identify a user from a cookie
description: Used by single-user notebook servers to hand off cookie authentication description: Used by single-user notebook servers to hand off cookie
to the Hub authentication to the Hub
parameters: parameters:
- name: cookie_name - name: cookie_name
in: path in: path
@@ -1499,12 +1504,12 @@ paths:
properties: properties:
proxy: proxy:
type: boolean type: boolean
description: Whether the proxy should be shutdown as well (default description: Whether the proxy should be shutdown as well
from Hub config) (default from Hub config)
servers: servers:
type: boolean type: boolean
description: Whether users' notebook servers should be shutdown description: Whether users' notebook servers should be
as well (default from Hub config) shutdown as well (default from Hub config)
required: false required: false
responses: responses:
202: 202:
@@ -1648,8 +1653,8 @@ components:
type: string type: string
server: server:
type: string type: string
description: The user's notebook server's base URL, if running; null if description: The user's notebook server's base URL, if running; null
not. if not.
pending: pending:
type: string type: string
description: The currently pending action, if any description: The currently pending action, if any
@@ -1680,8 +1685,8 @@ components:
properties: properties:
name: name:
type: string type: string
description: The server's name. The user's default server has an empty name description: The server's name. The user's default server has an empty
('') name ('')
ready: ready:
type: boolean type: boolean
description: | description: |
@@ -1743,14 +1748,14 @@ components:
state: state:
type: object type: object
properties: {} properties: {}
description: Arbitrary internal state from this server's spawner. Only available description: Arbitrary internal state from this server's spawner. Only
on the hub's users list or get-user-by-name method, and only with admin:users:server_state available on the hub's users list or get-user-by-name method, and
scope. None otherwise. only with admin:users:server_state scope. None otherwise.
user_options: user_options:
type: object type: object
properties: {} properties: {}
description: User specified options for the user's spawned instance of a description: User specified options for the user's spawned instance of
single-user server. a single-user server.
RequestIdentity: RequestIdentity:
description: | description: |
The model for the entity making the request. The model for the entity making the request.
@@ -1918,8 +1923,8 @@ components:
items: items:
type: string type: string
group: group:
description: the group being shared with (exactly one of 'user' or 'group' description: the group being shared with (exactly one of 'user' or
will be non-null, the other will be null) 'group' will be non-null, the other will be null)
type: type:
- object - object
- "null" - "null"
@@ -1927,8 +1932,8 @@ components:
name: name:
type: string type: string
user: user:
description: the user being shared with (exactly one of 'user' or 'group' description: the user being shared with (exactly one of 'user' or
will be non-null, the other will be null) 'group' will be non-null, the other will be null)
type: type:
- object - object
- "null" - "null"
@@ -1941,8 +1946,8 @@ components:
format: date-time format: date-time
ShareCode: ShareCode:
description: A single sharing code. There is at most one of these objects per description: A single sharing code. There is at most one of these objects
(server, user) or (server, group) combination. per (server, user) or (server, group) combination.
type: object type: object
properties: properties:
server: server:
@@ -1977,37 +1982,41 @@ components:
properties: properties:
id: id:
type: string type: string
description: The id of the API token. Used for modifying or deleting the description: The id of the API token. Used for modifying or deleting
token. the token.
user: user:
type: string type: string
description: The user that owns a token (undefined if owned by a service) description: The user that owns a token (undefined if owned by a
service)
service: service:
type: string type: string
description: The service that owns the token (undefined of owned by a user) description: The service that owns the token (undefined of owned by a
user)
roles: roles:
type: array type: array
description: Deprecated in JupyterHub 3, always an empty list. Tokens have description: Deprecated in JupyterHub 3, always an empty list. Tokens
'scopes' starting from JupyterHub 3. have 'scopes' starting from JupyterHub 3.
items: items:
type: string type: string
scopes: scopes:
type: array type: array
description: List of scopes this token has been assigned. New in JupyterHub description: List of scopes this token has been assigned. New in
3. In JupyterHub 2.x, tokens were assigned 'roles' instead of scopes. JupyterHub 3. In JupyterHub 2.x, tokens were assigned 'roles'
instead of scopes.
items: items:
type: string type: string
note: note:
type: string type: string
description: A note about the token, typically describing what it was created description: A note about the token, typically describing what it was
for. created for.
created: created:
type: string type: string
description: Timestamp when this token was created description: Timestamp when this token was created
format: date-time format: date-time
expires_at: expires_at:
type: string type: string
description: Timestamp when this token expires. Null if there is no expiry. description: Timestamp when this token expires. Null if there is no
expiry.
format: date-time format: date-time
last_activity: last_activity:
type: string type: string
@@ -2030,41 +2039,45 @@ components:
properties: properties:
token: token:
type: string type: string
description: The token itself. Only present in responses to requests for description: The token itself. Only present in responses to requests
a new token. for a new token.
id: id:
type: string type: string
description: The id of the API token. Used for modifying or deleting the description: The id of the API token. Used for modifying or deleting
token. the token.
user: user:
type: string type: string
description: The user that owns a token (undefined if owned by a service) description: The user that owns a token (undefined if owned by a
service)
service: service:
type: string type: string
description: The service that owns the token (undefined of owned by a user) description: The service that owns the token (undefined of owned by a
user)
roles: roles:
type: array type: array
description: Deprecated in JupyterHub 3, always an empty list. Tokens have description: Deprecated in JupyterHub 3, always an empty list. Tokens
'scopes' starting from JupyterHub 3. have 'scopes' starting from JupyterHub 3.
items: items:
type: string type: string
scopes: scopes:
type: array type: array
description: List of scopes this token has been assigned. New in JupyterHub description: List of scopes this token has been assigned. New in
3. In JupyterHub 2.x, tokens were assigned 'roles' instead of scopes. JupyterHub 3. In JupyterHub 2.x, tokens were assigned 'roles'
instead of scopes.
items: items:
type: string type: string
note: note:
type: string type: string
description: A note about the token, typically describing what it was created description: A note about the token, typically describing what it was
for. created for.
created: created:
type: string type: string
description: Timestamp when this token was created description: Timestamp when this token was created
format: date-time format: date-time
expires_at: expires_at:
type: string type: string
description: Timestamp when this token expires. Null if there is no expiry. description: Timestamp when this token expires. Null if there is no
expiry.
format: date-time format: date-time
last_activity: last_activity:
type: string type: string
@@ -2094,22 +2107,23 @@ components:
tokenUrl: /hub/api/oauth2/token tokenUrl: /hub/api/oauth2/token
scopes: scopes:
(no_scope): Identify the owner of the requesting entity. (no_scope): Identify the owner of the requesting entity.
self: The users own resources _(metascope for users, resolves to (no_scope) self: The users own resources _(metascope for users, resolves to
for services)_ (no_scope) for services)_
inherit: Everything that the token-owning entity can access _(metascope inherit: Everything that the token-owning entity can access
for tokens)_ _(metascope for tokens)_
admin-ui: Access the admin page. Permission to take actions via the admin admin-ui: Access the admin page. Permission to take actions via the
page granted separately. admin page granted separately.
admin:users: Read, modify, create, and delete users and their authentication admin:users: Read, modify, create, and delete users and their
state, not including their servers or tokens. This is an extremely privileged authentication state, not including their servers or tokens. This
scope and should be considered tantamount to superuser. is an extremely privileged scope and should be considered
tantamount to superuser.
admin:auth_state: Read a users authentication state. admin:auth_state: Read a users authentication state.
users: Read and write permissions to user models (excluding servers, tokens users: Read and write permissions to user models (excluding servers,
and authentication state). tokens and authentication state).
delete:users: Delete users. delete:users: Delete users.
list:users: List users, including at least their names. list:users: List users, including at least their names.
read:users: Read user models (including the URL of the default server read:users: Read user models (including the URL of the default
if it is running). server if it is running).
read:users:name: Read names of users. read:users:name: Read names of users.
read:users:groups: Read users group membership. read:users:groups: Read users group membership.
read:users:activity: Read time of last user activity. read:users:activity: Read time of last user activity.
@@ -2118,24 +2132,25 @@ components:
read:roles:services: Read service role assignments. read:roles:services: Read service role assignments.
read:roles:groups: Read group role assignments. read:roles:groups: Read group role assignments.
users:activity: Update time of last user activity. users:activity: Update time of last user activity.
admin:servers: Read, start, stop, create and delete user servers and their admin:servers: Read, start, stop, create and delete user servers and
state. their state.
admin:server_state: Read and write users server state. admin:server_state: Read and write users server state.
servers: Start and stop user servers. servers: Start and stop user servers.
read:servers: Read users names and their server models (excluding the read:servers: Read users names and their server models (excluding
server state). the server state).
delete:servers: Stop and delete users' servers. delete:servers: Stop and delete users' servers.
tokens: Read, write, create and delete user tokens. tokens: Read, write, create and delete user tokens.
read:tokens: Read user tokens. read:tokens: Read user tokens.
admin:groups: Read and write group information, create and delete groups. admin:groups: Read and write group information, create and delete
groups.
groups: 'Read and write group information, including adding/removing any groups: 'Read and write group information, including adding/removing any
users to/from groups. Note: adding users to groups may affect permissions.' users to/from groups. Note: adding users to groups may affect permissions.'
list:groups: List groups, including at least their names. list:groups: List groups, including at least their names.
read:groups: Read group models. read:groups: Read group models.
read:groups:name: Read group names. read:groups:name: Read group names.
delete:groups: Delete groups. delete:groups: Delete groups.
admin:services: Create, read, update, delete services, not including services admin:services: Create, read, update, delete services, not including
defined from config files. services defined from config files.
list:services: List services, including at least their names. list:services: List services, including at least their names.
read:services: Read service models. read:services: Read service models.
read:services:name: Read service names. read:services:name: Read service names.
@@ -2148,7 +2163,7 @@ components:
read:groups:shares: Read servers shared with a group. read:groups:shares: Read servers shared with a group.
read:shares: Read information about shared access to servers. read:shares: Read information about shared access to servers.
shares: Manage access to shared servers. shares: Manage access to shared servers.
proxy: Read information about the proxys routing table, sync the Hub proxy: Read information about the proxys routing table, sync the
with the proxy and notify the Hub about a new proxy. Hub with the proxy and notify the Hub about a new proxy.
shutdown: Shutdown the hub. shutdown: Shutdown the hub.
read:metrics: Read prometheus metrics. read:metrics: Read prometheus metrics.

View File

@@ -186,7 +186,6 @@ For example:
- `Content-Security-Policy` header must prohibit popups and iframes from the same origin. - `Content-Security-Policy` header must prohibit popups and iframes from the same origin.
The following Content-Security-Policy rules are _insecure_ and readily enable users to access each others' servers: The following Content-Security-Policy rules are _insecure_ and readily enable users to access each others' servers:
- `frame-ancestors: 'self'` - `frame-ancestors: 'self'`
- `frame-ancestors: '*'` - `frame-ancestors: '*'`
- `sandbox allow-popups` - `sandbox allow-popups`

View File

@@ -84,7 +84,6 @@ The passed scopes are compared to the scopes required to access the API as follo
- if the API scopes are present within the set of passed scopes, the access is granted and the API returns its "full" response - if the API scopes are present within the set of passed scopes, the access is granted and the API returns its "full" response
- if that is not the case, another check is utilized to determine if subscopes of the required API scopes can be found in the passed scope set: - if that is not the case, another check is utilized to determine if subscopes of the required API scopes can be found in the passed scope set:
- if found, the RBAC framework employs the {ref}`filtering <vertical-filtering-target>` procedures to refine the API response to access only resource attributes corresponding to the passed scopes. For example, providing a scope `read:users:activity!group=class-C` for the `GET /users` API will return a list of user models from group `class-C` containing only the `last_activity` attribute for each user model - if found, the RBAC framework employs the {ref}`filtering <vertical-filtering-target>` procedures to refine the API response to access only resource attributes corresponding to the passed scopes. For example, providing a scope `read:users:activity!group=class-C` for the `GET /users` API will return a list of user models from group `class-C` containing only the `last_activity` attribute for each user model
- if not found, the access to API is denied - if not found, the access to API is denied

View File

@@ -17,11 +17,9 @@ Please submit pull requests to update information or to add new institutions or
- [BIDS - Berkeley Institute for Data Science](https://bids.berkeley.edu/) - [BIDS - Berkeley Institute for Data Science](https://bids.berkeley.edu/)
- [Data 8](http://data8.org/) - [Data 8](http://data8.org/)
- [GitHub organization](https://github.com/data-8) - [GitHub organization](https://github.com/data-8)
- [NERSC](https://www.nersc.gov/) - [NERSC](https://www.nersc.gov/)
- [Press release on Jupyter and Cori](https://www.nersc.gov/news-publications/nersc-news/nersc-center-news/2016/jupyter-notebooks-will-open-up-new-possibilities-on-nerscs-cori-supercomputer/) - [Press release on Jupyter and Cori](https://www.nersc.gov/news-publications/nersc-news/nersc-center-news/2016/jupyter-notebooks-will-open-up-new-possibilities-on-nerscs-cori-supercomputer/)
- [Moving and sharing data](https://www.nersc.gov/assets/Uploads/03-MovingAndSharingData-Cholia.pdf) - [Moving and sharing data](https://www.nersc.gov/assets/Uploads/03-MovingAndSharingData-Cholia.pdf)
@@ -134,7 +132,6 @@ The [Educational Development and Technology](https://ethz.ch/en/the-eth-zurich/o
### University of California San Diego ### University of California San Diego
- San Diego Supercomputer Center - Andrea Zonca - San Diego Supercomputer Center - Andrea Zonca
- [Deploy JupyterHub on a Supercomputer with SSH](https://zonca.github.io/2017/05/jupyterhub-hpc-batchspawner-ssh.html) - [Deploy JupyterHub on a Supercomputer with SSH](https://zonca.github.io/2017/05/jupyterhub-hpc-batchspawner-ssh.html)
- [Run Jupyterhub on a Supercomputer](https://zonca.github.io/2015/04/jupyterhub-hpc.html) - [Run Jupyterhub on a Supercomputer](https://zonca.github.io/2015/04/jupyterhub-hpc.html)
- [Deploy JupyterHub on a VM for a Workshop](https://zonca.github.io/2016/04/jupyterhub-sdsc-cloud.html) - [Deploy JupyterHub on a VM for a Workshop](https://zonca.github.io/2016/04/jupyterhub-sdsc-cloud.html)

View File

@@ -11,7 +11,6 @@ Before installing JupyterHub, you will need:
installing Python packages is helpful. installing Python packages is helpful.
- [Node.js {{node_min}}](https://www.npmjs.com/) or greater, along with npm. [Install Node.js/npm](https://docs.npmjs.com/getting-started/installing-node), - [Node.js {{node_min}}](https://www.npmjs.com/) or greater, along with npm. [Install Node.js/npm](https://docs.npmjs.com/getting-started/installing-node),
using your operating system's package manager. using your operating system's package manager.
- If you are using **`conda`**, the nodejs and npm dependencies will be installed for - If you are using **`conda`**, the nodejs and npm dependencies will be installed for
you by conda. you by conda.