Untitled
unknown
plain_text
a year ago
1.7 kB
10
Indexable
# Implement a router class that can registerRoute and getRoute # registerRoute(“/meta/abc/foo”, “FcnMeta”) # registerRoute(“/meta/123/foo”, “FcnMetaSpecific”) # registerRoute(“/meta/*/”, “FcnWild”) # getRoute(“/meta/1234/bar”) # match = re.match(r"hello", "hello world") import re class Router: def __init__(self): self.routes = {} def registerRoute(self, url, routerName): # check if it's a regex if '*' in url: self.routes[f'({url})'] = routerName else: self.routes[url] = routerName def getRoute(self, givenUrl): # print(self.routes) if givenUrl in self.routes: return self.routes[givenUrl] for url, routerName in self.routes.items(): if '*' in url: if re.match(url, givenUrl): return routerName raise ValueError("No router registered against url") # url = "/meta/123/*" # print(f'({url})') # print(re.match(url, "/meta/123/foo")) router = Router() router.registerRoute("/meta/abc/foo", "FcnMeta") router.registerRoute("/meta/123/foo", "FcnMetaSpecific") router.registerRoute("/meta/123/*", "FcnMetaSpecificWildcard") router.registerRoute("/meta/*/", "FcnWild") print(router.getRoute("/meta/abc/foo")) # should print "FcnMeta" print(router.getRoute("/meta/123/foo")) # should print "FcnMetaSpecific" print(router.getRoute("/meta/123/bar")) # should print "FcnMetaSpecificWildcard" print(router.getRoute("/meta/1234/foo")) # should print "FcnWild" try: print(router.getRoute("/metas/1234/foo")) # should raise ValueError except ValueError as ex: print(ex)
Editor is loading...
Leave a Comment