Skip to content

Running a project

A project administrator decides who reaches a project and for how long. Access that should stop on a known day, such as a contractor’s or a partner’s, gets an end date; nobody has to remember to remove it. This page shows where each step is in Workspace and how an application reads the same facts in Python.

Open the project, then Effective access. Each person’s row has an Access ends cell: No end date, Ends 31 December 2026 or Ended 31 December 2026. Choose Set end date for the person, pick the last day they may use the project and save.

  • The end date is the last permitted day, read as a UTC date. Access ends at the start of the next day, UTC, for everyone wherever they are.
  • The date applies to the person’s direct grant. A team grant has no end date: someone who also reaches the project through a team keeps that team’s access after the direct grant ends.
  • A project always keeps at least one administrator without an end date, so it can never lock itself out.
  • Their project access keys, agents and saved connections (QGIS, notebooks) stop working at the same moment and start working again when the date is extended. Nothing is revoked, so nobody has to create new keys.

Before the date, the person’s project list and the project overview say “Your access to this project ends on 31 December 2026 (end of day, UTC).” After it, opening the project in Workspace, and every request an application makes with one of their credentials, answers

Your access to this project ended after 31 December 2026. Ask a project administrator to extend it.

A person who never had access keeps the ordinary refusal; the sentence only appears for someone whose own grant ended.

Choose Change end date for the person and pick a later day, or Remove end date. The next request they make succeeds again; they do not need new keys or a new invitation.

Choose Rename project… on the project page. The project’s id never changes, so every address that names the project, including the OGC API - Features address a GIS application saved, keeps working byte for byte. The project’s history lists every earlier name, who changed it and when.

client is an ophiolite.Client for your project (see Build on Ophiolite for a key and the SDK). Every project you reach is listed with access_ends_at, the instant your access ends, or None when it does not end:

from datetime import timedelta, datetime
from ophiolite.account import connect
account = connect(client.url, client.credential, client.http)
mine = {row['id']: row for row in account.projects()}
here = mine[client.project]
if here['access_ends_at'] is None:
print(here['name'], 'has no end date for you')
else:
last = datetime.fromisoformat(here['access_ends_at'].replace('Z', '+00:00')) - timedelta(microseconds=1)
print(here['name'], 'is yours until the end of', last.date(), '(UTC)')

A project administrator reads everyone’s access with access/effective: one row per person, whether they have access now, the last day of their direct grant (ends_on, a date) and each grant with where it comes from. Anyone else gets a refusal.

answer = client.http.post(f'{client.url}/api/v1/projects/{client.project}/access/effective', json={'project_id': client.project},
headers=client.credential.headers(client.url, client.project))
people = {person['user_id']: person for person in answer.json()['members']} if answer.status_code == 200 else {}
for person in people.values():
until = person['ends_on'] or 'no end date'
print(person['name'], 'has access' if person['has_access'] else 'has no access', '-', until)

Setting, changing and removing an end date, and renaming, are done in Workspace (a signed-in browser session); keys and agents can read these facts but cannot change them. The notebook Who has access, and until when does the same reading with a chart.