[prev in list] [next in list] [prev in thread] [next in thread] 

List:       perl-datetime
Subject:    Re: issues with Data::ICal::DateTime and possible DateTime::Set
From:       "Flavio S. Glock" <fglock () gmail ! com>
Date:       2017-08-21 18:00:25
Message-ID: CAHMRfDxxN_e9=2HEF626SQYdPxnQYJpMrTGPfbc1fqc2ivaseg () mail ! gmail ! com
[Download RAW message or body]

Data::ICal::DateTime 0.82 implements the fix discussed below.

0.82 - Mon 21 Aug 2017
    * Set recurrence timezone to the same as the 'start' attribute (fix
github issue #2)


2017-08-18 21:10 GMT+02:00 Flavio S. Glock <fglock@gmail.com>:

> This patch fixes the problem - but as I explained in the previous mail,
> I'm not sure if it is the right thing to do (the alternative is that
> DateTime::Event::ICal didn't ignore the time_zone in dtstart).
>
> diff --git a/lib/Data/ICal/DateTime.pm b/lib/Data/ICal/DateTime.pm
> index ecf9e2f..ab49e78 100644
> --- a/lib/Data/ICal/DateTime.pm
> +++ b/lib/Data/ICal/DateTime.pm
> @@ -499,6 +499,7 @@ sub _rule_set {
>      for (@{ $self->property($name) }) {
>          my $recur   = DateTime::Format::ICal->parse_recurrence(recurrence
> => $_->value, dtstart => $start);
>          # $recur->set_time_zone($_->parameters->{TZID}) if
> $_->parameters->{TZID};
> +        $recur->set_time_zone($start->time_zone) if
> !$start->time_zone->is_floating;
>          $set = $set->union($recur);
>      }
>      # $set->set_time_zone($tz);
>
>
> 2017-08-18 19:27 GMT+02:00 Flavio S. Glock <fglock@gmail.com>:
>
>> (forwarding to DateTime list because this looks interesting)
>>
>> I've created this test - https://gist.github.com/fglock
>> /cf1117ad000b41d9e5dbee6fa8b78993
>>
>> this fails (set time zone implicitly through dtstart):
>>
>>     $a = DateTime::Event::ICal->recur(
>>             dtstart => $dt19970902T090000_tz ,
>>             freq => 'daily',
>>             count => 10 )
>>             ->intersection( $period_1995_1999 );
>>
>> this other test works (time zone is set explicitly for the whole
>> recurrence):
>>
>>     $a = DateTime::Event::ICal->recur(
>>             dtstart => $dt19970902T090000_tz ,
>>             freq => 'daily',
>>             count => 10 )
>>             ->set_time_zone( "America/New_York" )
>>             ->intersection( $period_1995_1999 );
>>
>> I believe this is the correct behaviour (though it should warn!), because
>> http://www.ietf.org/rfc/rfc2445.txt
>> says:
>>
>> <quote>
>>
>> Dawson & Stenerson          Standards Track                   [Page 117]
>> 
>> RFC 2445                       iCalendar                   November 1998
>>
>>
>>    The "DTSTART" and "DTEND" property pair or "DTSTART" and "DURATION"
>>    property pair, specified within the iCalendar object defines the
>>    first instance of the recurrence. When used with a recurrence rule,
>>    the "DTSTART" and "DTEND" properties MUST be specified in local time
>>    and the appropriate set of "VTIMEZONE" calendar components MUST be
>>    included. For detail on the usage of the "VTIMEZONE" calendar
>>    component, see the "VTIMEZONE" calendar component definition.</quote>
>>
>> I *think* DateTime::Event::ICal is doing the right thing, but the module documentation is not clear:
>>
>> <quote>
>>
>> This method takes parameters which correspond to the rule parts
>> specified in section 4.3.10 of RFC 2445.  Rather than rewrite that RFC
>> here, you are encouraged to read that first if you want to understand
>> what all these parameters represent.
>>
>> </quote>
>>
>> It *could* as well also use the time_zone from "dtstart".
>>
>> Simon: do you think this explains the problem, and can this can be fixed in your module maybe?
>>
>> Flávio S. Glock
>>
>>
>>
>> 2017-08-18 18:28 GMT+02:00 Flavio S. Glock <fglock@gmail.com>:
>>
>>> just to confirm, I did a fresh install and I get:
>>>
>>> t/01.parse_recurring.t ...... 1/18
>>> #   Failed test at t/01.parse_recurring.t line 25.
>>> #          got: 'floating'
>>> #     expected: 'Europe/London'
>>>
>>> I'm investigating a bit
>>>
>>> Flávio
>>>
>>>
>>> 2017-08-18 17:33 GMT+02:00 Th.J. van Hoesel <slrn406268377@gmail.com>:
>>> > just fiddling along, it works if I first install
>>> FGLOCK/DateTime-Event-Recurrence-0.16
>>> >
>>> >> On 18 Aug 2017, at 15:34, Th.J. van Hoesel <th.j.v.hoesel@me.com>
>>> wrote:
>>> >>
>>> >> Hi Flávio, Hello Simon,
>>> >>
>>> >> i've some issues with installing Data::Ical::DateTime and I can not
>>> exactly say who is in the right or who is in the wrong, that would require
>>> more investigation.
>>> >>
>>> >> Data::Ical::DateTime is depending on DateTime::Event::Recurrence,
>>> with is dependent on DateTime::Set. When that was changed back in november
>>> 2015, that is when Data::ICal::DateTime started failing on CPAN testers.
>>> >>
>>> >> Maybe one does a wrong call and should actually had expected to get
>>> "floating" timezones, maybe one does expected that his timezone from the
>>> .ics test file would be honoured.
>>> >>
>>> >> Could you please be so kind and have a look, you probably do
>>> understand the problem-space much better than I do. Would I have
>>> understood, I probably would had sent a bug fix
>>> >>
>>> >> Theo
>>> >>
>>> >> PS. It is part of the "Act-out-of-the-Box" install script, and it
>>> just looks ugly to do a force install, but it will do the job for now
>>> >
>>>
>>
>>
>>
>

[Attachment #3 (text/html)]

<div dir="ltr">Data::ICal::DateTime 0.82 implements the fix discussed \
below.<div><br></div><div><div><font face="monospace, monospace">0.82 - Mon 21 Aug \
2017</font></div><div><font face="monospace, monospace">      * Set recurrence \
timezone to the same as the &#39;start&#39; attribute (fix github issue \
#2)</font></div><div><br></div><div class="gmail_extra"><br><div \
class="gmail_quote">2017-08-18 21:10 GMT+02:00 Flavio S. Glock <span dir="ltr">&lt;<a \
href="mailto:fglock@gmail.com" \
target="_blank">fglock@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" \
style="margin:0px 0px 0px 0.8ex;border-left:1px solid \
rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>This patch fixes the problem - \
but as I explained in the previous mail, I&#39;m not sure if it is the right thing to \
do (the alternative is that DateTime::Event::ICal didn&#39;t ignore the time_zone in \
dtstart).</div><div><br></div><font face="monospace, monospace">diff --git \
a/lib/Data/ICal/DateTime.pm b/lib/Data/ICal/DateTime.pm<br>index ecf9e2f..ab49e78 \
100644<br>--- a/lib/Data/ICal/DateTime.pm<br>+++ b/lib/Data/ICal/DateTime.pm<br>@@ \
-499,6 +499,7 @@ sub _rule_set {<br>        for (@{ $self-&gt;property($name) }) \
{<br>              my $recur    = \
DateTime::Format::ICal-&gt;parse_<wbr>recurrence(recurrence =&gt; $_-&gt;value, \
dtstart =&gt; $start);<br>              # \
$recur-&gt;set_time_zone($_-&gt;<wbr>parameters-&gt;{TZID}) if \
$_-&gt;parameters-&gt;{TZID};<br>+            \
$recur-&gt;set_time_zone($start-<wbr>&gt;time_zone) if \
!$start-&gt;time_zone-&gt;is_<wbr>floating;<br>              $set = \
$set-&gt;union($recur);<br>        }<br>        # \
$set-&gt;set_time_zone($tz);</font><div><div class="gmail-h5"><div><font \
face="monospace, monospace"><br></font><div><div class="gmail_extra"><br><div \
class="gmail_quote">2017-08-18 19:27 GMT+02:00 Flavio S. Glock <span dir="ltr">&lt;<a \
href="mailto:fglock@gmail.com" \
target="_blank">fglock@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" \
style="margin:0px 0px 0px 0.8ex;border-left:1px solid \
rgb(204,204,204);padding-left:1ex"><div \
class="gmail-m_-3591553219584233613HOEnZb"><div \
class="gmail-m_-3591553219584233613h5"><div dir="ltr"><div class="gmail_quote"><span \
style="font-family:arial,helvetica,sans-serif;color:rgb(0,0,0);white-space:pre-wrap">(forwarding \
to DateTime list because this looks interesting)</span></div><div \
class="gmail_quote"><font color="#000000" face="arial, helvetica, sans-serif"><span \
style="white-space:pre-wrap"><br></span></font><div dir="ltr">I&#39;ve created this \
test - <a href="https://gist.github.com/fglock/cf1117ad000b41d9e5dbee6fa8b78993" \
target="_blank">https://gist.github.com/fglock<wbr>/cf1117ad000b41d9e5dbee6fa8b78<wbr>993</a><br><br>this \
fails (set time zone implicitly through dtstart):<br><br><font face="monospace, \
monospace">      $a = DateTime::Event::ICal-&gt;recur(<br>                  dtstart \
=&gt; $dt19970902T090000_tz ,<br>                  freq =&gt; &#39;daily&#39;,<br>    \
count =&gt; 10 )<br>                  -&gt;intersection( $period_1995_1999 \
);</font><div><br></div><div>this other test works (time zone is set explicitly for \
the whole recurrence):</div><div><br></div><div><div><font face="monospace, \
monospace">      $a = DateTime::Event::ICal-&gt;recur(</font></div><div><font \
face="monospace, monospace">                  dtstart =&gt; $dt19970902T090000_tz \
,</font></div><div><font face="monospace, monospace">                  freq =&gt; \
&#39;daily&#39;,</font></div><div><font face="monospace, monospace">                  \
count =&gt; 10 )</font></div><div><font face="monospace, monospace">                  \
-&gt;set_time_zone( &quot;America/New_York&quot; )</font></div><div><font \
face="monospace, monospace">                  -&gt;intersection( $period_1995_1999 \
);</font></div></div><div><br></div><div>I believe this is the correct behaviour \
(though it should warn!), because  </div><div><a \
href="http://www.ietf.org/rfc/rfc2445.txt" \
target="_blank">http://www.ietf.org/rfc/rfc244<wbr>5.txt</a><br></div><div>says:</div><div><br></div><div>&lt;quote&gt;</div><div><pre \
style="word-wrap:break-word">Dawson &amp; Stenerson               Standards Track     \
[Page 117]<br><br>RFC 2445                                  iCalendar                \
November 1998<br><br><br>     The &quot;DTSTART&quot; and &quot;DTEND&quot; property \
pair or &quot;DTSTART&quot; and &quot;DURATION&quot;<br>     property pair, specified \
within the iCalendar object defines the<br>     first instance of the recurrence. \
When used with a recurrence rule,<br>     the &quot;DTSTART&quot; and \
&quot;DTEND&quot; properties MUST be specified in local time<br>     and the \
appropriate set of &quot;VTIMEZONE&quot; calendar components MUST be<br>     \
included. For detail on the usage of the &quot;VTIMEZONE&quot; calendar<br>     \
component, see the &quot;VTIMEZONE&quot; calendar component definition.<font \
color="#000000"><span \
style="white-space:pre-wrap">&lt;/quote&gt;</span></font></pre><pre \
style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap"><font face="arial, \
helvetica, sans-serif">I *think* DateTime::Event::ICal is doing the right thing, but \
the module documentation is not clear:</font></pre><pre \
style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap"><font face="arial, \
helvetica, sans-serif">&lt;quote&gt;</font></pre><pre \
style="word-wrap:break-word"><font color="#000000"><span \
style="white-space:pre-wrap"><font face="monospace, monospace">This method takes \
parameters which correspond to the rule parts specified in section 4.3.10 of RFC \
2445.  Rather than rewrite that RFC here, you are encouraged to read that first if \
you want to understand what all these parameters represent.</font><font face="arial, \
helvetica, sans-serif"> </font></span></font></pre><div><font face="arial, helvetica, \
sans-serif">&lt;/quote&gt;</font></div><pre \
style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap"><font face="arial, \
helvetica, sans-serif">It *could* as well also use the time_zone from \
&quot;dtstart&quot;.</font></pre><pre \
style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap"><font face="arial, \
helvetica, sans-serif">Simon: do you think this explains the problem, and can this \
can be fixed in your module maybe?</font></pre><pre \
style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap"><font face="arial, \
helvetica, sans-serif">Flávio S. Glock</font><br></pre><pre \
style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap"><font face="arial, \
helvetica, sans-serif"><br></font></pre></div></div><div \
class="gmail-m_-3591553219584233613m_1848727811611487409HOEnZb"><div \
class="gmail-m_-3591553219584233613m_1848727811611487409h5"><div \
class="gmail_extra"><br><div class="gmail_quote">2017-08-18 18:28 GMT+02:00 Flavio S. \
Glock <span dir="ltr">&lt;<a href="mailto:fglock@gmail.com" \
target="_blank">fglock@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" \
style="margin:0px 0px 0px 0.8ex;border-left:1px solid \
rgb(204,204,204);padding-left:1ex">just to confirm, I did a fresh install and I \
get:<br> <br>
t/01.parse_recurring.t ...... 1/18<br>
#     Failed test at t/01.parse_recurring.t line 25.<br>
#               got: &#39;floating&#39;<br>
#        expected: &#39;Europe/London&#39;<br>
<br>
I&#39;m investigating a bit<br>
<br>
Flávio<br>
<div class="gmail-m_-3591553219584233613m_1848727811611487409m_-2462350057489538370HOEnZb"><div \
class="gmail-m_-3591553219584233613m_1848727811611487409m_-2462350057489538370h5"><br>
 <br>
2017-08-18 17:33 GMT+02:00 Th.J. van Hoesel &lt;<a \
href="mailto:slrn406268377@gmail.com" \
target="_blank">slrn406268377@gmail.com</a>&gt;:<br> &gt; just fiddling along, it \
works if I first install FGLOCK/DateTime-Event-Recurren<wbr>ce-0.16<br> &gt;<br>
&gt;&gt; On 18 Aug 2017, at 15:34, Th.J. van Hoesel &lt;<a \
href="mailto:th.j.v.hoesel@me.com" target="_blank">th.j.v.hoesel@me.com</a>&gt; \
wrote:<br> &gt;&gt;<br>
&gt;&gt; Hi Flávio, Hello Simon,<br>
&gt;&gt;<br>
&gt;&gt; i&#39;ve some issues with installing Data::Ical::DateTime and I can not \
exactly say who is in the right or who is in the wrong, that would require more \
investigation.<br> &gt;&gt;<br>
&gt;&gt; Data::Ical::DateTime is depending on DateTime::Event::Recurrence, with is \
dependent on DateTime::Set. When that was changed back in november 2015, that is when \
Data::ICal::DateTime started failing on CPAN testers.<br> &gt;&gt;<br>
&gt;&gt; Maybe one does a wrong call and should actually had expected to get \
&quot;floating&quot; timezones, maybe one does expected that his timezone from the \
.ics test file would be honoured.<br> &gt;&gt;<br>
&gt;&gt; Could you please be so kind and have a look, you probably do understand the \
problem-space much better than I do. Would I have understood, I probably would had \
sent a bug fix<br> &gt;&gt;<br>
&gt;&gt; Theo<br>
&gt;&gt;<br>
&gt;&gt; PS. It is part of the &quot;Act-out-of-the-Box&quot; install script, and it \
just looks ugly to do a force install, but it will do the job for now<br> &gt;<br>
</div></div></blockquote></div><br></div>
</div></div></div><br></div>
</div></div></blockquote></div><br></div></div></div></div></div></div>
</blockquote></div><br></div></div></div>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic