Untitled

 avatar
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