
    i                         d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZ  ej        d          Z G d	 d
          Zd
gZdS )z*UTC-Offset property type from :rfc:`5545`.    N	timedelta)AnyClassVar)Self)JCalParsingError)
ParameterszI^(?P<sign>[+-])?(?P<hours>\d\d):(?P<minutes>\d\d)(?::(?P<seconds>\d\d))?$c                      e Zd ZU dZdZee         ed<   eed<   dZ	dde
eef         dz  defdZd	efd
Zdded	efdZed             Zd Zd Zd Zed	ee         fd            ZddlmZ ded	efdZeded	efd            ZdS )
vUTCOffsetah  UTC Offset

    Value Name:
        UTC-OFFSET

    Purpose:
        This value type is used to identify properties that contain
        an offset from UTC to local time.

    Format Definition:
        This value type is defined by the following notation:

        .. code-block:: text

            utc-offset = time-numzone

            time-numzone = ("+" / "-") time-hour time-minute [time-second]

    Description:
        The PLUS SIGN character MUST be specified for positive
        UTC offsets (i.e., ahead of UTC).  The HYPHEN-MINUS character MUST
        be specified for negative UTC offsets (i.e., behind of UTC).  The
        value of "-0000" and "-000000" are not allowed.  The time-second,
        if present, MUST NOT be 60; if absent, it defaults to zero.

        Example:
            The following UTC offsets are given for standard time for
            New York (five hours behind UTC) and Geneva (one hour ahead of
            UTC):

        .. code-block:: ics

            -0500

            +0100

        .. code-block:: pycon

            >>> from icalendar.prop import vUTCOffset
            >>> utc_offset = vUTCOffset.from_ical('-0500')
            >>> utc_offset
            datetime.timedelta(days=-1, seconds=68400)
            >>> utc_offset = vUTCOffset.from_ical('+0100')
            >>> utc_offset
            datetime.timedelta(seconds=3600)
    z
UTC-OFFSETdefault_valueparamsFNtdc                    t          |t                    st          d          || _        t	          |          | _        d S )Nz)Offset value MUST be a timedelta instance)
isinstancer   	TypeErrorr   r	   r   )selfr   r   s      W/root/projects/butler/venv/lib/python3.11/site-packages/icalendar/prop/dt/utc_offset.py__init__zvUTCOffset.__init__I   s>    "i(( 	IGHHH ((    returnc                 ,    |                      d          S )zReturn the ical representation. )formatr   s    r   to_icalzvUTCOffset.to_icalO   s    {{2r   r   dividerc                 T   | j         t          d          k     rd}t          d          | j         z
  }n	d}| j         }|j        |j        }}t	          |dz  |dz  z             }t	          |dz  dz            }t	          |dz            }|r|d| |d| |d}n
|d| |d}||z  S )an  Represent the value with a possible divider.

        .. code-block:: pycon

            >>> from icalendar import vUTCOffset
            >>> from datetime import timedelta
            >>> utc_offset = vUTCOffset(timedelta(hours=-5))
            >>> utc_offset.format()
            '-0500'
            >>> utc_offset.format(divider=':')
            '-05:00'
        r   z-%sz+%s   i  <   02)r   r   dayssecondsabs)	r   r   signr   r!   r"   hoursminutesdurations	            r   r   zvUTCOffset.formatS   s     7Yq\\!!D1'BB DBgD2I4/00w~",--gl## 	:NNGNWNNN'NNNHH99G9W999Hhr   c                    t          ||           r|j        S 	 |dd         t          |dd                   t          |dd                   t          |dd         pd          f\  }}}}t          |||          }n%# t          $ r}t          d|           |d }~ww xY w| j        s&|t          d	          k    rt          d
|           |dk    r| S |S )Nr               r%   r&   r"   zExpected UTC offset, got: r   r%   z'Offset must be less than 24 hours, was -)r   r   intr   	Exception
ValueErrorignore_exceptions)clsicalr$   r%   r&   r"   offsetes           r   	from_icalzvUTCOffset.from_icals   s   dC   	7N		IQqS	D1ID1ID1IN##	-)D%' UGWMMMFF 	I 	I 	I@$@@AAqH	I$ 	O923F3F3F)F)FMtMMNNN3;;7Ns   A&B   
B"
BB"c                 P    t          |t                    sdS | j        |j        k    S )NF)r   r   r   )r   others     r   __eq__zvUTCOffset.__eq__   s(    %,, 	5w%(""r   c                 *    t          | j                  S N)hashr   r   s    r   __hash__zvUTCOffset.__hash__   s    DG}}r   c                     d| j         dS )NzvUTCOffset())r   r   s    r   __repr__zvUTCOffset.__repr__   s    )TW))))r   c                 d     | t          d                     | t          d                    gS )zExamples of vUTCOffset.r*   r.   r   r   )r4   s    r   exampleszvUTCOffset.examples   s9     C	"""##C	!
 	
r   r   )VALUEnamec                     || j                                         | j                                        |                     d          gS )zBThe jCal representation of this property according to :rfc:`7265`.:)r   to_jcalrE   lowerr   )r   rF   s     r   rI   zvUTCOffset.to_jcal   s9    dk))++TZ-=-=-?-?SAQAQRRr   jcal_propertyc                    t          j        ||            t                              |d                   }|t          d|d          |                    d          dk    }t          |                    d                    }t          |                    d                    }t          |                    d	          pd
          }t          |||          }|r| } | |t          j        |                    S )zParse jCal from :rfc:`7265`.

        Parameters:
            jcal_property: The jCal property to parse.

        Raises:
            ~error.JCalParsingError: If the provided jCal is invalid.
        r*   NzCannot parse z as UTC-OFFSET.r$   r/   r%   r&   r"   r   r-   )	r   validate_propertyUTC_OFFSET_JCAL_REGEXmatchgroupr0   r   r	   from_jcal_property)r4   rK   rO   negativer%   r&   r"   ts           r   	from_jcalzvUTCOffset.from_jcal   s     	*=#>>>%++M!,<==="#S=#S#S#STTT;;v&&#-EKK(())ekk),,--ekk),,122E7GDDD 	As1j3MBBCCCr   r=   )r   )__name__
__module____qualname____doc__r   r   str__annotations__r	   r3   dictr   r   r   r   r   classmethodr8   r;   r?   rB   listr   rD   icalendar.paramrE   rI   rT    r   r   r   r      s        - -^ $0M8C=///) )c3h$1F )9 ) ) ) )     c 3    @   [&# # #
  * * * 
d 
 
 
 [
 &%%%%%SC SD S S S S Dd Dt D D D [D D Dr   r   )rX   redatetimer   typingr   r   icalendar.compatibilityr   icalendar.errorr   icalendar.parserr	   compilerN   r   __all__r_   r   r   <module>rh      s    0 0 				                       ( ( ( ( ( ( , , , , , , ' ' ' ' ' '"
P  
eD eD eD eD eD eD eD eDP .r   