Source code for pyiem.nws.products.nhc

"""Handle some of the fun things that come from the Hurricane Center"""

import re

from pyiem.exceptions import NHCException
from pyiem.nws.product import TextProduct
from pyiem.reference import TWEET_CHARS

TITLE = (
    "(POST-TROPICAL CYCLONE|TROPICAL STORM|HURRICANE|"
    "POTENTIAL TROPICAL CYCLONE|TROPICAL CYCLONE|"
    r"TROPICAL DEPRESSION|REMNANTS OF) ([A-Z0-9\- ]*) "
    "(DISCUSSION|INTERMEDIATE ADVISORY|FORECAST/ADVISORY|ADVISORY) "
    r"NUMBER\s+([0-9A-Z]+)"
)


[docs] class NHCProduct(TextProduct): """ Represents a NHC """
[docs] def get_jabbers(self, uri, _uri2=None): """Get the jabber variant of this message""" myurl = f"{uri}?pid={self.get_product_id()}" tokens = re.findall(TITLE, self.unixtext.upper().replace("\n", " ")) if not tokens: if self.source != "KNHC": return [] raise NHCException("Could not parse header from NHC Product!") classification = tokens[0][0] name = tokens[0][1] twitter_name = name.title().replace("-", "_") prodtype = tokens[0][2] prodnumber = tokens[0][3] center = "National Hurricane Center" tformat = ( "%(classification)s #%(storm_name)s " "%(btype)s %(num)s issued. %(headline)s " "http://go.usa.gov/W3H" ) tdict = { "classification": classification.title(), "storm_name": twitter_name, "num": prodnumber, "btype": prodtype, "headline": "", "url": myurl, } mess = "%s issues %s #%s for %s %s %s" % ( center, prodtype, prodnumber, classification, name, myurl, ) htmlmess = '%s issues <a href="%s">%s #%s</a> for %s %s' % ( center, myurl, prodtype, prodnumber, classification, name, ) if self.segments[0].headlines: headline = self.segments[0].headlines[0] headline = headline.lower().replace( name.lower(), f"#{twitter_name}" ) headline = headline[0].upper() + headline[1:] + "." if (TWEET_CHARS - len(tformat % tdict)) > len(headline): tdict["headline"] = headline else: headline = headline[: headline.find(",")] if (TWEET_CHARS - len(tformat % tdict)) > len(headline): tdict["headline"] = headline tweet = tformat % tdict return [ [ mess.replace("#", "") % tdict, htmlmess.replace("#", "") % tdict, { "channels": f"NHC,{self.afos[:5]},{name},{self.afos}", "product_id": self.get_product_id(), "twitter": " ".join(tweet.split()), }, ] ]
[docs] def parser(text, utcnow=None, ugc_provider=None, nwsli_provider=None): """Helper function""" return NHCProduct(text, utcnow, ugc_provider, nwsli_provider)