]> git.mxchange.org Git - fba.git/commitdiff
Continued:
authorRoland Häder <roland@mxchange.org>
Tue, 28 Nov 2023 14:50:35 +0000 (15:50 +0100)
committerRoland Häder <roland@mxchange.org>
Tue, 28 Nov 2023 14:50:35 +0000 (15:50 +0100)
- first check parameter (better performance)
- cache is_wanted() and is_in_url() invocations

fba/commands.py
fba/helpers/domain.py

index faabb9e4c31e8336e55ce4810fb0adb63ae910d2..c85f5feb915934a595989075b8b86f6415bd6fff 100644 (file)
@@ -311,7 +311,7 @@ def fetch_blocks(args: argparse.Namespace) -> int:
         if not domain_helper.is_wanted(blocker):
             logger.warning("blocker='%s' is not wanted - SKIPPED!", blocker)
             continue
-        elif instances.is_recent(blocker) and not args.force:
+        elif not args.force and instances.is_recent(blocker, "last_blocked"):
             logger.debug("blocker='%s' has been recently accessed - SKIPPED!", blocker)
             continue
 
index 00bf9384aee437d3d9b2fc715fa0ba0968584369..d79fb207be537673671acc6549bd56a05f1caf15 100644 (file)
@@ -28,6 +28,9 @@ from fba.models import instances
 logging.basicConfig(level=logging.INFO)
 logger = logging.getLogger(__name__)
 
+# In-function cache
+_cache = {}
+
 def raise_on(domain: str):
     logger.debug("domain='%s' - CALLED!", domain)
 
@@ -58,6 +61,12 @@ def is_in_url(domain: str, url: str) -> bool:
         raise ValueError(f"Parameter url[]='{type(url)}' is not of type 'str'")
     elif url == "":
         raise ValueError("Parameter 'url' is empty")
+    elif "is_in_url" in _cache and domain + url in _cache["is_in_url"]:
+        logger.debug("Returning cached is_found='%s' - EXIT!", _cache["is_in_url"][domain + url])
+        return _cache["is_in_url"][domain + url]
+    elif "is_in_url" not in _cache:
+        logger.debug("Initializing cache for function 'is_in_url' ...")
+        _cache["is_in_url"] = {}
 
     punycode = domain.encode("idna").decode("utf-8")
 
@@ -65,6 +74,7 @@ def is_in_url(domain: str, url: str) -> bool:
     logger.debug("components[]='%s',punycode='%s'", type(components), punycode)
 
     is_found = (punycode in [components.netloc, components.hostname])
+    _cache["is_in_url"][domain + url] = is_found
 
     logger.debug("is_found='%s' - EXIT!", is_found)
     return is_found
@@ -76,6 +86,12 @@ def is_wanted(domain: str) -> bool:
         raise ValueError(f"Parameter domain[]='{type(domain)}' is not of type 'str'")
     elif domain == "":
         raise ValueError("Parameter 'domain' is empty")
+    elif "is_wanted" in _cache and domain in _cache["is_wanted"]:
+        logger.debug("Returning cached is_found='%s' - EXIT!", _cache["is_wanted"][domain])
+        return _cache["is_wanted"][domain]
+    elif "is_wanted" not in _cache:
+        logger.debug("Initializing cache for function 'is_wanted' ...")
+        _cache["is_wanted"] = {}
 
     wanted = True
     if domain.lower() != domain:
@@ -106,5 +122,6 @@ def is_wanted(domain: str) -> bool:
         logger.debug("domain='%s' is a tag", domain)
         wanted = False
 
+    _cache["is_wanted"][domain] = wanted
     logger.debug("wanted='%s' - EXIT!", wanted)
     return wanted