Untitled
unknown
plain_text
2 years ago
1.7 kB
15
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