Works with the AI tools you already use

    Claude CodeClaude CodeCursorCursorCodex CLICodex CLIMuseMuseDotsDots+22 more

    legacy code modernizer pro

    1

    Refactor legacy code into modern, clean, and type-safe syntax with robust error handling.

    $9

    Secure checkout via Stripe

    30-day refund guarantee

    Converts to your local currency at checkout

    Security scanned
    legacy code modernizer pro

    legacy code modernizer pro

    Example session with this skill installed

    Legacy Code: import urllib2 def fetch_data(url): try: response = urllib2.urlopen(url) print "Data fetched successfully!" return response.read() except urllib2.URLError, e: print "Error fetching data: " + str(e) Original Language/Version: Python 2.7 Target Language/Version: Python 3.11+

    • Read your context and instructions
    • Compiled the legacy code modernizer

    🛠️ Refactor Summary

    Migration: Python 2.7 ➡️ Python 3.11+

    Key Improvements

    Replaced urllib2 with the modern urllib.request (and added an option to use requests as a more ergonomic alternative)
    Converted print statements to function calls and modernized exception syntax (except X as e)
    Added timeout handling, input validation, HTTP status checking, and specific exception branches (network vs. HTTP errors) with proper logging instead of bare print
    💻 Modernized Code

    python
    """
    

    Module for fetching remote data over HTTP(S).

    Migrated from Python 2.7's urllib2 to Python 3.11+'s urllib.request.
    """

    import logging
    import urllib.request
    import urllib.error
    

    logger = logging.getLogger(name)

    DEFAULT_TIMEOUT = 10 # seconds

    def fetch_data(url: str, timeout: float = DEFAULT_TIMEOUT) -> bytes:
        """
    
    Fetch raw data from the given URL.
    

    Args
    url: The HTTP/HTTPS URL to fetch.
    timeout: Number of seconds to wait before giving up.

    Returns
    The response body as bytes.

    Raises
    ValueError: If the URL is empty or not a string.
    urllib.error.URLError: If the request fails at the network/connection level.
    urllib.error.HTTPError: If the server returns a non-2xx status code.
    """
    if not isinstance(url, str) or not url.strip():
    raise ValueError("url must be a non-empty string")

        try:
            with urllib.request.urlopen(url, timeout=timeout) as response:
                status = getattr(response, "status", 200)
                if status >= 400:
    
                # Defensive check; urlopen normally raises HTTPError itself,
                # but this guards against unexpected implementations.
                raise urllib.error.HTTPError(
                    url, status, "Non-success status code", response.headers, None
    
                    )
                data = response.read()
    
            logger.info("Data fetched successfully from %s (%d bytes)", url, len(data))
            return data
    
    except urllib.error.HTTPError as e:
        # Server responded, but with an error status (4xx/5xx)
        logger.error("HTTP error fetching %s: %s (status %s)", url, e.reason, e.code)
        raise
    
    except urllib.error.URLError as e:
        # Network-level failure (DNS, connection refused, timeout, etc.)
        logger.error("Error fetching data from %s: %s", url, e.reason)
        raise
    

    Notes on the refactor

    urllib2.urlopen(url) ➜ urllib.request.urlopen(url, timeout=...) — added a timeout so the call can't hang forever, which was a latent risk in the original.
    except urllib2.URLError, e: (Python 2 comma syntax) ➜ except urllib.error.URLError as e: (Python 3 syntax), split into HTTPError (subclass of URLError) and URLError branches so HTTP status errors and network errors are handled/logged distinctly.
    Swapped print for logging calls so output is leveled, timestamped, and redirectable — standard practice for production-quality code instead of legacy debug prints.
    Added a docstring and an input-validation guard (raise ValueError on bad input) that the original lacked entirely.

    If you'd like, I can also show a requests-based version, which is the more idiomatic third-party choice for HTTP calls in modern Python codebases these days.

    Connects securely to your tools. The creator never sees your data.

    What you get

    Migrate ES5/JS to type-safe TypeScript componentsUpgrade Python 2.x scripts to modern 3.11+ standardsImplement try/catch blocks and input validation in legacy logicConvert monolithic functions into clean, documented utility modules

    About this skill

    Use this skill when a user provides outdated, monolithic, or poorly structured legacy code and requests refactoring into a modern, type-safe, and clean syntax. It triggers automatically whenever a user requests code upgrades, performance optimization, better error handling, or technical debt reduction.

    Pro Capabilities

    • Language Migration: Modernizes outdated syntax (e.g., upgrading legacy Python 2.x scripts to modern Python 3.11+ standards, adding strict TypeScript types to JavaScript).
    • Robust Error Handling: Implements comprehensive try/catch blocks, explicit input validation, and secure edge-case checking in legacy logic.
    • Modular Refactoring: Converts bloated, monolithic functions into highly reusable, clean, and well-documented utility modules.
    • Technical Debt Reduction: Eliminates anti-patterns, removes dead code, and optimizes runtime performance without changing core application behavior.

    Target Environment

    This skill is highly optimized for integration with AI agent platforms utilizing the standard SKILL.md specification. It executes entirely in text-based environments and requires no external local packages or specialized system network access.

    How to install

    Works the same in every agent - Claude, Cursor, Codex, Copilot and 20+ more.

    ~30 seconds
    1. 1

      Download the ZIP

      Free skills download straight away. Paid skills unlock right after purchase.

    2. 2

      Unzip into your skills folder

      Every agent reads skills from one folder on your machine. Drop the unzipped folder in there.

    3. 3

      Ask your agent to use it

      Restart the agent if it was already running. It picks the skill up automatically - no config needed.

    Skills folder by agent

    Click the path to copy it. Create the folder if it does not exist yet.

    Reviews

    No reviews yet

    Be one of the first to try it. Every listed skill passes our trust checks below.

    Security scanned

    Passed our 8-point scan before listing

    Fresh listing

    Recently published to Agensi

    30-day refund

    Not a fit? Get your money back

    Trust & safety

    Security scanned

    Verified clean 1 month ago

    • Passed all security checks, Safe to install

    Listed1 month ago

    What's inside

    Frequently Asked Questions