a }|g @sdZddlZddlZddlmZddlmZddlmZddl m Z e e ddd Z e e d d d Z dee ee dddZe ee dddZee e dddZeje dddZdS)z#Internal Certbot display utilities.N)List)Optional)messages)misc)msgreturnc Cs8|}g}|D]}|tj|ddddqd|S)zFormat lines nicely to 80 chars. :param str msg: Original message :returns: Formatted message respecting newlines in message :rtype: str PF)Zbreak_long_wordsZbreak_on_hyphens ) splitlinesappendtextwrapfilljoin)rlinesZfixed_llinerB/usr/lib/python3.9/site-packages/certbot/_internal/display/util.py wrap_lines s  r)labelrcCsdj|d|dddS)znPlace parens around first character of label. :param str label: Must contain at least one character z({first}){rest}rN)firstrest)format)rrrrparens_around_char!sr@)prompttimeoutrcCs8|rtj|tjt||}|s.t|dS)aGet user input with a timeout. Behaves the same as the builtin input, however, an error is raised if a user doesn't answer after timeout seconds. The default timeout value was chosen to place it just under 12 hours for users following our advice and running Certbot twice a day. :param str prompt: prompt to provide for input :param float timeout: maximum number of seconds to wait for input :returns: user response :rtype: str :raises errors.Error if no answer is given before the timeout r )sysstdoutwriteflushrZreadline_with_timeoutEOFErrorrstrip)rrrrrrinput_with_timeout*s   r#)input_rcCs|dd}dd|DS)zSeparate a comma or space separated list. :param str input_: input from the user :returns: strings :rtype: list , cSsg|] }t|qSr)str).0stringrrr Tz'separate_list_input..)replacesplit)r$Z no_commasrrrseparate_list_inputHs r.)domainsrcCsJ|sdSt|}|dkr |dS|dkr2d|Sd|d|dSdS)aMSummarizes a list of domains in the format of: example.com.com and N more domains or if there is are only two domains: example.com and www.example.com or if there is only one domain: example.com :param list domains: `str` list of domains :returns: the domain list summary :rtype: str rrz and z{0} and {1} more domainsN)lenrr)r/lengthrrrsummarize_domain_listWs  r4)errorrcCs:|j|jf}t|r(ddd|DS|jr4|jS|jS)zReturns a human-readable description of an RFC7807 error. :param error: The ACME error :returns: a string describing the error, suitable for human consumption. :rtype: str z :: css|]}|dur|VqdS)Nr)r(partrrr xr+z&describe_acme_error..)titleZdetailanyr descriptiontyp)r5partsrrrdescribe_acme_erroros  r=)Nr)__doc__rr typingrrZacmerZ acme_messagesZcertbot.compatrr'rrfloatr#r.r4Errorr=rrrrs