Skip to content
This repository has been archived by the owner on Nov 18, 2024. It is now read-only.

Commit

Permalink
Support main channel name. (#93)
Browse files Browse the repository at this point in the history
Fixes: b/270022686
  • Loading branch information
sortie authored Sep 7, 2023
1 parent f86b09d commit 05e3f7b
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 13 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ See LICENSE.
First, read how
[dartdoc structures links](https://github.com/dart-lang/dartdoc/blob/master/README.md#link-structure).

The api.dart.dev server prepends some structure to the links from dartdoc.
The api.dart.dev server expand some structure in the links from dartdoc.

```
/ ==> /stable
/stable ==> /<latest-stable-version>/index.html
/beta ==> /latest-beta-version>/index.html
/dev ==> /latest-dev-version>/index.html
/be ==> /<latest-bleeding-edge-version>/index.html
/main ==> /<latest-bleeding-edge-version>/index.html
/stable/dart-async/Future-class.html ==> /<latest-stable-version>/dart-async/Future-class.html
(same for beta, dev, and be)
(same for beta, dev, and main)
```

## Deployment
Expand Down
41 changes: 31 additions & 10 deletions server/scripts/redirector.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def version_file_loc(self, channel):
# version number and the time when it was recorded.
latest_versions = {
'be': VersionInfo(timedelta(minutes=30)),
'main': VersionInfo(timedelta(minutes=30)),
'dev': VersionInfo(timedelta(hours=6)),
'beta': VersionInfo(timedelta(hours=12)),
'stable': VersionInfo(timedelta(days=1)),
Expand All @@ -59,12 +60,19 @@ def recheck_latest_version(self, channel):
channel."""
data = None
version_file_location = self.version_file_loc(channel)
with cloudstorage.open(version_file_location, 'r') as f:
try:
with cloudstorage.open(version_file_location, 'r') as f:
line = f.readline()
data = line.replace('\x00', '')
ApiDocs.latest_versions[channel].last_check = datetime.now()
except:
# TODO(b/299435467): Remove special case after be -> main rename.
if channel == 'main':
data = ''
else:
raise
revision = data
ApiDocs.latest_versions[channel].version = revision
ApiDocs.latest_versions[channel].last_check = datetime.now()
return revision

def get_latest_version(self, channel):
Expand All @@ -79,6 +87,11 @@ def get_latest_version(self, channel):
else:
return version_info.version

# TODO(b/299435467): Inline as 'main' when the channel has been renamed.
def get_main_channel(self):
"""Returns the name of the main channel, 'main' or 'be'"""
return 'main' if self.get_latest_version('main') else 'be'

def get_pretty_latest_version(self, channel):
"""Look in an alternate storage location to get the "human readable" version
of the SDK (e.g. 1.5). We don't look at this one initially to reduce the
Expand Down Expand Up @@ -145,7 +158,7 @@ def resolve_doc_path(self, channel):

def get_channel(self):
"""Quick accessor to examine a request and determine what channel
(be/beta/dev/stable) we're looking at. Return None if we have a weird
(main/beta/dev/stable) we're looking at. Return None if we have a weird
unexpected URL."""
parts = self.request.path.split('/')
if len(parts) > 0:
Expand Down Expand Up @@ -186,7 +199,8 @@ def get(self, *args, **kwargs):
if len(version_num) == 40 or int(version_num) > 136051:
path = request[index+1:]
if not channel:
return self.redirect('/be/%s/%s' % (version_num, path))
main = self.get_main_channel()
return self.redirect('/%s/%s/%s' % (main, version_num, path))
else:
return self.redirect('/stable')
else:
Expand Down Expand Up @@ -297,8 +311,9 @@ def redir_dev_latest(handler, *args, **kwargs):
def redir_beta_latest(handler, *args, **kwargs):
return redir_channel_latest('beta', 'index.html')

def redir_be_latest(handler, *args, **kwargs):
return redir_channel_latest('be', 'index.html')
def redir_main_latest(handler, *args, **kwargs):
main = ApiDocs().get_main_channel()
return redir_channel_latest(main, 'index.html')

def redir_stable_path(handler, *args, **kwargs):
postfix = kwargs['path'][1:]
Expand Down Expand Up @@ -397,7 +412,7 @@ def redir_apidartdev(handler, *args, **kwargs):

Route('/stable/', RedirectHandler,
defaults={'_uri': '/stable'}),
Route('/latest', RedirectHandler,
Route('/latest', RedirectHandler,
defaults={'_uri': '/stable'}),
Route('/dev/', RedirectHandler,
defaults={'_uri': '/dev'}),
Expand All @@ -407,15 +422,21 @@ def redir_apidartdev(handler, *args, **kwargs):
defaults={'_uri': '/be'}),
Route('/bleeding_edge', RedirectHandler,
defaults={'_uri': '/be'}),
Route('/be', RedirectHandler,
defaults={'_uri': '/main'}),
Route('/main/', RedirectHandler,
defaults={'_uri': '/main'}),

Route('/stable/latest', RedirectHandler,
Route('/stable/latest', RedirectHandler,
defaults={'_uri': '/stable'}),
Route('/dev/latest', RedirectHandler,
defaults={'_uri': '/dev'}),
Route('/beta/latest', RedirectHandler,
defaults={'_uri': '/beta'}),
Route('/be/latest', RedirectHandler,
defaults={'_uri': '/be'}),
Route('/main/latest', RedirectHandler,
defaults={'_uri': '/main'}),

Route('/dart_<libname:[\w]+>.html', RedirectHandler,
defaults={'_uri': redir_legacy_lib}),
Expand All @@ -430,8 +451,8 @@ def redir_apidartdev(handler, *args, **kwargs):
defaults={'_uri': redir_dev_latest}), #ApiDocs),
Route('/beta', RedirectHandler,
defaults={'_uri': redir_beta_latest}),#ApiDocs),
Route('/be', RedirectHandler,
defaults={'_uri': redir_be_latest}),#ApiDocs),
Route('/main', RedirectHandler,
defaults={'_uri': redir_main_latest}),#ApiDocs),

Route('/apidocs/channels/<channel:stable|dev|be>/dartdoc-viewer<path:.*>',
RedirectHandler,
Expand Down

0 comments on commit 05e3f7b

Please sign in to comment.