Facility: 003028
Autry Community Storage
- 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 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 #1030 Details
- Status
- exported
- Parser Used
- Facility003028Parser
- Platform Detected
- table_layout
- Units Found
- 0
- Stage Reached
- exported
- Timestamp
- 2026-03-23 02:39:43.189014
Timing
| Stage | Duration |
|---|---|
| Fetch | 4292ms |
| Detect | 24ms |
| Parse | 12ms |
| Export | 3ms |
Snapshot: 003028_20260323T023947Z.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