Facility: 003028

Autry Community Storage

Stale Data Warning: This facility has not been successfully scraped in 26 days (threshold: 3 days). Data may be outdated.
Facility Information active
Facility ID
003028
Name
Autry Community Storage
URL
http://www.autrystorage.com/
Address
1100 N Highway 45 W, Union City, TN 38261, USA, Union City, Tennessee 38261
Platform
custom_facility_003028
Parser File
src/parsers/custom/facility_003028_parser.py
Last Scraped
2026-03-27 13:40:05.708811
Created
2026-03-23 02:35:08.816820
Updated
2026-03-27 13:40:05.708811
Parser & Healing Diagnosis needs_fix
Parser Status
⚠ Needs Fix
Status Reason
Parser returned 0 units
Last Healing Attempt
Not attempted
Parser Source (src/parsers/custom/facility_003028_parser.py)
"""Parser for Autry Community Storage (Wix site, no individual pricing)."""

from __future__ import annotations

import re

from bs4 import BeautifulSoup

from src.parsers.base import BaseParser, ParseResult, UnitResult


class Facility003028Parser(BaseParser):
    """Extract storage units from Autry Community Storage.

    This is a Wix-based site with no individual unit listings or prices.
    The Unit Sizes page describes available sizes in prose text:
    "5 feet wide by 10 feet deep up to 10 feet wide by 20 feet deep."
    We extract the described size range as units without prices.
    """

    platform = "custom_facility_003028"

    # Matches "N feet wide by N feet deep" pattern
    _FEET_RE = re.compile(
        r"(\d+)\s*feet\s*wide\s*(?:by|x)\s*(\d+)\s*feet\s*deep",
        re.IGNORECASE,
    )

    # Matches standard WxL patterns like "5x10", "10 x 20", "5'x10'"
    _SIZE_RE = re.compile(
        r"(\d+)\s*['\u2032]?\s*[xX\u00d7]\s*(\d+)\s*['\u2032]?",
    )

    def parse(self, html: str, url: str = "") -> ParseResult:
        soup = BeautifulSoup(html, "lxml")
        result = ParseResult(platform=self.platform, parser_name=self.__class__.__name__)

        for tag in soup.find_all(["script", "style"]):
            tag.decompose()

        body_text = soup.get_text(separator="\n")
        seen: set[tuple[int, int]] = set()

        # Try "N feet wide by N feet deep" pattern first (primary for this site)
        for m in self._FEET_RE.finditer(body_text):
            width = int(m.group(1))
            length = int(m.group(2))
            if width < 3 or length < 3:
                continue
            key = (width, length)
            if key in seen:
                continue
            seen.add(key)

            size_str = f"{width}x{length}"
            unit = UnitResult()
            unit.size = size_str
            w, ln, sq = self.normalize_size(size_str)
            if w is not None:
                unit.metadata = {"width": w, "length": ln, "sqft": sq}
            unit.description = m.group(0).strip()[:200]
            result.units.append(unit)

        # Fallback: standard WxL patterns (e.g. from meta description)
        if not result.units:
            for m in self._SIZE_RE.finditer(body_text):
                width = int(m.group(1))
                length = int(m.group(2))
                if width < 3 or length < 3:
                    continue
                key = (width, length)
                if key in seen:
                    continue
                seen.add(key)

                size_str = f"{width}x{length}"
                unit = UnitResult()
                unit.size = size_str
                w, ln, sq = self.normalize_size(size_str)
                if w is not None:
                    unit.metadata = {"width": w, "length": ln, "sqft": sq}
                unit.description = m.group(0).strip()[:200]
                result.units.append(unit)

        if not result.units:
            result.warnings.append("No units found")
        else:
            result.warnings.append(
                "No pricing available on this site; only unit sizes extracted from descriptive text"
            )

        return result

Scrape Runs (3)

Run #1539 Details

Status
exported
Parser Used
Facility003028Parser
Platform Detected
table_layout
Units Found
0
Stage Reached
exported
Timestamp
2026-03-27 13:40:01.718124
Timing
Stage Duration
Fetch3796ms
Detect14ms
Parse9ms
Export14ms

Snapshot: 003028_20260327T134005Z.html · Show Snapshot · Open in New Tab

No units found in this run.

All Failures for this Facility (3)

parse _WarningAsException scraper no_units_extracted warning Run #N/A | 2026-03-27 13:40:05.691307

No units extracted for 003028

Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 003028
parse _WarningAsException scraper no_units_extracted warning Run #N/A | 2026-03-27 13:40:05.592604

No units extracted for 003028

Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 003028
parse _WarningAsException scraper no_units_extracted warning Run #N/A | 2026-03-23 02:39:47.534439

No units extracted for 003028

Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 003028

← Back to dashboard