Changes of Revision 7
[-] [+] | Changed | _service:tar_git:harbour-avarisk.spec |
[-] [+] | Changed | _service ^ |
@@ -2,6 +2,6 @@ <service name="tar_git"> <param name="url">https://github.com/fridlmue/harbour-avarisk.git</param> <param name="branch">main</param> - <param name="revision">0.8.3</param> + <param name="revision">0.9.2</param> </service> </services> | ||
[-] [+] | Deleted | _service:tar_git:harbour-avarisk-0.8.3.tar.bz2/etc/regionMap.html ^ |
@@ -1,151 +0,0 @@ -<img class="download-printversion-c" src="https://www.slf.ch/fragment/img/reg_eint.jpg" alt="" usemap='#arcmap_c' width="632" height="452" /> - -<map name="arcmap_c"><area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1111&b=c&l=de" title="Waadtländer Voralpen" alt="Waadtländer Voralpen" name="Waadtländer Voralpen" coords="152,298,143,298,130,293,131,285,136,278,137,277,141,272,148,270,154,277,152,279,151,284,150,289,150,291,152,296,152,298" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1112&b=c&l=de" title="Pays d'Enhaut" alt="Pays d'Enhaut" name="Pays d'Enhaut" coords="189,273,189,275,189,275,189,280,188,285,188,286,185,289,185,289,181,297,179,302,169,299,168,298,167,297,157,300,154,300,152,298,152,296,150,291,150,289,151,284,152,279,154,277,157,279,164,282,165,282,167,281,170,279,171,278,171,277,172,276,172,275,173,274,184,269,186,269,186,269,188,272,189,273" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1113&b=c&l=de" title="Aigle-Leysin" alt="Aigle-Leysin" name="Aigle-Leysin" coords="130,293,143,298,152,298,154,300,157,300,167,297,168,298,169,299,165,306,163,310,161,312,158,315,156,316,151,319,148,320,143,309,138,302,136,300,130,293" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1114&b=c&l=de" title="Bex-Villars" alt="Bex-Villars" name="Bex-Villars" coords="162,350,162,350,160,347,158,346,157,339,158,339,158,338,157,338,152,326,151,325,150,325,148,320,151,319,156,316,158,315,161,312,163,310,165,306,169,299,179,302,180,306,182,311,177,317,177,319,175,324,167,333,167,334,167,334,164,339,164,343,162,350" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1121&b=c&l=de" title="Jaun" alt="Jaun" name="Jaun" coords="194,239,195,240,198,239,198,239,199,240,201,241,202,241,202,242,202,243,202,244,202,246,202,249,201,250,200,251,200,251,199,250,198,250,196,250,195,250,193,252,193,253,193,253,195,259,198,262,193,269,188,272,186,269,186,269,184,269,173,274,172,275,172,276,171,277,171,278,170,279,167,281,165,282,164,282,157,279,154,277,152,274,151,274,151,272,152,269,154,267,156,264,158,263,161,262,164,262,165,262,168,261,169,257,170,253,171,251,171,251,172,250,173,248,174,247,174,247,175,245,177,242,178,242,179,241,180,239,181,239,185,238,188,238,194,239,194,239" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1122&b=c&l=de" title="Gruyère" alt="Gruyère" name="Gruyère" coords="186,233,198,239,198,239,195,240,194,239,194,239,188,238,185,238,181,239,180,239,179,241,178,242,177,242,175,245,174,247,174,247,173,248,173,248,172,250,171,251,171,251,170,253,169,257,168,261,165,262,164,262,161,262,158,263,156,264,154,267,152,269,151,272,151,274,148,270,149,266,149,264,147,260,149,255,154,251,154,250,160,245,167,237,167,236,167,236,164,233,164,233,165,231,168,227,169,226,171,225,179,226,179,228,182,230,185,233,186,233,186,233" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1211&b=c&l=de" title="westliche Berner Voralpen" alt="westliche Berner Voralpen" name="westliche Berner Voralpen" coords="229,221,235,236,236,237,237,237,243,243,243,248,236,243,235,243,230,240,228,239,221,235,220,235,213,235,211,235,208,234,206,235,201,237,198,239,186,233,188,232,191,228,192,225,192,225,192,224,190,224,190,223,189,222,193,215,194,214,196,212,197,211,201,210,204,209,210,204,212,203,213,201,215,198,215,198,216,198,218,198,220,198,232,204,233,205,233,209,233,215,233,215,231,217,230,218,229,218,229,219,229,220,229,221" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1212&b=c&l=de" title="östliche Berner Voralpen" alt="östliche Berner Voralpen" name="östliche Berner Voralpen" coords="273,194,272,197,277,202,279,204,280,205,282,212,281,212,278,216,274,215,271,216,269,217,262,222,257,225,254,228,254,228,251,231,245,239,243,241,243,243,237,237,236,237,235,236,229,221,229,220,229,219,229,218,230,218,231,217,233,215,233,215,233,209,233,205,235,202,235,202,245,196,245,196,246,195,247,196,248,196,248,196,249,196,251,194,254,193,256,188,257,188,265,185,270,183,276,183,277,183,277,184,277,188,276,191,275,191,273,194" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1213&b=c&l=de" title="Hohgant" alt="Hohgant" name="Hohgant" coords="278,216,281,219,284,219,284,219,286,221,287,223,287,224,283,225,273,233,271,235,268,238,266,240,265,241,263,244,261,247,261,248,261,248,260,248,254,249,252,250,252,249,248,248,246,246,245,246,244,244,243,243,243,241,245,239,251,231,254,228,254,228,257,225,262,222,269,217,271,216,274,215,278,216" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1221&b=c&l=de" title="Niedersimmental" alt="Niedersimmental" name="Niedersimmental" coords="230,240,235,243,236,243,237,244,238,247,238,248,239,250,239,251,237,254,234,255,230,251,225,252,223,252,218,255,214,257,211,258,204,257,199,261,198,262,195,259,193,253,193,253,193,252,195,250,196,250,198,250,199,250,200,251,200,251,201,250,202,249,202,246,202,244,202,243,202,242,202,241,201,241,199,240,198,239,201,237,206,235,208,234,211,235,213,235,220,235,221,235,228,239,230,240" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1222&b=c&l=de" title="Gstaad" alt="Gstaad" name="Gstaad" coords="202,269,200,277,200,279,200,281,201,282,204,285,204,289,204,289,204,295,203,297,202,297,198,298,187,302,180,306,179,302,181,297,185,289,185,289,188,286,188,285,189,280,189,275,189,275,189,273,188,272,193,269,202,269" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1223&b=c&l=de" title="Wildhorn" alt="Wildhorn" name="Wildhorn" coords="185,312,184,312,183,311,182,311,180,306,187,302,198,298,202,297,203,297,204,304,200,307,196,308,194,310,193,311,190,311,185,312" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1224&b=c&l=de" title="Lenk" alt="Lenk" name="Lenk" coords="207,292,204,295,204,289,204,289,204,285,201,282,200,281,200,279,200,277,202,269,209,271,212,272,216,273,222,276,219,279,218,285,218,289,215,290,209,291,207,292" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1225&b=c&l=de" title="Iffigen" alt="Iffigen" name="Iffigen" coords="226,296,227,301,223,302,218,303,217,303,216,303,215,302,211,301,210,301,208,302,205,303,204,304,203,297,204,295,207,292,209,291,215,290,218,289,226,296" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1226&b=c&l=de" title="Adelboden" alt="Adelboden" name="Adelboden" coords="235,280,218,289,218,285,219,279,222,276,226,270,226,269,227,269,228,268,233,258,234,255,237,254,239,251,239,250,238,248,238,247,237,244,236,243,243,248,244,249,244,254,243,256,240,259,237,264,237,270,237,277,237,278,235,280" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1227&b=c&l=de" title="Engstligen" alt="Engstligen" name="Engstligen" coords="230,295,226,296,218,289,235,280,230,295" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1228&b=c&l=de" title="Obersimmental" alt="Obersimmental" name="Obersimmental" coords="234,255,233,258,228,268,227,269,226,269,226,270,222,276,216,273,212,272,209,271,202,269,193,269,198,262,199,261,204,257,211,258,214,257,218,255,223,252,225,252,230,251,234,255" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1231&b=c&l=de" title="Kandersteg" alt="Kandersteg" name="Kandersteg" coords="252,249,252,250,254,249,260,248,261,248,261,248,261,247,262,250,258,255,257,256,256,257,254,259,253,262,249,268,248,271,247,274,247,275,246,276,246,277,242,281,241,281,240,281,239,281,238,280,237,278,237,277,237,270,237,264,240,259,243,256,244,254,244,249,243,248,243,243,244,244,245,246,246,246,248,248,252,249" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1232&b=c&l=de" title="Blüemlisalp" alt="Blüemlisalp" name="Blüemlisalp" coords="259,280,263,283,263,283,260,285,250,293,246,295,239,295,232,295,230,295,235,280,237,278,238,280,239,281,240,281,241,281,242,281,246,277,246,276,247,275,247,274,248,271,249,268,253,262,254,259,256,257,257,256,258,258,259,259,261,262,261,263,261,265,260,274,259,280" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1233&b=c&l=de" title="Lauterbrunnen" alt="Lauterbrunnen" name="Lauterbrunnen" coords="270,254,273,256,277,261,279,263,279,264,270,271,269,272,268,271,268,271,267,271,267,269,267,268,267,267,268,265,268,263,269,261,268,258,268,257,267,255,266,255,264,254,264,254,263,254,260,254,258,255,262,250,272,249,270,254" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1234&b=c&l=de" title="Jungfrau - Schilthorn" alt="Jungfrau - Schilthorn" name="Jungfrau - Schilthorn" coords="264,254,264,254,266,255,267,255,268,257,268,258,269,261,268,263,268,265,267,267,267,268,267,269,267,271,268,271,268,271,269,272,270,271,279,264,279,263,284,268,275,279,263,283,259,280,260,274,261,265,261,263,261,262,259,259,258,258,257,256,258,255,260,254,263,254,264,254" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1241&b=c&l=de" title="Brienz-Interlaken" alt="Brienz-Interlaken" name="Brienz-Interlaken" coords="293,244,289,246,288,246,287,246,287,246,287,245,283,246,277,246,274,247,273,248,272,249,262,250,261,247,263,244,265,241,266,240,268,238,271,235,273,233,283,225,287,224,291,224,295,224,302,231,305,235,305,236,304,237,302,240,301,241,293,243,293,244" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1242&b=c&l=de" title="Grindelwald" alt="Grindelwald" name="Grindelwald" coords="293,243,297,249,279,263,277,261,273,256,270,254,272,249,273,248,274,247,277,246,283,246,287,245,287,246,287,246,288,246,289,246,293,244,293,243" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1243&b=c&l=de" title="Schreckhorn" alt="Schreckhorn" name="Schreckhorn" coords="308,262,314,262,315,262,306,273,304,273,303,272,300,272,299,270,299,270,292,268,290,268,287,267,286,267,284,268,279,263,297,249,302,257,305,260,308,262" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1244&b=c&l=de" title="Hasliberg - Rosenlaui" alt="Hasliberg - Rosenlaui" name="Hasliberg - Rosenlaui" coords="316,228,317,229,319,230,313,239,308,242,299,248,297,249,293,243,301,241,302,240,304,237,305,236,305,235,302,231,308,228,310,227,316,228" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1245&b=c&l=de" title="Guttannen" alt="Guttannen" name="Guttannen" coords="315,262,314,262,308,262,305,260,302,257,297,249,299,248,308,242,313,239,320,242,325,244,331,251,325,254,320,257,315,262" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1246&b=c&l=de" title="Gadmertal" alt="Gadmertal" name="Gadmertal" coords="343,241,342,242,341,243,340,243,337,242,336,242,336,242,335,243,335,245,337,249,332,253,331,251,325,244,320,242,313,239,319,230,320,230,322,229,324,227,324,227,324,226,324,225,324,224,324,224,328,221,329,222,334,226,340,227,341,227,342,228,342,228,342,235,343,239,343,241" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1247&b=c&l=de" title="Grimselpass" alt="Grimselpass" name="Grimselpass" coords="332,253,332,254,331,259,331,262,331,262,332,262,331,263,329,266,321,271,317,273,315,273,308,274,306,273,315,262,320,257,325,254,331,251,332,253" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1311&b=c&l=de" title="Vouvry" alt="Vouvry" name="Vouvry" coords="136,300,138,302,143,309,148,320,150,325,134,325,135,323,135,321,136,320,134,318,133,318,133,318,132,317,131,315,128,313,127,313,127,311,125,310,125,309,123,307,124,305,126,304,128,302,128,299,130,293,136,300" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=1312&b=c&l=de" title="Monthey-Val d'Illiez" alt="Monthey-Val d'Illiez" name="Monthey-Val d'Illiez" coords="160,347,157,348,149,350,147,350,145,350,143,349,140,350,139,350,138,350,136,349,134,349,132,348,129,348,128,347,127,347,127,347,126,345,126,343,126,342,128,339,128,336,127,335,127,335,132,327,134,325,150,325,151,325,152,326,157,338,158,338,158,339,157,339,158,346,160,347" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2111&b=c&l=de" title="Pilatus" alt="Pilatus" name="Pilatus" coords="333,190,328,197,327,199,327,203,325,201,321,198,319,198,315,197,314,197,300,204,296,205,295,205,292,203,290,199,299,191,304,187,308,185,314,185,318,185,319,185,324,188,324,188,324,188,324,188,324,188,325,188,326,188,326,188,333,190" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2112&b=c&l=de" title="Schwarzenberg" alt="Schwarzenberg" name="Schwarzenberg" coords="343,169,344,174,346,177,347,178,348,179,349,179,350,180,349,181,349,182,349,183,345,185,340,187,336,188,335,189,333,190,326,188,326,188,325,188,324,188,324,188,324,188,324,188,324,188,319,185,318,185,314,185,308,185,304,187,299,191,290,199,283,200,279,204,277,202,272,197,273,194,275,191,276,191,277,188,277,184,277,183,276,183,276,181,277,180,283,173,284,172,300,167,301,166,302,166,305,167,304,172,305,173,305,174,319,173,323,173,324,173,329,171,330,170,333,168,334,168,335,165,341,165,342,166,343,169,343,169" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2121&b=c&l=de" title="Glaubenberg" alt="Glaubenberg" name="Glaubenberg" coords="324,204,320,207,314,213,310,217,300,221,297,222,296,223,295,224,291,224,287,224,287,223,286,221,284,219,284,219,281,219,278,216,281,212,282,212,280,205,279,204,283,200,290,199,292,203,295,205,296,205,300,204,314,197,315,197,319,198,321,198,325,201,327,203,324,204" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2122&b=c&l=de" title="Engelberg" alt="Engelberg" name="Engelberg" coords="347,226,342,228,342,228,341,227,340,227,334,226,329,222,328,221,328,220,327,217,326,213,326,207,327,203,334,202,340,202,344,203,344,211,349,212,353,214,352,220,351,225,347,226" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2123&b=c&l=de" title="Melchtal" alt="Melchtal" name="Melchtal" coords="326,207,326,213,327,217,328,220,328,221,324,224,324,224,324,225,324,226,324,227,324,227,322,229,320,230,319,230,317,229,316,228,310,227,308,228,302,231,295,224,296,223,297,222,300,221,310,217,314,213,320,207,324,204,327,203,326,207" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2124&b=c&l=de" title="Gersau" alt="Gersau" name="Gersau" coords="354,197,349,199,347,199,346,199,344,203,340,202,334,202,327,203,327,199,328,197,333,190,335,189,336,188,340,187,345,185,349,183,349,182,349,181,350,180,349,179,360,181,360,184,360,186,360,187,354,197" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2131&b=c&l=de" title="Rothenthurm" alt="Rothenthurm" name="Rothenthurm" coords="361,180,360,181,349,179,348,179,347,178,346,177,344,174,343,169,343,169,342,166,341,165,335,165,337,161,340,159,366,155,368,154,372,152,372,152,381,149,382,150,383,150,385,150,386,151,391,155,392,156,388,161,386,162,384,163,383,164,373,168,372,177,367,177,361,180" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2132&b=c&l=de" title="Ybrig" alt="Ybrig" name="Ybrig" coords="373,168,383,164,384,163,386,162,388,161,392,156,395,155,395,154,398,150,408,157,406,165,406,165,407,166,407,168,406,173,403,175,402,175,401,175,398,175,397,175,397,176,396,177,394,182,384,184,380,182,372,178,372,177,373,168" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2133&b=c&l=de" title="Stoos" alt="Stoos" name="Stoos" coords="384,184,379,186,378,187,377,190,375,192,372,191,368,191,360,184,360,181,361,180,367,177,372,177,372,178,380,182,384,184" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2134&b=c&l=de" title="Bisistal" alt="Bisistal" name="Bisistal" coords="402,191,402,191,403,191,405,189,405,195,400,200,399,201,397,202,394,207,381,203,378,202,375,199,375,199,379,196,379,196,375,192,377,190,378,187,379,186,384,184,394,182,398,183,399,184,400,184,400,186,400,187,402,191" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2211&b=c&l=de" title="Schächental" alt="Schächental" name="Schächental" coords="384,219,382,219,381,219,371,227,370,227,370,226,370,223,369,220,366,216,366,215,365,212,363,202,362,197,362,196,363,192,368,191,372,191,375,192,379,196,379,196,375,199,375,199,378,202,381,203,394,207,394,213,392,215,384,219" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2212&b=c&l=de" title="Uri Rot Stock" alt="Uri Rot Stock" name="Uri Rot Stock" coords="362,197,363,202,365,212,366,215,366,216,369,220,370,223,370,226,370,227,367,226,359,224,353,226,352,226,351,225,352,220,353,214,349,212,344,211,344,203,346,199,347,199,349,199,354,197,360,187,360,186,360,184,368,191,363,192,362,196,362,197" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2221&b=c&l=de" title="Meiental" alt="Meiental" name="Meiental" coords="367,226,370,227,371,227,374,239,370,239,369,238,360,239,355,240,342,246,338,248,337,249,335,245,335,243,336,242,336,242,337,242,340,243,341,243,342,242,343,241,343,239,342,235,342,228,347,226,351,225,352,226,353,226,359,224,367,226" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2222&b=c&l=de" title="Maderanertal" alt="Maderanertal" name="Maderanertal" coords="397,218,392,222,389,233,388,233,376,240,374,240,374,239,371,227,381,219,382,219,384,219,392,215,394,213,397,218" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2223&b=c&l=de" title="nördliches Urseren" alt="nördliches Urseren" name="nördliches Urseren" coords="356,256,345,262,344,261,343,262,339,263,338,264,339,254,337,249,338,248,342,246,355,240,360,239,369,238,370,239,374,239,374,240,372,244,371,248,369,248,367,248,365,250,356,256" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=2224&b=c&l=de" title="südliches Urseren" alt="südliches Urseren" name="südliches Urseren" coords="369,251,369,252,368,252,370,254,371,255,372,256,372,260,372,263,358,266,346,273,339,269,338,264,339,263,343,262,344,261,345,262,356,256,365,250,367,248,369,248,371,248,369,251" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3111&b=c&l=de" title="Glarus Nord" alt="Glarus Nord" name="Glarus Nord" coords="427,169,420,170,415,170,412,171,406,173,407,168,407,166,406,165,406,165,408,157,411,151,412,150,419,157,420,157,421,158,425,157,427,158,427,159,427,161,427,163,427,164,427,169" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3112&b=c&l=de" title="Glarus Süd-Grosstal" alt="Glarus Süd-Grosstal" name="Glarus Süd-Grosstal" coords="406,220,404,221,397,218,394,213,394,207,397,202,399,201,400,200,405,195,405,189,410,185,413,182,415,180,416,181,417,182,417,182,418,183,420,183,423,183,423,184,423,186,422,189,421,192,421,192,421,204,421,205,422,206,419,209,412,218,408,219,406,220" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3113&b=c&l=de" title="Glarus Süd-Sernftal" alt="Glarus Süd-Sernftal" name="Glarus Süd-Sernftal" coords="443,177,444,179,444,181,445,196,445,198,442,200,440,203,439,204,436,206,435,207,429,209,429,209,427,207,426,206,423,206,422,206,421,205,421,204,421,192,421,192,422,189,423,186,423,184,423,183,429,175,429,175,430,176,431,177,435,176,438,176,439,175,440,175,443,177" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3114&b=c&l=de" title="Glarus Mitte" alt="Glarus Mitte" name="Glarus Mitte" coords="429,175,423,183,420,183,418,183,417,182,417,182,416,181,415,180,413,182,410,185,405,189,403,191,402,191,402,191,400,187,400,186,400,184,399,184,398,183,394,182,396,177,397,176,397,175,398,175,401,175,402,175,403,175,406,173,412,171,415,170,420,170,427,169,428,172,429,175" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3211&b=c&l=de" title="Appenzeller Alpen" alt="Appenzeller Alpen" name="Appenzeller Alpen" coords="497,107,497,109,497,110,496,111,491,111,490,112,488,116,486,121,483,124,482,128,480,130,475,124,473,121,470,116,465,119,454,126,454,127,454,130,450,133,444,129,444,120,444,116,449,108,458,103,466,104,471,107,478,101,482,100,493,97,495,96,493,98,493,99,495,104,495,105,497,106,497,107" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3221&b=c&l=de" title="Toggenburg" alt="Toggenburg" name="Toggenburg" coords="450,133,448,136,437,148,434,149,432,149,429,148,428,148,427,147,424,150,423,151,425,156,425,157,421,158,420,157,419,157,412,150,411,151,408,157,398,150,395,154,395,155,392,156,391,155,386,151,385,150,383,150,383,147,383,147,386,143,388,140,390,139,391,138,391,139,392,139,397,137,402,136,407,133,407,133,407,127,408,127,412,125,412,125,414,126,414,126,414,126,415,127,414,129,416,132,422,135,425,132,426,130,430,127,432,125,439,122,439,122,444,120,444,129,450,133" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3222&b=c&l=de" title="Alpstein - Alvier" alt="Alpstein - Alvier" name="Alpstein - Alvier" coords="475,149,476,151,477,155,479,162,479,163,478,165,475,168,474,169,473,169,473,171,468,171,464,170,462,168,459,165,458,164,457,162,451,157,437,157,431,156,425,156,423,151,424,150,427,147,428,148,429,148,432,149,434,149,437,148,448,136,450,133,454,130,454,127,454,126,465,119,470,116,473,121,475,124,480,130,479,133,476,139,476,141,475,144,474,147,475,149" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3223&b=c&l=de" title="Flumserberg" alt="Flumserberg" name="Flumserberg" coords="468,171,466,173,465,172,458,175,446,181,444,181,444,179,443,177,440,175,439,175,438,176,435,176,431,177,430,176,429,175,429,175,428,172,427,169,427,164,427,163,427,161,427,159,427,158,425,157,425,156,431,156,437,157,451,157,457,162,458,164,459,165,462,168,464,170,468,171" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3224&b=c&l=de" title="Sarganserland" alt="Sarganserland" name="Sarganserland" coords="473,171,478,179,480,182,478,184,478,190,473,202,471,205,470,206,468,208,466,208,463,209,462,201,461,201,456,200,451,199,445,198,445,196,444,181,446,181,458,175,465,172,466,173,468,171,473,171" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=3311&b=c&l=de" title="Liechtenstein" alt="Liechtenstein" name="Liechtenstein" coords="484,135,483,138,485,140,487,142,486,145,486,147,485,149,486,149,488,149,489,150,490,152,492,152,492,155,494,156,492,160,494,162,494,165,492,166,491,168,491,169,484,172,484,171,482,169,476,171,475,172,474,171,473,171,473,169,474,169,475,168,478,165,479,163,479,162,477,155,476,151,475,149,474,147,475,144,476,141,476,139,479,133,480,130,484,135" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4111&b=c&l=de" title="Emosson" alt="Emosson" name="Emosson" coords="162,350,162,356,161,358,155,365,152,368,151,368,150,369,149,369,149,367,148,367,146,364,146,363,145,364,144,363,145,361,144,361,142,362,141,363,140,364,139,365,137,365,136,364,137,361,137,360,138,360,139,359,138,355,139,353,139,351,140,350,143,349,145,350,147,350,149,350,157,348,160,347,162,350" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4112&b=c&l=de" title="Génépi" alt="Génépi" name="Génépi" coords="171,356,171,356,172,356,172,356,174,358,168,365,166,367,166,368,166,369,166,370,159,376,157,377,156,377,155,376,155,373,153,373,151,372,151,370,150,369,151,368,152,368,155,365,161,358,162,356,162,357,162,357,164,357,168,356,168,356,169,355,171,356" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4113&b=c&l=de" title="Val d'Entremont-Val Ferret" alt="Val d'Entremont-Val Ferret" name="Val d'Entremont-Val Ferret" coords="191,389,187,395,187,395,185,394,182,394,181,395,180,397,179,398,179,399,178,400,178,400,176,399,174,398,174,397,173,396,171,397,169,400,168,400,167,400,166,399,165,397,163,395,163,393,161,392,161,390,160,389,159,388,158,385,158,382,155,381,154,379,154,379,156,377,157,377,159,376,166,370,166,369,166,368,166,367,168,365,174,358,177,362,178,366,184,372,188,376,188,378,192,386,192,389,191,389" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4114&b=c&l=de" title="Conthey-Fully" alt="Conthey-Fully" name="Conthey-Fully" coords="200,308,200,313,200,315,199,319,198,321,198,323,199,326,201,331,201,331,201,332,197,333,191,336,190,337,187,338,179,342,176,344,174,344,171,347,169,348,166,349,163,350,162,350,162,350,164,343,164,339,167,334,167,334,167,333,175,324,177,319,177,317,182,311,183,311,184,312,185,312,190,311,193,311,194,310,196,308,200,307,200,308" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4115&b=c&l=de" title="Martigny-Verbier" alt="Martigny-Verbier" name="Martigny-Verbier" coords="201,343,200,351,200,354,201,358,200,362,193,363,178,366,177,362,174,358,172,356,172,356,171,356,171,356,169,355,168,356,168,356,164,357,162,357,162,357,162,356,162,350,163,350,166,349,169,348,171,347,174,344,176,344,179,342,187,338,190,337,191,336,197,333,201,332,201,331,204,334,203,337,201,343" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4116&b=c&l=de" title="Haut Val de Bagnes" alt="Haut Val de Bagnes" name="Haut Val de Bagnes" coords="200,363,200,364,200,365,202,370,202,370,206,374,207,375,208,375,208,375,213,376,215,378,218,382,216,382,215,383,215,385,215,386,212,387,210,389,209,390,207,391,206,390,204,392,203,393,203,392,201,391,199,390,196,390,195,389,193,389,192,389,192,386,188,378,188,376,184,372,178,366,193,363,200,362,200,363" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4121&b=c&l=de" title="Montana" alt="Montana" name="Montana" coords="229,301,230,306,231,307,232,313,232,315,231,315,226,319,224,320,224,320,223,320,223,320,218,322,218,322,217,322,217,322,214,323,213,323,203,327,203,328,203,328,202,328,202,329,202,329,202,330,201,331,199,326,198,323,198,321,199,319,200,315,200,313,200,308,200,307,204,304,205,303,208,302,210,301,211,301,215,302,216,303,217,303,218,303,223,302,227,301,228,301,229,301" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4122&b=c&l=de" title="Val d'Hérens" alt="Val d'Hérens" name="Val d'Hérens" coords="209,360,200,362,201,358,200,354,200,351,201,343,203,337,204,334,201,331,201,331,202,330,202,329,202,329,202,328,203,328,203,328,203,327,213,323,214,323,217,322,217,322,218,322,218,322,223,320,223,320,224,320,224,320,223,331,221,342,221,346,225,353,224,354,223,356,220,358,219,358,209,360" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4123&b=c&l=de" title="Arolla" alt="Arolla" name="Arolla" coords="234,367,229,376,228,376,225,377,224,378,225,380,225,381,224,382,222,382,221,381,220,381,218,382,215,378,213,376,208,375,208,375,207,375,206,374,202,370,202,370,200,365,200,364,200,363,200,362,209,360,219,358,220,358,223,356,224,354,225,353,234,367" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4124&b=c&l=de" title="Val d'Anniviers" alt="Val d'Anniviers" name="Val d'Anniviers" coords="246,352,247,354,225,353,221,346,221,342,223,331,224,320,226,319,231,315,232,315,235,314,238,314,239,317,239,322,240,329,240,330,240,336,240,337,239,338,241,345,242,348,244,351,246,352" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4125&b=c&l=de" title="Mountet" alt="Mountet" name="Mountet" coords="247,354,244,361,244,361,242,365,241,366,236,368,234,367,225,353,247,354" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4211&b=c&l=de" title="Leukerbad - Lötschental" alt="Leukerbad - Lötschental" name="Leukerbad - Lötschental" coords="270,294,260,301,258,302,257,303,256,305,253,305,250,305,247,305,245,305,242,304,242,304,240,304,238,304,237,304,235,303,235,303,234,302,232,302,231,301,230,301,229,301,228,301,227,301,226,296,230,295,232,295,239,295,246,295,250,293,260,285,263,283,263,283,275,279,279,283,279,284,279,284,279,285,276,288,270,294" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4212&b=c&l=de" title="Turtmanntal" alt="Turtmanntal" name="Turtmanntal" coords="251,315,251,327,251,331,250,336,250,348,246,352,244,351,242,348,241,345,239,338,240,337,240,336,240,330,240,329,239,322,239,317,238,314,251,315" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4213&b=c&l=de" title="Konkordia Gebiet" alt="Konkordia Gebiet" name="Konkordia Gebiet" coords="263,304,256,305,257,303,258,302,260,301,270,294,276,288,279,285,279,284,279,284,279,283,275,279,284,268,286,267,287,267,290,268,292,268,299,270,299,270,300,272,303,272,304,273,306,273,308,274,308,277,306,279,306,279,305,279,299,284,298,285,290,291,283,296,282,297,277,300,272,302,263,304" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4214&b=c&l=de" title="Riederalp" alt="Riederalp" name="Riederalp" coords="275,317,271,317,267,316,251,315,251,313,252,312,256,305,263,304,272,302,277,300,282,297,283,296,290,291,298,285,299,284,305,279,306,279,305,281,304,285,304,286,305,287,305,288,306,291,306,292,305,292,303,297,302,297,302,297,302,298,298,302,296,302,294,303,291,305,286,310,282,313,275,317,275,317" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4215&b=c&l=de" title="Leuk" alt="Leuk" name="Leuk" coords="250,305,253,305,256,305,252,312,251,313,251,315,238,314,235,314,232,315,232,313,231,307,230,306,229,301,230,301,231,301,232,302,234,302,235,303,235,303,237,304,238,304,240,304,242,304,242,304,245,305,247,305,250,305" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4221&b=c&l=de" title="untere Vispertäler" alt="untere Vispertäler" name="untere Vispertäler" coords="282,313,282,323,284,338,284,339,278,341,274,344,270,345,265,349,262,350,260,351,254,353,248,354,247,354,246,352,250,348,250,336,251,331,251,327,251,315,267,316,271,317,275,317,275,317,282,313" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4222&b=c&l=de" title="Zermatt" alt="Zermatt" name="Zermatt" coords="267,361,269,369,269,369,263,373,256,376,250,377,240,378,239,378,237,379,234,379,233,379,230,379,229,376,234,367,236,368,241,366,242,365,244,361,244,361,247,354,248,354,254,353,260,351,262,350,265,349,270,345,269,346,266,355,266,357,267,361" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4223&b=c&l=de" title="Saas Fee" alt="Saas Fee" name="Saas Fee" coords="287,348,284,351,282,356,280,359,279,361,277,363,269,369,269,369,267,361,266,357,266,355,269,346,270,345,274,344,278,341,284,339,287,348,287,348" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4224&b=c&l=de" title="Monte Rosa" alt="Monte Rosa" name="Monte Rosa" coords="240,378,250,377,256,376,263,373,269,369,269,369,273,374,271,376,269,378,269,380,268,385,268,387,267,389,266,388,265,388,262,388,261,388,261,388,259,389,259,389,258,389,256,387,255,386,253,385,252,385,251,385,250,388,248,388,246,386,246,383,243,382,242,380,240,378" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4225&b=c&l=de" title="Mattmark" alt="Mattmark" name="Mattmark" coords="289,355,289,356,288,359,288,360,288,361,289,363,289,365,287,366,287,367,286,371,285,371,283,374,281,373,280,374,273,374,269,369,269,369,277,363,279,361,280,359,282,356,284,351,287,348,289,355" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4231&b=c&l=de" title="nördliches Simplon Gebiet" alt="nördliches Simplon Gebiet" name="nördliches Simplon Gebiet" coords="293,328,292,328,292,328,284,325,282,323,282,313,286,310,291,305,294,303,296,302,298,302,300,305,297,309,300,314,302,316,301,317,300,318,299,319,298,320,297,322,295,324,295,324,296,325,297,325,298,326,295,328,293,328" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4232&b=c&l=de" title="südliches Simplon Gebiet" alt="südliches Simplon Gebiet" name="südliches Simplon Gebiet" coords="284,325,292,328,292,328,293,328,295,328,298,326,299,326,299,328,300,329,301,330,303,331,305,337,306,339,305,340,304,342,304,344,304,346,303,347,301,347,300,348,299,349,299,351,297,353,294,353,289,355,287,348,287,348,284,339,284,338,282,323,284,325" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4241&b=c&l=de" title="Reckingen" alt="Reckingen" name="Reckingen" coords="315,284,315,285,303,297,305,292,306,292,306,291,305,288,305,287,304,286,304,285,305,281,306,279,306,279,308,277,315,284" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4242&b=c&l=de" title="Binntal" alt="Binntal" name="Binntal" coords="323,303,321,304,319,304,319,304,318,305,318,308,317,308,317,309,315,309,313,311,312,315,308,317,306,317,302,316,300,314,297,309,300,305,298,302,302,298,302,297,302,297,303,297,315,285,316,286,317,287,317,287,317,290,317,291,317,292,316,293,317,293,317,294,317,294,319,295,322,296,323,296,324,296,325,297,325,299,325,300,325,301,323,303" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4243&b=c&l=de" title="nördliches Obergoms" alt="nördliches Obergoms" name="nördliches Obergoms" coords="339,254,338,264,339,269,336,268,330,271,318,281,315,284,308,277,308,274,315,273,317,273,321,271,329,266,331,263,332,262,331,262,331,262,331,259,332,254,332,253,337,249,339,254" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=4244&b=c&l=de" title="südliches Obergoms" alt="südliches Obergoms" name="südliches Obergoms" coords="339,269,346,273,345,276,342,279,338,280,337,280,335,281,335,283,334,284,335,287,332,288,326,292,324,293,322,296,319,295,317,294,317,294,317,293,316,293,317,292,317,291,317,290,317,287,317,287,316,286,315,285,315,284,318,281,330,271,336,268,339,269" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5111&b=c&l=de" title="nördliches Prättigau" alt="nördliches Prättigau" name="nördliches Prättigau" coords="500,169,504,171,508,172,509,173,511,173,513,173,515,174,517,175,518,176,520,177,522,177,524,176,525,176,526,176,525,177,525,178,527,180,528,180,527,185,526,186,526,188,526,189,527,191,527,192,528,193,534,196,535,196,537,196,539,196,541,197,542,198,543,198,538,202,535,201,535,201,534,202,534,205,533,205,531,205,529,204,527,203,524,200,521,198,517,197,515,196,514,196,512,196,510,195,507,194,504,190,503,188,502,186,501,186,498,185,497,184,495,184,493,185,492,185,484,186,480,182,478,179,473,171,474,171,475,172,476,171,482,169,484,171,484,172,491,169,492,170,494,171,496,169,498,169,500,169" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5112&b=c&l=de" title="südliches Prättigau" alt="südliches Prättigau" name="südliches Prättigau" coords="510,195,512,196,514,196,515,196,517,197,521,198,524,200,527,203,529,204,531,205,533,205,534,205,536,215,534,215,533,215,528,213,521,211,518,210,518,209,518,208,516,207,515,206,514,205,512,205,492,205,490,206,488,207,488,208,486,209,485,209,482,209,481,209,479,208,479,207,481,205,481,205,485,196,485,194,485,194,483,192,483,192,483,190,483,187,484,186,492,185,493,185,495,184,497,184,498,185,501,186,502,186,503,188,504,190,507,194,510,195" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5113&b=c&l=de" title="westliche Silvretta" alt="westliche Silvretta" name="westliche Silvretta" coords="545,198,548,201,549,202,549,204,550,205,552,205,554,205,555,207,546,218,539,224,536,215,534,205,534,202,535,201,535,201,538,202,543,198,544,198,545,198" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5121&b=c&l=de" title="Calanda" alt="Calanda" name="Calanda" coords="467,213,466,215,463,209,466,208,468,208,470,206,471,205,473,202,478,190,478,184,480,182,484,186,483,187,483,190,483,192,483,192,485,194,485,194,485,196,481,205,481,205,479,207,476,210,476,210,473,211,471,211,467,213" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5122&b=c&l=de" title="Schanfigg" alt="Schanfigg" name="Schanfigg" coords="518,209,518,210,518,213,517,214,513,219,509,222,508,224,507,227,506,228,504,229,499,233,497,233,496,233,493,232,493,231,493,230,491,228,485,227,479,224,469,217,466,215,467,213,471,211,473,211,476,210,476,210,479,207,479,208,481,209,482,209,485,209,486,209,488,208,488,207,490,206,492,205,512,205,514,205,515,206,516,207,518,208,518,209" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5123&b=c&l=de" title="Davos" alt="Davos" name="Davos" coords="521,211,528,213,533,215,534,215,536,215,539,224,537,227,536,229,536,231,537,232,537,232,538,232,538,233,538,237,538,237,528,239,524,239,521,235,519,227,509,222,513,219,517,214,518,213,518,210,521,211" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5124&b=c&l=de" title="Flims" alt="Flims" name="Flims" coords="463,209,466,215,462,221,461,220,460,220,458,218,455,218,453,218,452,218,452,219,452,220,452,220,447,223,442,224,441,224,430,225,413,232,408,234,405,233,402,229,402,227,402,227,404,221,406,220,408,219,412,218,419,209,422,206,423,206,426,206,427,207,429,209,429,209,435,207,436,206,439,204,440,203,442,200,445,198,451,199,456,200,461,201,462,201,463,209" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5211&b=c&l=de" title="nördliches Tujetsch" alt="nördliches Tujetsch" name="nördliches Tujetsch" coords="404,221,402,227,402,227,402,229,405,233,408,234,401,241,398,242,394,242,386,244,382,245,382,245,377,248,372,251,371,251,369,251,371,248,372,244,374,240,376,240,388,233,389,233,392,222,397,218,404,221" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5212&b=c&l=de" title="südliches Tujetsch" alt="südliches Tujetsch" name="südliches Tujetsch" coords="401,241,404,254,403,259,403,260,402,260,402,261,393,265,393,265,392,265,392,265,392,264,390,264,390,264,386,266,386,267,385,268,383,268,375,267,374,266,374,266,372,263,372,260,372,256,371,255,370,254,368,252,369,252,369,251,371,251,372,251,377,248,382,245,382,245,386,244,394,242,398,242,401,241" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5214&b=c&l=de" title="Obersaxen - Safiental" alt="Obersaxen - Safiental" name="Obersaxen - Safiental" coords="454,258,444,262,446,255,443,255,433,254,423,252,417,251,416,244,413,239,412,238,408,234,413,232,430,225,441,224,442,224,447,223,452,220,452,220,452,219,452,218,453,218,455,218,458,218,460,220,461,220,462,221,463,226,463,227,463,229,462,230,460,236,459,238,459,243,455,251,454,251,454,252,453,254,454,256,454,258" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5215&b=c&l=de" title="Val Sumvitg" alt="Val Sumvitg" name="Val Sumvitg" coords="412,238,413,239,416,244,417,251,418,258,404,254,401,241,408,234,412,238" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5216&b=c&l=de" title="Zervreila" alt="Zervreila" name="Zervreila" coords="423,252,433,254,443,255,446,255,444,262,441,265,440,265,430,272,423,275,419,278,418,276,417,275,417,272,417,268,417,266,417,265,418,263,419,263,419,260,419,260,418,258,417,251,423,252" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5221&b=c&l=de" title="Domleschg - Lenzerheide" alt="Domleschg - Lenzerheide" name="Domleschg - Lenzerheide" coords="493,232,488,245,479,252,479,249,479,249,476,242,476,241,473,236,472,236,471,237,470,238,469,239,469,239,467,239,462,238,459,238,460,236,462,230,463,229,463,227,463,226,462,221,466,215,469,217,479,224,485,227,491,228,493,230,493,231,493,232" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5222&b=c&l=de" title="Schams" alt="Schams" name="Schams" coords="473,236,476,241,476,242,479,249,479,249,479,252,478,259,469,260,467,260,466,260,465,259,463,257,454,258,454,256,453,254,454,252,454,251,455,251,459,243,459,238,462,238,467,239,469,239,469,239,470,238,471,237,472,236,473,236" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5223&b=c&l=de" title="Rheinwald" alt="Rheinwald" name="Rheinwald" coords="466,260,467,260,469,260,478,259,480,264,479,270,479,271,479,272,479,272,483,274,484,274,483,277,475,278,474,274,471,276,470,278,469,281,468,282,465,281,465,279,464,279,462,277,463,275,462,274,460,275,455,275,454,276,451,277,446,277,441,275,441,275,432,279,429,280,426,282,419,278,423,275,430,272,440,265,441,265,444,262,454,258,463,257,465,259,466,260" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5231&b=c&l=de" title="Albulatal" alt="Albulatal" name="Albulatal" coords="519,227,521,235,524,239,528,239,526,241,526,241,523,258,524,260,509,265,509,263,507,257,505,255,503,255,502,255,499,254,498,254,496,252,489,246,488,245,493,232,496,233,497,233,499,233,504,229,506,228,507,227,508,224,509,222,519,227" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5232&b=c&l=de" title="Savognin" alt="Savognin" name="Savognin" coords="489,246,496,252,498,254,499,254,502,255,503,255,505,255,507,257,509,263,509,265,505,267,503,265,496,263,493,263,491,263,490,263,490,264,489,265,489,266,489,268,486,274,484,274,483,274,479,272,479,272,479,271,479,270,480,264,478,259,479,252,488,245,489,246" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5233&b=c&l=de" title="Avers" alt="Avers" name="Avers" coords="485,277,487,278,492,282,493,283,494,289,494,290,494,290,492,292,489,294,487,298,486,300,485,300,483,300,480,301,479,301,475,299,476,297,476,294,475,292,474,291,474,290,475,287,475,283,475,281,475,278,483,277,485,277" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=5234&b=c&l=de" title="Bivio" alt="Bivio" name="Bivio" coords="496,263,503,265,505,267,505,270,506,272,506,273,508,273,509,273,510,274,510,278,509,279,509,280,510,282,510,283,510,284,508,286,508,286,507,286,504,287,503,288,501,290,501,291,492,292,494,290,494,290,494,289,493,283,492,282,487,278,485,277,483,277,484,274,486,274,489,268,489,266,489,265,490,264,490,263,491,263,493,263,496,263" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6111&b=c&l=de" title="Bedrettotal" alt="Bedrettotal" name="Bedrettotal" coords="361,285,357,287,351,292,350,293,347,295,345,295,344,293,343,291,344,288,342,285,337,286,335,287,334,284,335,283,335,281,337,280,338,280,342,279,345,276,346,273,358,266,360,270,362,273,363,275,367,280,369,281,373,282,364,284,361,285" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6112&b=c&l=de" title="obere Leventina" alt="obere Leventina" name="obere Leventina" coords="374,266,374,266,375,267,383,268,385,268,386,274,375,282,373,282,369,281,367,280,363,275,362,273,360,270,358,266,372,263,374,266" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6113&b=c&l=de" title="Bleniotal" alt="Bleniotal" name="Bleniotal" coords="417,265,417,266,417,268,417,272,417,275,418,276,419,278,426,282,427,284,428,293,426,298,419,296,414,296,412,298,407,298,406,297,405,295,398,286,397,283,396,280,397,279,397,278,397,277,395,276,392,275,389,273,388,273,387,274,386,274,385,268,386,267,386,266,390,264,390,264,392,264,392,265,392,265,393,265,393,265,402,261,402,260,403,260,403,259,404,254,418,258,419,260,419,260,419,263,418,263,417,265" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6114&b=c&l=de" title="obere Maggiatäler" alt="obere Maggiatäler" name="obere Maggiatäler" coords="375,282,381,296,380,301,377,305,373,310,359,322,352,324,346,325,345,326,342,326,342,325,342,324,344,322,343,321,342,319,340,316,342,315,343,312,344,310,345,308,345,306,345,304,345,303,345,301,344,300,345,298,345,296,345,295,347,295,350,293,351,292,357,287,361,285,364,284,373,282,375,282" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6115&b=c&l=de" title="untere Leventina" alt="untere Leventina" name="untere Leventina" coords="398,286,405,295,406,297,407,298,412,298,414,296,419,296,426,298,424,306,418,304,417,304,416,303,409,304,406,307,402,312,402,313,402,314,400,314,397,311,397,311,396,308,397,307,397,306,394,302,392,300,390,299,382,295,382,295,381,295,381,296,375,282,386,274,387,274,388,273,389,273,392,275,395,276,397,277,397,278,397,279,396,280,397,283,398,286" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6121&b=c&l=de" title="untere Maggiatäler" alt="untere Maggiatäler" name="untere Maggiatäler" coords="397,311,400,314,402,314,403,319,404,323,405,326,406,328,405,332,402,333,400,333,400,333,399,335,398,336,397,339,397,341,397,343,397,343,390,346,386,349,384,352,383,352,382,349,380,351,379,353,378,354,374,353,373,351,372,352,371,351,370,350,369,349,365,350,364,347,362,345,362,344,363,343,363,343,362,343,361,342,360,341,359,339,359,338,357,337,357,336,355,335,354,331,352,331,348,329,346,329,345,328,345,326,346,325,352,324,359,322,373,310,377,305,380,301,381,296,381,295,382,295,382,295,390,299,392,300,394,302,397,306,397,307,396,308,397,311,397,311" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6122&b=c&l=de" title="Riviera" alt="Riviera" name="Riviera" coords="429,332,431,333,437,339,436,341,433,342,432,345,426,348,419,344,417,343,417,343,417,342,417,342,416,341,416,341,415,340,415,340,414,340,413,339,411,339,408,340,404,341,398,342,397,343,397,343,397,341,397,339,398,336,399,335,400,333,400,333,402,333,405,332,406,328,405,326,404,323,403,319,402,314,402,313,402,312,406,307,409,304,416,303,417,304,418,304,424,306,424,307,422,316,423,318,423,319,424,320,421,330,423,330,427,331,429,332" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6131&b=c&l=de" title="Luganese" alt="Luganese" name="Luganese" coords="426,349,427,354,428,355,428,356,427,357,426,359,424,360,422,360,419,361,418,362,418,364,417,365,417,366,419,368,418,370,416,372,413,372,412,371,411,372,411,374,412,376,411,379,410,381,409,383,406,387,405,387,404,387,402,384,402,383,403,381,402,379,402,379,400,380,399,379,398,378,397,377,396,376,395,375,394,374,392,374,390,373,389,373,388,374,389,370,390,368,393,367,393,367,394,364,394,363,394,363,394,362,396,363,396,362,397,360,397,358,396,358,396,357,395,357,391,353,390,353,389,354,387,354,385,353,384,352,386,349,390,346,397,343,398,342,404,341,408,340,411,339,413,339,414,340,415,340,415,340,416,341,416,341,417,342,417,342,417,343,417,343,419,344,426,348,426,349" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6132&b=c&l=de" title="Mendrisiotto" alt="Mendrisiotto" name="Mendrisiotto" coords="420,372,417,375,416,375,416,376,415,377,415,377,416,378,418,379,419,381,418,382,419,383,419,385,420,385,422,385,423,386,424,386,425,387,426,388,427,390,428,390,428,390,426,395,424,395,423,397,423,399,422,401,422,402,421,405,420,405,418,406,416,404,416,403,416,402,415,402,413,403,412,403,411,401,410,401,408,402,407,403,406,403,406,403,405,403,405,402,406,401,408,398,409,397,409,396,408,396,407,392,406,391,407,390,407,390,405,387,406,387,409,383,410,381,411,379,412,376,411,374,411,372,412,371,413,372,416,372,418,370,419,368,420,372" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6211&b=c&l=de" title="alto Moesano" alt="alto Moesano" name="alto Moesano" coords="447,289,439,294,436,294,426,298,428,293,427,284,426,282,429,280,432,279,441,275,441,275,446,277,451,277,450,279,450,281,450,283,451,283,451,284,449,286,447,286,447,288,447,289,447,289" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=6212&b=c&l=de" title="basso Moesano" alt="basso Moesano" name="basso Moesano" coords="451,292,451,294,451,296,451,297,452,298,451,300,451,302,452,303,454,304,454,307,454,309,454,310,453,311,452,312,452,315,451,316,450,317,449,318,449,320,448,320,448,321,448,323,448,327,448,327,446,327,444,328,444,330,444,331,442,332,441,334,441,337,440,339,439,339,437,339,431,333,429,332,427,331,423,330,421,330,424,320,423,319,423,318,422,316,424,307,424,306,426,298,436,294,439,294,447,289,449,291,451,291,451,292" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7111&b=c&l=de" title="Corvatsch" alt="Corvatsch" name="Corvatsch" coords="532,287,534,297,533,297,531,298,529,300,524,301,522,303,518,305,516,306,515,306,513,303,512,303,511,299,511,298,510,296,504,292,503,292,501,291,501,290,503,288,504,287,507,286,508,286,508,286,510,284,510,283,510,282,509,280,512,280,515,281,516,281,517,281,524,281,531,279,532,278,532,287" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7112&b=c&l=de" title="Bernina" alt="Bernina" name="Bernina" coords="537,274,538,276,541,278,541,278,544,278,551,277,552,279,550,283,550,284,551,284,551,286,550,287,541,297,540,297,539,297,537,297,536,299,535,298,535,298,534,297,532,287,532,278,537,273,537,274" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7113&b=c&l=de" title="Zuoz" alt="Zuoz" name="Zuoz" coords="539,241,546,248,550,251,546,256,542,262,541,264,538,271,536,265,536,262,535,261,534,259,534,259,533,259,524,260,523,258,526,241,526,241,528,239,538,237,539,241" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7114&b=c&l=de" title="St. Moritz" alt="St. Moritz" name="St. Moritz" coords="534,259,534,259,535,261,536,262,536,265,538,271,537,273,532,278,531,279,524,281,517,281,516,281,515,281,512,280,509,280,509,279,510,278,510,274,509,273,508,273,506,273,506,272,505,270,505,267,509,265,524,260,533,259,534,259" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7115&b=c&l=de" title="Val Chamuera" alt="Val Chamuera" name="Val Chamuera" coords="558,252,557,252,557,255,558,257,555,259,554,262,553,264,551,265,551,266,552,269,551,272,551,273,551,274,551,275,551,277,544,278,541,278,541,278,538,276,537,274,537,273,538,271,541,264,542,262,546,256,550,251,556,250,558,252" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7121&b=c&l=de" title="Samnaun" alt="Samnaun" name="Samnaun" coords="593,178,594,180,597,182,596,184,597,185,599,186,601,186,604,188,606,188,598,191,598,191,591,199,580,206,574,209,572,203,572,202,573,200,572,199,572,198,573,196,573,194,574,193,574,191,575,191,580,193,581,192,583,192,583,192,583,191,582,189,582,187,582,187,583,187,584,186,584,185,585,185,586,181,588,179,590,178,591,178,593,178" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7122&b=c&l=de" title="östliche Silvretta" alt="östliche Silvretta" name="östliche Silvretta" coords="574,209,574,210,564,213,557,215,546,218,555,207,556,209,558,207,561,207,562,206,564,207,568,204,572,203,574,209" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7123&b=c&l=de" title="Sur Tasna" alt="Sur Tasna" name="Sur Tasna" coords="556,250,550,251,546,248,539,241,538,237,538,237,538,233,538,232,537,232,537,232,536,231,536,229,537,227,539,224,546,218,557,215,564,213,574,210,584,220,579,222,577,223,576,224,569,227,563,231,557,235,555,237,556,248,556,250" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7124&b=c&l=de" title="Val Suot" alt="Val Suot" name="Val Suot" coords="605,190,605,192,604,194,604,197,603,198,603,204,603,208,602,209,602,212,601,214,600,216,598,217,595,216,594,217,584,220,574,210,574,209,580,206,591,199,598,191,598,191,606,188,605,190" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7125&b=c&l=de" title="Val dal Spöl" alt="Val dal Spöl" name="Val dal Spöl" coords="581,247,581,250,579,252,578,252,575,249,575,247,573,248,572,250,572,250,570,249,568,249,563,252,561,253,558,252,556,250,556,248,555,237,557,235,563,231,569,227,576,224,577,223,579,222,577,232,580,237,584,239,585,242,584,242,583,244,582,245,581,247" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7126&b=c&l=de" title="Val S-charl" alt="Val S-charl" name="Val S-charl" coords="595,242,596,246,585,242,584,239,580,237,577,232,579,222,584,220,594,217,595,216,598,217,600,220,601,222,601,224,599,224,596,227,596,228,597,229,598,230,598,232,597,233,596,233,595,236,594,237,595,239,595,242" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7211&b=c&l=de" title="Bergell" alt="Bergell" name="Bergell" coords="503,292,504,292,510,296,511,298,511,299,512,303,511,303,510,305,510,306,509,308,510,311,509,312,509,314,507,314,506,314,504,313,504,312,499,315,496,315,495,314,492,314,491,314,488,312,487,313,486,312,484,310,483,308,482,306,481,303,480,301,479,301,480,301,483,300,485,300,486,300,487,298,489,294,492,292,501,291,503,292" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7221&b=c&l=de" title="oberes Puschlav" alt="oberes Puschlav" name="oberes Puschlav" coords="552,285,553,286,553,287,555,287,556,288,558,288,558,288,559,287,560,287,561,286,563,286,564,287,565,289,566,289,567,290,567,291,567,291,567,294,566,295,565,295,563,296,562,297,562,299,560,301,560,305,561,306,561,308,559,311,554,314,552,317,550,315,546,315,545,313,546,311,546,310,546,309,544,307,544,305,545,303,545,302,544,301,542,300,540,298,540,297,541,297,550,287,551,286,551,284,552,285" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7222&b=c&l=de" title="unteres Puschlav" alt="unteres Puschlav" name="unteres Puschlav" coords="563,309,564,310,564,310,566,312,566,313,567,314,568,316,569,317,570,319,568,321,567,321,566,322,566,324,565,324,563,325,559,325,557,325,556,327,553,324,554,321,554,318,552,317,554,314,559,311,561,308,563,309" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=7231&b=c&l=de" title="Münstertal" alt="Münstertal" name="Münstertal" coords="596,246,599,246,602,245,604,246,608,250,608,251,608,253,608,255,607,259,607,260,607,262,606,264,605,264,603,265,601,264,599,262,599,262,598,262,597,263,596,263,593,261,590,261,590,262,590,263,589,264,587,262,585,263,583,263,583,261,581,259,580,258,579,258,577,259,576,258,576,256,576,255,578,252,579,252,581,250,581,247,582,245,583,244,584,242,585,242,596,246" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8111&b=c&l=de" title="Saint-Cergue" alt="Saint-Cergue" name="Saint-Cergue" coords="66,268,58,280,58,281,57,286,50,294,43,301,42,301,40,298,35,294,31,293,31,293,32,290,34,289,34,288,34,287,33,286,32,284,35,283,36,282,44,275,52,266,55,263,58,260,59,259,60,259,66,268" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8112&b=c&l=de" title="Vallée de Joux" alt="Vallée de Joux" name="Vallée de Joux" coords="77,254,66,268,60,259,59,259,58,260,55,263,52,266,44,275,36,282,35,283,32,284,36,281,37,276,38,275,41,272,42,272,43,271,43,270,43,269,43,269,38,264,38,263,44,257,47,256,49,253,52,251,58,245,59,243,60,242,64,240,66,239,68,239,69,238,72,236,72,234,74,234,75,233,75,232,75,231,79,230,80,230,81,229,81,228,83,226,83,224,86,223,83,229,83,229,83,230,84,232,84,232,85,233,86,234,88,234,93,236,91,237,86,242,83,246,77,254" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8113&b=c&l=de" title="Yverdon - Bevaix" alt="Yverdon - Bevaix" name="Yverdon - Bevaix" coords="133,196,123,207,122,208,118,212,113,216,107,221,107,222,108,223,107,225,103,229,101,231,100,232,93,236,88,234,86,234,85,233,84,232,84,232,83,230,83,229,83,229,86,223,85,222,85,221,88,217,89,215,95,211,99,209,102,208,104,208,104,208,118,197,118,197,119,198,129,192,131,190,136,193,133,196" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8114&b=c&l=de" title="Val de Travers" alt="Val de Travers" name="Val de Travers" coords="121,180,116,185,116,191,118,197,118,197,104,208,104,208,102,208,99,209,95,211,89,215,88,217,85,221,85,222,86,223,83,224,80,221,80,219,81,219,81,217,81,216,84,212,85,205,81,199,80,197,84,195,87,190,89,189,89,189,90,190,90,190,98,188,102,185,104,186,107,184,107,183,109,180,110,179,113,177,115,177,121,180" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8211&b=c&l=de" title="Val de Ruz - Colombier" alt="Val de Ruz - Colombier" name="Val de Ruz - Colombier" coords="158,163,154,170,151,176,144,185,140,188,138,190,136,193,131,190,129,192,119,198,118,197,116,191,116,185,121,180,135,168,136,169,138,170,142,169,144,167,145,165,146,164,146,164,156,159,158,159,159,161,158,163" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8212&b=c&l=de" title="Bienne - Neuchâtel" alt="Bienne - Neuchâtel" name="Bienne - Neuchâtel" coords="184,159,164,174,162,176,157,183,146,186,140,188,144,185,151,176,154,170,158,163,159,161,162,159,171,155,172,155,172,158,173,158,176,160,178,159,182,157,189,155,184,159" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8213&b=c&l=de" title="Vallon de Saint-Imier" alt="Vallon de Saint-Imier" name="Vallon de Saint-Imier" coords="189,155,182,157,178,159,176,160,173,158,172,158,172,155,171,155,162,159,159,161,158,159,156,159,146,164,146,164,145,165,144,167,142,169,138,170,136,169,135,168,136,165,139,162,141,160,143,159,148,155,152,153,159,148,161,147,166,146,177,144,183,144,186,144,195,143,205,141,217,137,217,144,202,149,198,150,189,155" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8214&b=c&l=de" title="Moutier - Tavannes" alt="Moutier - Tavannes" name="Moutier - Tavannes" coords="161,147,159,148,160,145,161,145,162,143,165,141,168,140,180,137,190,135,198,128,199,128,199,126,200,126,200,125,199,124,199,123,200,119,200,118,203,114,203,113,204,113,212,113,217,114,222,114,230,121,228,124,226,126,223,129,220,129,217,131,216,132,215,133,215,133,215,136,216,136,217,137,205,141,195,143,186,144,183,144,177,144,166,146,161,147" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8215&b=c&l=de" title="Thal" alt="Thal" name="Thal" coords="249,117,250,118,253,117,257,115,257,126,245,132,240,134,232,139,225,142,217,144,217,137,216,136,215,136,215,133,215,133,216,132,217,131,220,129,223,129,226,126,228,124,230,121,237,117,243,114,246,114,247,114,249,117" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8216&b=c&l=de" title="Olten-Gösgen" alt="Olten-Gösgen" name="Olten-Gösgen" coords="288,112,284,122,283,122,282,123,279,121,270,118,264,122,257,126,257,115,263,113,266,113,278,105,281,103,283,103,284,103,286,106,288,110,288,112" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8221&b=c&l=de" title="La Chaux-de-Fonds - Le Locle" alt="La Chaux-de-Fonds - Le Locle" name="La Chaux-de-Fonds - Le Locle" coords="139,157,139,162,136,165,135,168,121,180,115,177,117,175,118,174,117,174,113,172,114,171,115,170,116,169,115,169,118,167,119,167,120,167,121,165,120,164,121,164,123,162,126,161,128,160,129,159,130,158,133,156,135,155,139,157" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8222&b=c&l=de" title="Franches-Montagnes" alt="Franches-Montagnes" name="Franches-Montagnes" coords="168,127,165,141,162,143,161,145,160,145,159,148,152,153,148,155,143,159,141,160,139,162,139,157,135,155,136,153,135,153,134,153,133,152,134,152,138,149,138,147,139,146,142,144,144,143,145,141,146,141,147,139,148,139,148,138,147,137,148,135,148,133,147,132,146,131,147,130,148,129,150,129,151,129,153,129,154,128,155,128,156,125,156,123,160,122,162,119,161,119,161,118,160,116,159,116,158,115,168,114,174,113,176,112,179,111,179,111,180,111,182,112,182,114,180,116,177,121,173,124,172,125,170,126,168,127,168,127" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8223&b=c&l=de" title="Ajoie" alt="Ajoie" name="Ajoie" coords="158,89,160,90,164,91,164,92,166,91,169,91,171,89,173,90,175,92,177,92,180,91,180,92,179,92,179,93,177,101,179,102,181,102,184,101,186,105,185,111,182,112,180,111,179,111,179,111,176,112,174,113,168,114,158,115,156,114,154,116,150,116,145,117,139,118,139,117,140,114,141,113,142,112,144,108,146,107,147,103,150,102,151,100,154,100,154,99,155,97,155,96,155,96,153,95,153,92,153,91,156,89,157,89,158,89" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8224&b=c&l=de" title="Delémont - Bellelay" alt="Delémont - Bellelay" name="Delémont - Bellelay" coords="189,113,190,113,193,112,196,112,198,112,200,113,200,113,200,113,201,115,200,118,200,119,199,123,199,124,200,125,200,126,199,126,199,128,198,128,190,135,180,137,168,140,165,141,168,127,168,127,170,126,172,125,173,124,177,121,180,116,182,114,182,112,185,111,187,112,189,113" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8225&b=c&l=de" title="Laufental" alt="Laufental" name="Laufental" coords="240,102,241,105,243,114,237,117,230,121,222,114,217,114,212,113,204,113,203,113,203,114,200,118,201,115,200,113,200,113,200,113,198,112,196,112,193,112,190,113,189,113,187,112,185,111,186,105,188,104,191,102,192,102,195,102,197,101,198,101,199,102,202,102,203,103,206,102,208,100,218,98,221,97,222,97,225,97,234,100,239,101,240,102" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8226&b=c&l=de" title="Basel" alt="Basel" name="Basel" coords="243,72,241,74,242,75,242,76,242,77,241,78,239,78,238,79,236,78,235,79,236,79,237,81,239,82,240,84,242,84,243,84,244,84,247,84,250,85,255,86,256,87,256,89,253,91,254,93,251,92,249,94,247,97,244,101,241,105,240,102,239,101,234,100,225,97,222,97,221,97,218,98,208,100,210,98,211,97,213,96,213,95,209,93,209,93,210,91,211,91,213,92,215,94,217,93,218,92,220,91,220,89,219,87,220,87,221,87,222,85,221,84,220,85,219,85,218,84,218,83,219,82,221,81,225,78,225,78,226,76,227,76,229,76,230,73,232,74,232,75,234,76,236,73,237,72,240,73,242,71,243,71,243,72" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8227&b=c&l=de" title="Oberes Baselbiet" alt="Oberes Baselbiet" name="Oberes Baselbiet" coords="275,94,275,97,276,102,278,105,266,113,263,113,257,115,253,117,250,118,249,117,247,114,246,114,243,114,241,105,244,101,247,97,249,94,251,92,254,93,256,92,263,91,269,90,275,94" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=8228&b=c&l=de" title="Rheinfelden" alt="Rheinfelden" name="Rheinfelden" coords="269,74,270,75,271,76,271,77,270,79,271,80,272,81,275,82,275,81,276,80,277,79,280,80,282,79,285,80,288,80,289,78,290,78,291,78,291,80,290,84,287,84,283,85,277,91,275,94,269,90,263,91,256,92,254,93,253,91,256,89,256,87,255,86,250,85,247,84,244,84,247,82,250,82,252,81,255,80,258,77,259,74,260,74,262,74,266,73,267,73,269,74" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=9111&b=c&l=de" title="westliches Mittelland" alt="westliches Mittelland" name="westliches Mittelland" coords="192,225,192,225,191,228,188,232,186,233,186,233,185,233,182,230,179,228,179,226,171,225,169,226,168,227,165,231,164,233,164,233,167,236,167,236,167,237,160,245,154,250,154,251,149,255,147,260,149,264,149,266,148,270,141,272,137,277,136,278,131,285,130,293,129,292,123,291,98,289,85,291,73,294,62,300,57,305,55,307,54,307,54,308,52,313,52,313,54,315,55,317,54,318,53,320,55,323,57,325,58,325,59,325,61,323,61,323,61,324,62,324,63,326,60,330,58,332,55,333,54,334,53,334,52,334,50,335,49,336,48,337,46,338,47,340,46,341,45,342,41,344,40,345,39,346,39,346,37,345,35,345,34,343,32,344,29,343,28,344,28,345,27,346,25,345,21,344,20,345,19,346,19,347,16,347,16,347,16,347,17,345,17,344,19,341,19,339,21,338,21,337,21,337,17,334,18,333,18,332,19,331,20,331,22,331,23,329,24,328,25,328,26,327,28,328,30,326,31,326,34,325,36,327,38,325,38,323,36,319,36,318,38,316,38,313,39,312,40,310,40,308,42,308,43,307,43,306,43,304,45,303,43,301,50,294,57,286,58,281,58,280,66,268,77,254,83,246,86,242,91,237,93,236,100,232,101,231,103,229,107,225,108,223,107,222,107,221,113,216,118,212,122,208,123,207,133,196,136,193,138,190,140,188,146,186,157,183,162,176,164,174,184,159,189,155,189,156,190,157,191,160,191,163,185,172,181,176,189,178,186,180,183,184,183,184,182,187,182,188,182,189,183,197,182,202,184,202,183,205,181,219,182,220,188,222,190,223,190,224,192,224,192,225" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=9211&b=c&l=de" title="zentrales Mittelland" alt="zentrales Mittelland" name="zentrales Mittelland" coords="356,72,354,79,354,79,355,84,356,90,357,93,347,99,347,103,349,107,355,110,346,118,348,130,353,136,355,140,368,154,366,155,340,159,337,161,335,165,334,168,333,168,330,170,329,171,324,173,323,173,319,173,305,174,305,173,304,172,305,167,302,166,301,166,300,167,284,172,283,173,277,180,276,181,276,183,270,183,265,185,257,188,256,188,254,193,251,194,249,196,248,196,248,196,247,196,246,195,245,196,245,196,235,202,235,202,233,205,232,204,220,198,218,198,216,198,215,198,215,198,213,201,212,203,210,204,204,209,201,210,197,211,196,212,194,214,193,215,189,222,190,223,188,222,182,220,181,219,183,205,184,202,182,202,183,197,182,189,182,188,182,187,183,184,183,184,186,180,189,178,181,176,185,172,191,163,191,160,190,157,189,156,189,155,198,150,202,149,217,144,225,142,232,139,240,134,245,132,257,126,264,122,270,118,279,121,282,123,283,122,284,122,288,112,288,110,286,106,284,103,283,103,281,103,278,105,276,102,275,97,275,94,277,91,283,85,287,84,290,84,291,80,291,78,293,79,294,79,295,78,295,75,296,74,297,74,299,74,301,72,303,72,306,70,307,67,308,67,309,67,310,68,311,70,312,69,313,68,315,68,316,69,318,69,319,69,320,70,320,72,320,73,324,76,328,76,331,77,331,76,332,75,333,75,336,77,337,77,338,77,343,75,345,74,345,73,343,73,342,73,341,70,342,70,344,68,345,68,347,67,348,64,351,65,356,68,356,68,355,70,355,70,358,71,358,71,357,71,357,72,356,72" /> -<area shape="poly" href="/lawinenbulletin/print/region/pdf?a=9311&b=c&l=de" title="östliches Mittelland" alt="östliches Mittelland" name="östliches Mittelland" coords="355,31,356,32,360,32,361,34,361,34,360,35,360,35,361,37,361,38,363,40,363,40,365,38,364,33,365,33,366,32,368,35,369,35,369,35,370,37,369,38,370,40,370,41,373,39,376,40,377,42,374,43,373,45,374,47,376,48,376,48,375,52,379,53,382,55,384,56,385,52,383,50,381,49,381,47,381,47,384,45,384,44,385,44,385,44,386,46,387,48,389,48,391,50,394,50,394,51,392,52,391,54,393,55,394,57,394,59,396,60,398,60,400,60,411,54,412,53,415,53,420,54,423,55,427,57,429,56,430,56,432,58,434,58,436,59,447,59,454,62,461,65,466,68,468,70,477,76,481,81,482,87,483,88,485,90,487,93,487,93,488,93,488,92,488,92,490,94,493,94,495,95,495,96,493,97,482,100,478,101,471,107,466,104,458,103,449,108,444,116,444,120,439,122,439,122,432,125,430,127,426,130,425,132,422,135,416,132,414,129,415,127,414,126,414,126,414,126,412,125,412,125,408,127,407,127,407,133,407,133,402,136,397,137,392,139,391,139,391,138,390,139,388,140,386,143,383,147,383,147,383,150,382,150,381,149,372,152,372,152,368,154,355,140,353,136,348,130,346,118,355,110,349,107,347,103,347,99,357,93,356,90,355,84,354,79,354,79,356,72,357,72,357,71,358,71,358,71,358,69,359,68,358,63,358,62,359,61,360,60,360,61,361,61,360,62,359,62,359,63,360,63,361,63,362,62,362,60,360,58,360,56,359,57,356,59,354,57,352,58,350,59,351,61,350,61,346,62,343,61,343,62,343,63,342,63,342,63,342,60,340,60,339,60,336,58,335,58,334,57,334,56,336,55,334,52,335,49,336,50,336,50,339,47,340,47,340,47,340,46,339,45,340,42,341,42,342,40,344,38,344,37,345,38,347,37,348,38,349,37,353,36,353,36,354,37,356,36,356,36,355,34,354,34,354,31,355,31,355,31" /></map> | ||
Deleted | _service:tar_git:harbour-avarisk-0.8.3.tar.bz2/icons/avarisk.png ^ | |
[-] [+] | Deleted | _service:tar_git:harbour-avarisk-0.8.3.tar.bz2/qml/pages/DangerPage.qml ^ |
@@ -1,581 +0,0 @@ -/* - Copyright (C) 2020 Friedrich Mütschele and other contributors - This file is part of avaRisk. - avaRisk is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - avaRisk is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with avaRisk. If not, see <http://www.gnu.org/licenses/>. -*/ - -import QtQuick 2.2 -import Sailfish.Silica 1.0 -import io.thp.pyotherside 1.5 -import org.freedesktop.contextkit 1.0 - -Page { - property string regionID - property string regionName - property string country - property string macroRegion - property string connection - property var pm_only - property var avaReport - property var avaReportPM - - property bool connectionOnceUpdated: false - property bool pm_available: false - - property var dangerLevelError: qsTr("Downloading...") - - property var dangerLevel: 0 - - property var dangerLevel_h: 0 - property var dangerLevel_l: 0 - property var dangerLevel_alti: "" - property var highlights: "" - property var comment: "" - property var structure: "" - property var tendency: "" - property date repDate: new Date() - property date validFrom: new Date() - property date validTo: new Date() - property var provider: "" - property var downloadSucc: false - property var cached: false - - property bool busy: false - - property var dPatterns - - function dangerLevelText(x) { - if (x === 1) {return qsTr("low") } - else if (x === 2) {return qsTr("moderate") } - else if (x === 3) {return qsTr("considerable")} - else if (x === 4) {return qsTr("high") } - else if (x === 5) {return qsTr("very high") } - else {return qsTr("loading") } - } - - function getAvaDangElevText(validElev) { - if (validElev) { - if (validElev.indexOf('>') > -1) { - return "above" - } - else if (validElev.indexOf('<') > -1) { - return "below" - } - } - return "all" - } - - function getElevFromString(validElev) { - if (validElev) { - if (validElev.indexOf('Treeline') > -1) { - return qsTr("treeline") - } - - var elev = validElev - if ((validElev.indexOf('<') > -1) || (validElev.indexOf('>') > -1)) { - elev = validElev.substring(1) - return elev + " m" - } - } - - return qsTr("entire range") - - } - - function convertUTCDateToLocalDate(date) { - var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000); - return newDate; - } - - function parseAvaReportJSON(avaReport) { - for (var elem in avaReport.danger_main) { - if (avaReport.danger_main[elem]['main_value'] > dangerLevel) { - dangerLevel = avaReport.danger_main[elem]['main_value'] - } - } - - // console.log("Plot Report: " + avaReport.report_id) - - dangerLevel_h = avaReport.danger_main[0]['main_value']; - if (avaReport.danger_main.length > 1) { - dangerLevel_l = avaReport.danger_main[1]['main_value']; - dangerLevel_alti = avaReport.danger_main[1]['valid_elevation']; - } - else { - dangerLevel_l = avaReport.danger_main[0]['main_value']; - } - - validFrom = new Date(avaReport.validity_begin) - validTo = new Date(avaReport.validity_end) - repDate = new Date(avaReport.rep_date) - - dPatterns = avaReport.problem_list - - for (var elem in avaReport.report_texts) { - if (avaReport.report_texts[elem].text_type === 'activity_hl') { - highlights = avaReport.report_texts[elem].text_content; - } - if (avaReport.report_texts[elem].text_type === 'activity_com') { - comment = avaReport.report_texts[elem].text_content; - } - if (avaReport.report_texts[elem].text_type === 'snow_struct_com') { - structure = avaReport.report_texts[elem].text_content; - } - if (avaReport.report_texts[elem].text_type === 'tendency_com') { - tendency = avaReport.report_texts[elem].text_content; - } - } - } - - ContextProperty { - key: "Internet.NetworkState" - onValueChanged: { - if (connection == "" || connectionOnceUpdated) { - connection = value - connectionOnceUpdated = true - } - if (connection == "connected") { - connectionOnceUpdated = true - } - } - } - - onStatusChanged: { - if ((status == Component.Ready) && (pm_only == false)) - { - python.startDownload(); - // console.log('Start DL') - // console.log(pm_only) - } - if ((status == Component.Ready) && pm_only) - { - parseAvaReportJSON(avaReport); - // console.log('Load from avaReport') - // console.log(pm_only) - downloadSucc = true - } - } - - SilicaFlickable { - anchors.fill: parent - contentHeight: column.height - bottomMargin: Theme.paddingSmall - - - BusyIndicator { - id: busyInd - size: BusyIndicatorSize.Large - anchors.centerIn: parent - running: busy - } - - VerticalScrollDecorator{} - - PullDownMenu { - MenuItem { - text: qsTr("Reload") - visible: ((connection == "connected") && (pm_only == false)) ? true : false - onClicked: { - python.startDownload(); - } - } - MenuItem { - text: qsTr("Know-How") - onClicked: pageStack.push(Qt.resolvedUrl("Education.qml")) - } - MenuItem { - text: qsTr("PM Report") - visible: pm_available - onClicked: { - onClicked: pageStack.push(Qt.resolvedUrl("DangerPage.qml"), {"regionID": regionID, "regionName": regionName, "country": country, "macroRegion": macroRegion, "connection": connection, "pm_only": true, "avaReport": avaReportPM}) | ||
[-] [+] | Deleted | _service:tar_git:harbour-avarisk-0.8.3.tar.bz2/qml/pages/DangerPage_swiss.qml ^ |
@@ -1,531 +0,0 @@ -/* - Copyright (C) 2020 Friedrich Mütschele and other contributors - This file is part of avaRisk. - avaRisk is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - avaRisk is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with avaRisk. If not, see <http://www.gnu.org/licenses/>. -*/ - -import QtQuick 2.2 -import Sailfish.Silica 1.0 -import io.thp.pyotherside 1.5 -import org.freedesktop.contextkit 1.0 - -Page { - property string regionID - property string regionName - property string country - property string macroRegion - - property string connection - property bool connectionOnceUpdated: false - - property var pm_only - property var avaReport - property var avaReportPM - property bool pm_available: false - - property var dangerLevelError: qsTr("Downloading...") - - property var dangerLevel: 0 - - property var repDate: "" - property var validFrom: "" - property var validTo: "" - property var provider: "" - property var proneLocationsText: "" - property var proneLocationsImg:"" - property var htmlLocal: "" - property var htmlWeatherSnow: "" - - property var downloadSucc: false - property var cached: false - - property bool busy: false - - property var dPatterns - - function dangerLevelText(x) { - if (x === 1) {return qsTr("low") } - else if (x === 2) {return qsTr("moderate") } - else if (x === 3) {return qsTr("considerable")} - else if (x === 4) {return qsTr("high") } - else if (x === 5) {return qsTr("very high") } - else {return qsTr("loading") } - } - - function parseAvaReportJSON(avaReport) { - for (var elem in avaReport.danger_main) { - if (avaReport.danger_main[elem]['main_value'] > dangerLevel) { - dangerLevel = avaReport.danger_main[elem]['main_value'] - } - } - - // console.log("Plot Report: " + avaReport.report_id) - - /* - dangerLevel_h = avaReport.danger_main[0]['main_value']; - if (avaReport.danger_main.length > 1) { - dangerLevel_l = avaReport.danger_main[1]['main_value']; - dangerLevel_alti = avaReport.danger_main[1]['valid_elevation']; - } - else { - dangerLevel_l = avaReport.danger_main[0]['main_value']; - } - */ - validFrom = new Date(avaReport.validity_begin) - validTo = new Date(avaReport.validity_end) - repDate = new Date(avaReport.rep_date) - - dPatterns = avaReport.problem_list - - for (var elem in avaReport.report_texts) { - if (avaReport.report_texts[elem].text_type === 'prone_locations_img') { - proneLocationsImg = avaReport.report_texts[elem].text_content; - } - if (avaReport.report_texts[elem].text_type === 'prone_locations_text') { - proneLocationsText = avaReport.report_texts[elem].text_content; - } - if (avaReport.report_texts[elem].text_type === 'html_report_local') { - htmlLocal = avaReport.report_texts[elem].text_content; - } - if (avaReport.report_texts[elem].text_type === 'html_weather_snow') { - htmlWeatherSnow = avaReport.report_texts[elem].text_content; - } - } - } - - function getAvaDangElevText(validElev) { - if (validElev) { - if (validElev.indexOf('>') > -1) { - return "above" - } - else if (validElev.indexOf('<') > -1) { - return "below" - } - } - return "all" - } - - function getElevFromString(validElev) { - if (validElev) { - if (validElev.indexOf('Treeline') > -1) { - return qsTr("treeline") - } - - var elev = validElev - if ((validElev.indexOf('<') > -1) || (validElev.indexOf('>') > -1)) { - elev = validElev.substring(1) - return elev + " m" - } - } - - return qsTr("entire range") - - } - - ContextProperty { - key: "Internet.NetworkState" - - onValueChanged: { - if (connection == "" || connectionOnceUpdated) { - connection = value - connectionOnceUpdated = true - } - if (connection == "connected") { - connectionOnceUpdated = true - } - - } - } - - onStatusChanged: { - if ((status == Component.Ready) && (pm_only == false)) - { - python.startDownload(); - // console.log('Start DL') - // console.log(pm_only) - } - if ((status == Component.Ready) && pm_only) - { - parseAvaReportJSON(avaReport); - // console.log('Load from avaReport') - // console.log(pm_only) - downloadSucc = true - } - } - - SilicaFlickable { - anchors.fill: parent - contentHeight: column.height - bottomMargin: Theme.paddingSmall - - - BusyIndicator { - id: busyInd - size: BusyIndicatorSize.Large - anchors.centerIn: parent - running: busy - } - - VerticalScrollDecorator{} - - PullDownMenu { - MenuItem { - text: qsTr("Reload") - visible: ((connection == "connected") && (pm_only == false)) ? true : false - onClicked: { - python.startDownload(); - } - } - MenuItem { - text: qsTr("Know-How") - onClicked: pageStack.push(Qt.resolvedUrl("Education.qml")) - } - MenuItem { - text: qsTr("PM Report") - visible: pm_available - onClicked: { - onClicked: pageStack.push(Qt.resolvedUrl("DangerPage_swiss.qml"), {"regionID": regionID, "regionName": regionName, "country": country, "macroRegion": macroRegion, "connection": connection, "pm_only": true, "avaReport": avaReportPM}) - } - } - } | ||
Deleted | _service:tar_git:harbour-avarisk-0.8.3.tar.bz2/qml/pages/avacore/png/__pycache__/__init__.cpython-37.pyc ^ | |
Deleted | _service:tar_git:harbour-avarisk-0.8.3.tar.bz2/qml/pages/avacore/png/__pycache__/png.cpython-37.pyc ^ | |
[-] [+] | Deleted | _service:tar_git:harbour-avarisk-0.8.3.tar.bz2/qml/pages/avacore/processor_caaml.py ^ |
@@ -1,439 +0,0 @@ -""" - Copyright (C) 2021 Friedrich Mütschele and other contributors - This file is part of pyAvaCore. - pyAvaCore is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - pyAvaCore is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. -""" -from datetime import datetime -from datetime import timezone -from datetime import time -from datetime import timedelta -import copy - -from avacore import pyAvaCore - -def et_add_parent_info(element_tree): - - '''Add Parent-Info to structure an ElementTree''' - - for child in element_tree: - child.attrib['__my_parent__'] = element_tree - et_add_parent_info(child) - -def et_get_parent(element_tree): - - '''get Parent-Info from ElementTree, when parent Info was added previously.''' - - if '__my_parent__' in element_tree.attrib: - return element_tree.attrib['__my_parent__'] - return None - -### XML-Parsers - -def parse_xml(root): - - '''parses ALBINA-Style CAAML-XML. root is a ElementTree''' - - reports = [] - - for bulletin in root.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}Bulletin'): - report = pyAvaCore.AvaReport() - report.report_id = bulletin.attrib.get('{http://www.opengis.net/gml}id') - pm_danger_ratings = [] - - pm_available = False - for DangerRating in bulletin.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}DangerRating'): - for validTime in DangerRating.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validTime'): - pm_available = True - break - - for observations in bulletin: - et_add_parent_info(observations) - for locRef in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}locRef'): - loc_ref = observations.attrib.get('{http://www.w3.org/1999/xlink}href') - if loc_ref not in report.valid_regions: - report.valid_regions.append(observations.attrib.get('{http://www.w3.org/1999/xlink}href')) - for dateTimeReport in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}dateTimeReport'): - report.rep_date = pyAvaCore.try_parse_datetime(dateTimeReport.text).replace(tzinfo=timezone.utc) - for validTime in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validTime'): - if not et_get_parent(validTime): - for beginPosition in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}beginPosition'): - report.validity_begin = pyAvaCore.try_parse_datetime(beginPosition.text).replace(tzinfo=timezone.utc) - for endPosition in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}endPosition'): - report.validity_end = pyAvaCore.try_parse_datetime(endPosition.text).replace(tzinfo=timezone.utc) - for DangerRating in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}DangerRating'): - main_value = 0 - am_rating = True - for mainValue in DangerRating.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}mainValue'): - main_value = int(mainValue.text) - valid_elevation = "-" - for validElevation in DangerRating.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validElevation'): - valid_elevation = validElevation.attrib.get('{http://www.w3.org/1999/xlink}href') - for beginPosition in DangerRating.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}beginPosition'): - if '11:00' in beginPosition.text: - am_rating = False - report.validity_end = report.validity_end.replace(hour=11) - if am_rating: - report.danger_main.append(pyAvaCore.DangerMain(main_value, valid_elevation)) - else: - pm_danger_ratings.append(pyAvaCore.DangerMain(main_value, valid_elevation)) - for DangerPattern in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}DangerPattern'): - for DangerPatternType in DangerPattern.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}type'): - report.dangerpattern.append(DangerPatternType.text) - for AvProblem in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}AvProblem'): - type_r = "" - for avProbType in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}type'): - type_r = avProbType.text - aspect = [] - for validAspect in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validAspect'): - aspect.append(validAspect.get('{http://www.w3.org/1999/xlink}href').upper().replace('ASPECTRANGE_', '')) - valid_elevation = "-" - for validElevation in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validElevation'): - valid_elevation = validElevation.get('{http://www.w3.org/1999/xlink}href') - report.problem_list.append(pyAvaCore.Problem(type_r, aspect, valid_elevation)) - for avActivityHighlights in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}avActivityHighlights'): - report.report_texts.append(pyAvaCore.ReportText('activity_hl', avActivityHighlights.text)) - for avActivityComment in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}avActivityComment'): - report.report_texts.append(pyAvaCore.ReportText('activity_com', avActivityComment.text)) - for snowpackStructureComment in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}'\ - 'snowpackStructureComment'): - report.report_texts.append(pyAvaCore.ReportText('snow_struct_com', snowpackStructureComment.text)) - for tendencyComment in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}tendencyComment'): - report.report_texts.append(pyAvaCore.ReportText('tendency_com', tendencyComment.text)) - reports.append(report) - - if pm_available: - pm_report = copy.deepcopy(report) - pm_report.danger_main = pm_danger_ratings - pm_report.report_id += '_PM' - pm_report.validity_begin = pm_report.validity_begin + timedelta(hours=12) - pm_report.validity_end = pm_report.validity_end + timedelta(hours=12) - reports.append(pm_report) - - for report in reports: - if report.report_id.endswith('_PM') and any(x.report_id == report.report_id[:-3] for x in reports): - report.predecessor_id = report.report_id[:-3] - - return reports - -def parse_xml_vorarlberg(root): - - '''parses Vorarlberg-Style CAAML-XML. root is a ElementTree''' - - reports = [] - report = pyAvaCore.AvaReport() - comment_empty = 1 - - # Common for every Report: - - report_id = '' - for bulletin in root.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}Bulletin'): - report_id = bulletin.attrib.get('{http://www.opengis.net/gml}id') - - activity_com = '' - for bulletin in root.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}Bulletin'): - for detail in bulletin: - for metaDataProperty in detail.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}metaDataProperty'): - for dateTimeReport in metaDataProperty.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}dateTimeReport'): - report.rep_date = pyAvaCore.try_parse_datetime(dateTimeReport.text) - for bulletinResultsOf in detail.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}bulletinResultsOf'): - for travelAdvisoryComment in bulletinResultsOf.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}'\ - 'travelAdvisoryComment'): - activity_com = travelAdvisoryComment.text - for highlights in bulletinResultsOf.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}highlights'): - report.report_texts.append(pyAvaCore.ReportText('activity_hl', highlights.text)) - for comment in bulletinResultsOf.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}comment'): - if comment_empty: - report.report_texts.append(pyAvaCore.ReportText('tendency_com', comment.text)) - comment_empty = 0 - for wxSynopsisComment in bulletinResultsOf.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}'\ - 'wxSynopsisComment'): - activity_com = activity_com + ' <br />Alpinwetterbericht der ZAMG Tirol und Vorarlberg:<br /> ' \ - + str(wxSynopsisComment.text) - for snowpackStructureComment in bulletinResultsOf.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}'\ - 'snowpackStructureComment'): - report.report_texts.append(pyAvaCore.ReportText('snow_struct_com', snowpackStructureComment.text)) - for AvProblem in detail.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}AvProblem'): - type_r = "" - for ac_problemt_type in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}type'): - type_r = ac_problemt_type.text - aspect = [] - for validAspect in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validAspect'): - aspect.append(validAspect.get('{http://www.w3.org/1999/xlink}href').upper().replace(\ - 'ASPECTRANGE_', '').replace('O', 'E')) - valid_elevation = "-" - for validElevation in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validElevation'): - if '{http://www.w3.org/1999/xlink}href' in validElevation.attrib: - if "Treeline" in validElevation.attrib.get('{http://www.w3.org/1999/xlink}href'): - if "Hi" in validElevation.attrib.get('{http://www.w3.org/1999/xlink}href'): - valid_elevation = ">Treeline" - if "Lo" in validElevation.attrib.get('{http://www.w3.org/1999/xlink}href'): - valid_elevation = "<Treeline" - else: - for beginPosition in validElevation.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS\ - beginPosition'): - valid_elevation = ">" + beginPosition.text - for endPosition in validElevation.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}endPosition'): - valid_elevation = "<" + endPosition.text - report.problem_list.append(pyAvaCore.Problem(type_r, aspect, valid_elevation)) - - report.report_texts.append(pyAvaCore.ReportText('activity_com', activity_com)) - - for bulletinResultOf in root.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}bulletinResultsOf'): - et_add_parent_info(bulletinResultOf) - - loc_list = [] - - for locRef in bulletinResultOf.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}locRef'): - current_loc_ref = locRef.attrib.get('{http://www.w3.org/1999/xlink}href') - - DangerRating = et_get_parent(locRef) - validity_begin = "" | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/.gitignore ^ |
@@ -50,3 +50,5 @@ # QtCreator local machine specific files for imported projects *creator.user* + +*pycache* | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/harbour-avarisk.desktop ^ |
@@ -4,6 +4,14 @@ Icon=harbour-avarisk Exec=harbour-avarisk Name=avaRisk + +#Prepare Sandboxing, can not yet be used, as contextkit in sailjail has a bug. +#[X-Sailjail] +#Permissions=Internet;WebView;Location +#OrganizationName=de.10hoch-6 +#ApplicationName=avarisk + + # translation example: # your app name in German locale (de) # | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/harbour-avarisk.pro ^ |
@@ -14,11 +14,14 @@ CONFIG += sailfishapp +# For mozembed WebView +PKGCONFIG += qt5embedwidget + SOURCES += src/harbour-avarisk.cpp DISTFILES += qml/harbour-avarisk.qml \ qml/cover/CoverPage.qml \ - qml/pages/DangerPage_swiss.qml \ + qml/pages/BulletinView.qml \ qml/pages/Education.qml \ qml/pages/FirstPage.qml \ qml/pages/SecondPage.qml \ | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/AboutPage.qml ^ |
@@ -40,7 +40,7 @@ } Label { - text: "avaRisk 0.8" + text: "avaRisk 0.9" horizontalAlignment: Text.AlignHCenter font.pixelSize: Theme.fontSizeExtraLarge anchors { | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/BulletinView.qml ^ |
@@ -0,0 +1,717 @@ +/* + Copyright (C) 2020 Friedrich Mütschele and other contributors + This file is part of avaRisk. + avaRisk is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + avaRisk is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with avaRisk. If not, see <http://www.gnu.org/licenses/>. +*/ + +import QtQuick 2.2 +import Sailfish.Silica 1.0 +import io.thp.pyotherside 1.5 +import org.freedesktop.contextkit 1.0 + +Page { + property string regionID + property string regionName + property string country + property string macroRegion + property string connection + property var pm_only + property var avaReport + property var avaReportPM + + property bool connectionOnceUpdated: false + property bool pm_available: false + + property var dangerLevelError: qsTr("Downloading...") + + property bool downloadSucc: false + property bool cached: false + + property bool busy: false + property int dangerLevel: 0 + property int dangerLevel_h: 0 + property int dangerLevel_l: 0 + property string dangerLevel_alti: "" + + /* + property var dangerLevel: 0 + property var dangerLevel_pm: 0 + + property var dangerLevel_h: 0 + property var dangerLevel_h_pm: 0 + property var dangerLevel_l: 0 + property var dangerLevel_l_pm: 0 + property var dangerLevel_alti: "" + property var highlights: "" + property var comment: "" + property var structure: "" + property var tendency: "" + property date repDate: new Date() + property date validFrom: new Date() + property date validTo: new Date() + property var provider: "" + */ + + // property var dPatterns + + property var avDanger: { + 'low': 1, + 'moderate': 2, + 'considerable': 3, + 'high': 4, + 'very_high': 5 + } + + function dangerLevelText(x) { + if (x === 1) {return qsTr("low") } + else if (x === 2) {return qsTr("moderate") } + else if (x === 3) {return qsTr("considerable")} + else if (x === 4) {return qsTr("high") } + else if (x === 5) {return qsTr("very high") } + else {return qsTr("loading") } + } + + function getAvaProbElevText(problemElev) { + if (problemElev.hasOwnProperty('upperBound') && problemElev.hasOwnProperty('lowerBound')) { + return "middle" + } else if (problemElev.hasOwnProperty('upperBound')) { + return "below" + } else if (problemElev.hasOwnProperty('lowerBound')) { + return "above" + } + return "all" + } + + function getElevFromString(problemElev) { + var str_return = qsTr("entire range") + if (problemElev.hasOwnProperty('upperBound') && problemElev.hasOwnProperty('lowerBound')) { + str_return = qsTr("between ") + problemElev.lowerBound + " and " + problemElev.upperBound + } else if (problemElev.hasOwnProperty('upperBound')) { + str_return = problemElev.upperBound + } else if (problemElev.hasOwnProperty('lowerBound')) { + str_return = problemElev.lowerBound + } + + if (str_return.toLowerCase().indexOf("treeline") === -1 && str_return.indexOf(qsTr("entire range")) === -1) { + str_return += " m" + } + + str_return.replace("treeline", qsTr("treeline")) + + return str_return + } + + function convertUTCDateToLocalDate(date) { + var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000); + return newDate; + } + + ContextProperty { + key: "Internet.NetworkState" + onValueChanged: { + if (connection == "" || connectionOnceUpdated) { + connection = value + connectionOnceUpdated = true + } + if (connection == "connected") { + connectionOnceUpdated = true + } + } + } + + onStatusChanged: { + if (status == Component.Ready) + { + python.startDownload(); + // console.log('Start DL') + // console.log(pm_only) + } + } + + SilicaFlickable { + anchors.fill: parent + contentHeight: column.height + bottomMargin: Theme.paddingSmall + + + BusyIndicator { + id: busyInd + size: BusyIndicatorSize.Large + anchors.centerIn: parent + running: busy + } + + VerticalScrollDecorator{} + + PullDownMenu { + MenuItem { + text: qsTr("Reload") + visible: (connection == "connected") ? true : false + onClicked: { + python.startDownload(); + } + } + MenuItem { + text: qsTr("Know-How") + onClicked: pageStack.push(Qt.resolvedUrl("Education.qml")) + } + } + + Column { + spacing: Theme.paddingSmall + id: column + width: parent.width + + PageHeader { + id: header + description: qsTr("Report") + title: regionName + } + + Label { + anchors { + left: parent.left + right: parent.right + margins: Theme.paddingLarge + } + text: qsTr("Offline Report - Check Validity Date") + font.pixelSize: Theme.fontSizeMedium + wrapMode: Text.Wrap + visible: (cached) ? true : false + } + + Label { + anchors { + left: parent.left + right: parent.right + margins: Theme.paddingLarge + } + text: qsTr("PM Report Available!") + font.pixelSize: Theme.fontSizeMedium | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/Education.qml ^ |
@@ -40,10 +40,10 @@ delegate: BackgroundItem { id: educationListViewDelegate - //onClicked: pageStack.push(Qt.resolvedUrl("WebViewPage.qml"), {"subPage": link, "topic": topic}) - onClicked: { - Qt.openUrlExternally("https://" + qsTr("avalanche.report") + "/education/" + link); - } + onClicked: pageStack.push(Qt.resolvedUrl("WebViewPage.qml"), {"subPage": link, "topic": topic}) + //onClicked: { + // Qt.openUrlExternally("https://" + qsTr("avalanche.report") + "/education/" + link); + //} Label { x: Theme.horizontalPageMargin | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/FirstPage.qml ^ |
@@ -15,10 +15,24 @@ import QtQuick 2.2 import Sailfish.Silica 1.0 +import QtPositioning 5.4 +import org.freedesktop.contextkit 1.0 import "RegionList" Page { + property string determined_region_name: 'n/a'; + property string determined_region_id: 'n/a'; + + property string connection + + ContextProperty { + key: "Internet.NetworkState" + onValueChanged: { + connection = value + } + } + SilicaFlickable { anchors.fill: parent @@ -27,12 +41,47 @@ VerticalScrollDecorator {} + PositionSource { + id: possrc + updateInterval: 10000 + active: true + onPositionChanged: { + console.log(possrc.valid) + var coordinate = possrc.position.coordinate; + //positiontext.text = "Coordinate: " + coordinate.longitude + " " + coordinate.latitude + //var endp_url = "http://regresolve.10hoch-6.de/regresolve.cgi?lon=11.4041024&lat=47.2692124" + var endp_url = "http://regresolve.10hoch-6.de/regresolve.cgi?lon="+coordinate.longitude+"&lat="+coordinate.latitude + + request(endp_url, function (o) { + + if (o.responseText != '') { + possrc.stop(); + // log the json response + console.log(o.responseText); + + // translate response into object + // var d = eval('new Object(' + o.responseText + ')'); + var d = JSON.parse(o.responseText); + + // access elements inside json object with dot notation + //console.log(getRegionNameFromId(d.RegionID)) + getRegionNameFromId(d.RegionID) + } + }); + + } + } + PullDownMenu { MenuItem { text: qsTr("About") onClicked: pageStack.push(Qt.resolvedUrl("AboutPage.qml")) } MenuItem { + text: qsTr("Update Position") + onClicked: {possrc.update()} + } + MenuItem { text: qsTr("Know-How") onClicked: pageStack.push(Qt.resolvedUrl("Education.qml")) } @@ -271,6 +320,50 @@ width: parent.width + title: qsTr("Slovenia") + + content.sourceComponent: Column { + width: parent.width + BackgroundItem { + id: bgndSi + onClicked: pageStack.push(Qt.resolvedUrl("RegionSelectPage.qml"), {"regionList": RegionList.regionListSi, "country": qsTr("Slovenia"), "macroRegion": qsTr("Slovenia")}) + + Label { + x: Theme.horizontalPageMargin + text: qsTr("Slovenia") + anchors.verticalCenter: parent.verticalCenter + color: bgndSi.highlighted ? Theme.highlightColor : Theme.primaryColor + } + } + } + } + + ExpandingSection { + + width: parent.width + + title: qsTr("Norway") + + content.sourceComponent: Column { + width: parent.width + BackgroundItem { + id: bgndNorway + onClicked: pageStack.push(Qt.resolvedUrl("RegionSelectPage.qml"), {"regionList": RegionList.regionListNorway, "country": qsTr("Norway"), "macroRegion": qsTr("Norway")}) + + Label { + x: Theme.horizontalPageMargin + text: qsTr("Norway") + anchors.verticalCenter: parent.verticalCenter + color: bgndNorway.highlighted ? Theme.highlightColor : Theme.primaryColor + } + } + } + } + + ExpandingSection { + + width: parent.width + title: qsTr("Spain") content.sourceComponent: Column { @@ -434,6 +527,54 @@ } } + SectionHeader { + text: qsTr("Region by GPS-Position") + } + + Row { + width: parent.width + spacing: Theme.paddingMedium + + anchors { + left: parent.left + right: parent.right + margins: Theme.paddingLarge + } + + Label { + //anchors.verticalCenter: parent.verticalCenter + id: determinedRegionName + width: parent.width * 2 / 3 + text: determined_region_name; + font.pixelSize: Theme.fontSizeLarge + wrapMode: Text.Wrap + } + + Button { + id: requestDetermined + text: qsTr("Bulletin") + enabled: false + width: parent.width * 1 / 3 + // height: 3 * width * sourceSize.height / sourceSize.width + onPressed: { + pageStack.push(Qt.resolvedUrl("BulletinView.qml"), {"regionID": determined_region_id, "regionName": determined_region_name, "country": "tbd_1", "macroRegion": "tbd_2", "connection": connection, "pm_only": false}) + } + } + + + } + + /* + Label { + id:positiontext + //anchors.verticalCenter: parent.verticalCenter + width: parent.width + text: "n/a" + font.pixelSize: Theme.fontSizeLarge + wrapMode: Text.Wrap + } + */ + } } Image { @@ -447,4 +588,34 @@ bottom: parent.bottom } } + + function request(url, callback) { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = (function(myxhr) { + return function() { + callback(myxhr); + } + })(xhr); + xhr.open('GET', url, true); + xhr.send(''); + } + function getRegionNameFromId(RegionID) { + var xhr = new XMLHttpRequest; + xhr.onreadystatechange = function () { + if(xhr.readyState === XMLHttpRequest.DONE){ + var d = JSON.parse(xhr.responseText); + if (RegionID != 'na') { | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/RegionList/RegionList.qml ^ |
@@ -138,7 +138,8 @@ ListElement {region: qsTr("Dachsteingebiet"); RegionID: "AT-06-01"} ListElement {region: qsTr("Totes Gebirge"); RegionID: "AT-06-02"} ListElement {region: qsTr("Ennstaler Alpen"); RegionID: "AT-06-03"} - ListElement {region: qsTr("Schladminger Tauern"); RegionID: "AT-06-04"} + ListElement {region: qsTr("Schladminger Tauern Nord"); RegionID: "AT-06-04-01"} + ListElement {region: qsTr("Schladminger Tauern Süd"); RegionID: "AT-06-04-02"} ListElement {region: qsTr("Nördl. Wölzer Tauern"); RegionID: "AT-06-05"} ListElement {region: qsTr("Rottenmanner Tauern"); RegionID: "AT-06-06"} ListElement {region: qsTr("Südl. Wölzer Tauern"); RegionID: "AT-06-07"} @@ -176,23 +177,30 @@ ListElement {region: qsTr("Gippel- Göllergebiet"); RegionID: "AT-03-06"} } + property ListModel regionListVorarlberg: ListModel{ - ListElement {region: qsTr("Bregenzerwaldgebirge"); RegionID: "AT8R1"} - ListElement {region: qsTr("Allgäuer Alpen / Hochtannberg"); RegionID: "AT8R2"} - ListElement {region: qsTr("Lechquellengeb. / Arlberg / Lechtaler Alp."); RegionID: "AT8R3"} - ListElement {region: qsTr("Verwall"); RegionID: "AT8R4"} - ListElement {region: qsTr("Rätikon"); RegionID: "AT8R5"} - ListElement {region: qsTr("Silvretta"); RegionID: "AT8R6"} + ListElement {region: qsTr("Bregenzerwaldgebirge"); RegionID: "AT-08-01"} + ListElement {region: qsTr("Allgäuer Alpen / Hochtannberg"); RegionID: "AT-08-02"} + ListElement {region: qsTr("Lechtaler Alpen"); RegionID: "AT-08-03-01"} + ListElement {region: qsTr("Lechquellengebirge"); RegionID: "AT-08-03-02"} + ListElement {region: qsTr("Verwall"); RegionID: "AT-08-04"} + ListElement {region: qsTr("Rätikon Ost"); RegionID: "AT-08-05-01"} + ListElement {region: qsTr("Rätikon West"); RegionID: "AT-08-05-02"} + ListElement {region: qsTr("Silvretta"); RegionID: "AT-08-06"} } //REGIONS GERMANY property ListModel regionListBavaria: ListModel{ - ListElement {region: qsTr("Allgäuer Alpen"); RegionID: "BYALL"} - ListElement {region: qsTr("Ammergauer Alpen"); RegionID: "BYAMM"} - ListElement {region: qsTr("Werdenfelser Alpen"); RegionID: "BYWFK"} - ListElement {region: qsTr("Bayrische Voralpen"); RegionID: "BYBVA"} - ListElement {region: qsTr("Chiemgauer Alpen"); RegionID: "BYCHG"} - ListElement {region: qsTr("Berchtesgadener Alpen"); RegionID: "BYBGD"} + ListElement {region: qsTr("Allgäuer Vorberge"); RegionID: "DE-BY-11"} + ListElement {region: qsTr("Allgäuer Hauptkamm"); RegionID: "DE-BY-12"} + ListElement {region: qsTr("Ammergauer Alpen"); RegionID: "DE-BY-20"} + ListElement {region: qsTr("Werdenfelser Alpen"); RegionID: "DE-BY-30"} + ListElement {region: qsTr("Bayerische Voralpen West"); RegionID: "DE-BY-41"} + ListElement {region: qsTr("Bayerische Voralpen Mitte"); RegionID: "DE-BY-42"} + ListElement {region: qsTr("Bayerische Voralpen Ost"); RegionID: "DE-BY-43"} + ListElement {region: qsTr("Chiemgauer Alpen West"); RegionID: "DE-BY-51"} + ListElement {region: qsTr("Chiemgauer Alpen Ost"); RegionID: "DE-BY-52"} + ListElement {region: qsTr("Berchtesgadener Alpen"); RegionID: "DE-BY-60"} } // REGIONS SPAIN @@ -441,4 +449,39 @@ ListElement {region: qsTr("CINTO-ROTONDO"); RegionID: "FR-40"} ListElement {region: qsTr("RENOSO-INCUDINE"); RegionID: "FR-41"} } + + property ListModel regionListSi: ListModel{ + ListElement {region: qsTr("Generalized Slovenia"); RegionID: "SI1"} + ListElement {region: qsTr("Julian Alps, South and West"); RegionID: "SI2"} + ListElement {region: qsTr("Julian Alps, Central and Karawanks, West"); RegionID: "SI3"} + ListElement {region: qsTr("Kamnik-Savinja Alps and Karawanks, East"); RegionID: "SI4"} + ListElement {region: qsTr("pre-Apline and Dinaric-Alps"); RegionID: "SI5"} + } + + property ListModel regionListNorway: ListModel{ + ListElement {region: qsTr("Nordenskiöld Land"); RegionID: "NO-3003"} + ListElement {region: qsTr("Finnmarkskysten"); RegionID: "NO-3006"} + ListElement {region: qsTr("Vest-Finnmark"); RegionID: "NO-3007"} + ListElement {region: qsTr("Nord-Troms"); RegionID: "NO-3009"} + ListElement {region: qsTr("Lyngen"); RegionID: "NO-3010"} + ListElement {region: qsTr("Tromsø"); RegionID: "NO-3011"} + ListElement {region: qsTr("Sør-Troms"); RegionID: "NO-3012"} + ListElement {region: qsTr("Indre Troms"); RegionID: "NO-3013"} + ListElement {region: qsTr("Lofoten og Vesterålen"); RegionID: "NO-3014"} + ListElement {region: qsTr("Ofoten"); RegionID: "NO-3015"} + ListElement {region: qsTr("Salten"); RegionID: "NO-3016"} + ListElement {region: qsTr("Svartisen"); RegionID: "NO-3017"} + ListElement {region: qsTr("Trollheimen"); RegionID: "NO-3022"} + ListElement {region: qsTr("Romsdal"); RegionID: "NO-3023"} + ListElement {region: qsTr("Sunnmøre"); RegionID: "NO-3024"} + ListElement {region: qsTr("Indre Fjordane"); RegionID: "NO-3027"} + ListElement {region: qsTr("Jotunheimen"); RegionID: "NO-3028"} + ListElement {region: qsTr("Indre Sogn"); RegionID: "NO-3029"} + ListElement {region: qsTr("Voss"); RegionID: "NO-3031"} + ListElement {region: qsTr("Hallingdal"); RegionID: "NO-3032"} + ListElement {region: qsTr("Hardanger"); RegionID: "NO-3034"} + ListElement {region: qsTr("Vest-Telemark"); RegionID: "NO-3035"} + ListElement {region: qsTr("Heiane"); RegionID: "NO-3037"} + + } } | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/RegionSelectPage.qml ^ |
@@ -46,7 +46,7 @@ delegate: BackgroundItem { id: firstListViewDelegate - onClicked: pageStack.push(Qt.resolvedUrl("DangerPage" + (RegionID.indexOf("CH-") !== -1 ? "_swiss" : "") + ".qml"), {"regionID": RegionID, "regionName": region, "country": country, "macroRegion": macroRegion, "connection": connection, "pm_only": false}) + onClicked: pageStack.push(Qt.resolvedUrl("BulletinView.qml"), {"regionID": RegionID, "regionName": region, "country": country, "macroRegion": macroRegion, "connection": connection, "pm_only": false}) Label { x: Theme.horizontalPageMargin @@ -63,10 +63,11 @@ id: bgImg asynchronous: true fillMode: Image.PreserveAspectFit - opacity: 0.05 + opacity: 0.20 source: "qrc:///res/bg_" + ( Theme.colorScheme ? "light" : "dark" ) + "_page.svg" anchors { - centerIn: parent + left: parent.left + bottom: parent.bottom } } | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/WebViewPage.qml ^ |
@@ -1,5 +1,5 @@ /* - Copyright (C) 2020 Friedrich Mütschele and other contributors + Copyright (C) 2021 Friedrich Mütschele and other contributors This file is part of avaRisk. avaRisk is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,8 +15,7 @@ import QtQuick 2.2 import Sailfish.Silica 1.0 -//import Sailfish.WebView 1.0 - +import Sailfish.WebView 1.0 Page { @@ -27,16 +26,14 @@ id: header title: topic } - - SilicaWebView { //Should be WebView to work - id: webView - + WebView { anchors { top: header.bottom left: parent.left right: parent.right bottom: parent.bottom } + active: true url: "https://" + qsTr("avalanche.report") + "/education/" + subPage } } | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/__main__.py ^ |
@@ -1,16 +1,49 @@ """ + Copyright (C) 2021 Friedrich Mütschele and other contributors + This file is part of pyAvaCore. + pyAvaCore is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + pyAvaCore is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. +""" + +""" CLI for pyAvaCore """ from datetime import datetime from datetime import timedelta from pathlib import Path from urllib.request import urlopen +import argparse import json +import typing import logging import logging.handlers -import sys -from .pyAvaCore import AvaReport, JSONEncoder, get_report_url, get_reports +from .pyAvaCore import JSONEncoder, get_reports +from .avabulletin import AvaBulletin +from .avabulletins import Bulletins +from .geojson import FeatureCollection + +parser = argparse.ArgumentParser(description='Download and parse EAWS avalanche bulletins') +parser.add_argument('--regions', + default="AT-02 AT-03 AT-04 AT-05 AT-06 AT-08 DE-BY CH SI FR IT-21 IT-23 IT-25 IT-34 IT-36 IT-57", + help='avalanche region to download') +parser.add_argument('--output', + default='./data', + help='output directory') +parser.add_argument('--cache', + default='./cache', + help='cache directory') +parser.add_argument('--geojson', + help='eaws-regions directory containing *micro-regions_elevation.geojson.json of') +args = parser.parse_args() Path('logs').mkdir(parents=True, exist_ok=True) logging.basicConfig( @@ -23,35 +56,47 @@ def download_region(regionID): """Downloads the given region and converts it to JSON""" - if regionID == 'CH': - url = 'https://www.slf.ch/avalanche/mobile/bulletin_en.zip' - reports, _, _ = get_reports(regionID, cache_path=str(Path('cache'))) - else: - reports, _, url = get_reports(regionID) - report: AvaReport + reports, _, url = get_reports(regionID) + report: AvaBulletin for report in reports: - if isinstance(report.validity_begin, datetime): - validityDate = report.validity_begin + if isinstance(report.validTime.startTime, datetime): + validityDate = report.validTime.startTime if validityDate.hour > 15: validityDate = validityDate + timedelta(days=1) validityDate = validityDate.date().isoformat() - report.report_texts = None - report.valid_regions = [r.replace('AT8R', 'AT-08-0') for r in report.valid_regions] + for region in report.regions: + if 'AT8R' in region.regionID: + region.regionID = region.regionID.replace('AT8R', 'AT-08-0') - directory = Path(sys.argv[1] if len(sys.argv) > 1 else 'data') + bulletins = Bulletins() + bulletins.bulletins = reports + + directory = Path(args.output) directory.mkdir(parents=True, exist_ok=True) ext = 'zip' if url[-3:] == 'zip' else 'xml' - with urlopen(url) as http, open(f'{directory}/{validityDate}-{regionID}.{ext}', mode='wb') as f: - logging.info('Writing %s to %s', url, f.name) - f.write(http.read()) + if url != '': + with urlopen(url) as http, open(f'{directory}/{validityDate}-{regionID}.{ext}', mode='wb') as f: + logging.info('Writing %s to %s', url, f.name) + f.write(http.read()) with open(f'{directory}/{validityDate}-{regionID}.json', mode='w', encoding='utf-8') as f: logging.info('Writing %s', f.name) - json.dump(reports, fp=f, cls=JSONEncoder, indent=2) + json.dump(bulletins, fp=f, cls=JSONEncoder, indent=2) + with open(f'{directory}/{validityDate}-{regionID}.ratings.json', mode='w', encoding='utf-8') as f: + obj = dict(maxDangerRatings=bulletins.max_danger_ratings()) + logging.info('Writing %s', f.name) + json.dump(obj, fp=f, indent=2, sort_keys=True) + if args.geojson: + with open(f'{args.geojson}/{regionID}_micro-regions_elevation.geojson.json', encoding='utf-8') as f: + geojson = FeatureCollection.from_dict(json.load(f)) + bulletins.augment_geojson(geojson) + with open(f'{directory}/{validityDate}-{regionID}.geojson', mode='w', encoding='utf-8') as f: + # Rounding of feature.geometry.coordinates is performed in to_float_coordinate + logging.info('Writing %s', f.name) + json.dump(geojson.to_dict(), fp=f) if __name__ == "__main__": - regions = ["AT-02", "AT-03", "AT-04", "AT-05", "AT-06", "AT-08", "BY", "CH"] - for region in regions: + for region in args.regions.split(): try: download_region(region) except Exception as e: # pylint: disable=broad-except | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/avabulletin.py ^ |
@@ -0,0 +1,329 @@ +""" + Copyright (C) 2021 Friedrich Mütschele and other contributors + This file is part of pyAvaCore. + pyAvaCore is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + pyAvaCore is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. +""" + +from datetime import datetime +import re +import typing + +class ValidTimeType: + ''' + Defines time intervall for the validity of a Bulletin + ''' + startTime: datetime + '''valid time start''' + endTime: datetime + '''valid time end''' + +class SourceType: + ''' + Describes the source of the Report + ToDo: Does not yet extend the whole CAAMLv6 + ''' + provider: str + '''Bulletin Provider Information''' + person: str + '''Bulletin Author''' + +class ElevationType: + ''' + contains a elevation band + ''' + lowerBound: str + upperBound: str + + def __init__(self, lowerBound='', upperBound='', auto_select='') -> None: + if lowerBound != '': + self.lowerBound = lowerBound + if upperBound != '': + self.upperBound = upperBound + + if auto_select != '': + self.auto_select(auto_select) + + def auto_select(self, auto_select): + auto_select = auto_select.replace('Forestline', 'Treeline') + if 'Hi' in auto_select: + self.lowerBound = re.sub(r'ElevationRange_(.+)Hi', r'\1', auto_select) + if 'Lo' in auto_select or 'Lw' in auto_select: + self.upperBound = re.sub(r'ElevationRange_(.+)(Lo|Lw)', r'\1', auto_select) + if '>' in auto_select: + self.lowerBound = re.sub(r'>(.+)', r'\1', auto_select) + if '<' in auto_select: + self.upperBound = re.sub(r'<(.+)', r'\1', auto_select) + + def toString(self): + if hasattr(self,'lowerBound') and hasattr(self,'upperBound'): + return ">" + self.lowerBound + "<" + self.upperBound + if hasattr(self,'lowerBound'): + return ">"+ self.lowerBound + if hasattr(self,'upperBound'): + return "<"+ self.upperBound + else: + return "" + +class AvaCoreCustom: + ''' + custom elements for special report content + ''' + custom_type: str + content: str + + def __init__(self, custom_type: str, content="") -> None: + self.custom_type = custom_type + self.content = content + + def __str__(self): + return "{'custom_type':'" + self.custom_type + "', 'content':" + self.content + "'}" + + def __repr__(self): + return str(self) + + +class DangerRatingType: + ''' + Describes the Danger Ratings + ToDo: Does not yet extend the whole CAAMLv6 + ''' + mainValue: str + '''main value as standardized descriptive text''' + aspect: list + '''list of valid aspects''' + elevation: ElevationType + '''valid elevation for DangerRating''' + terrainFeature: str + '''textual description of terrain, where this danger rating is applicable''' + + # --- Values form EAWS Matrix --- + + artificialDangerRating: str + '''artificial danger rating from matrix as standardized descriptive text''' + artificialAvalancheSize: int + '''size as value from 1 to 5''' + artificialAvalancheReleaseProbability: int + '''release probability from 1 to 4''' + artificialHazardSiteDistribution: int + '''hazard site distribution from 1 to 5''' + naturalDangerRating: str + '''natural danger rating from matrix as standardized descriptive text''' + naturalAvalancheReleaseProbability: int + '''release probability from 1 to 4''' + naturalHazardSiteDistribution: int + '''natural hazard site distribution from 1 to 5''' + customData: typing.List[AvaCoreCustom] + '''Custom Data for special reports''' + + # --- Values form EAWS Matrix --- + + values = { + 'low': 1, + 'moderate': 2, + 'considerable': 3, + 'high': 4, + 'very_high': 5 + } + + def __init__(self, mainValue='', ) -> None: + self.elevation = ElevationType() + self.customData = [] + + def get_mainValue_int(self): + + return self.values.get(self.mainValue, 0) + + def set_mainValue_int(self, value): + self.mainValue = next((level_text for level_text, level_int in self.values.items() if level_int == value), None) + +class AvalancheProblemType: + problemType: str + '''problem type as standardized descriptive text''' + dangerRating: DangerRatingType + '''avalanche danger rating''' + comment: str + + ''' + ToDo: Addd custom data type + ''' + + def __init__(self) -> None: + self.dangerRating = DangerRatingType() + + def add_problemType(self, problem_type_text): + ''' + All problem type texts in pre CAAMLv6 need a post processing to match the new standard + All new problem texts contain a unterscore and can be differentiated by that + ''' + if not '_' in problem_type_text: + if 'new' in problem_type_text: + problem_type_text = 'new_snow' + elif 'drifting'in problem_type_text: + problem_type_text = 'wind_drifted_snow' + elif 'old' in problem_type_text: + problem_type_text = 'persistent_weak_layers' + elif 'wet' in problem_type_text: + problem_type_text = 'wet_snow' + elif 'gliding' in problem_type_text: + problem_type_text = 'gliding_snow' + elif 'favourable' in problem_type_text: + problem_type_text = 'favourable_situation' + + self.problemType = problem_type_text + +class TendencyType: + tendencyType: str + '''string contains decreasing, steady or increasing''' + validTime: ValidTimeType + '''valid time interval for tendency''' + tendencyComment: str + '''tendency comment''' + comment: str + '''Tendency comment''' + #ToDo Add custom data + + def __init__(self) -> None: + self.validTime = ValidTimeType() + +class RegionType: + name: str + regionID: str | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/avabulletins.py ^ |
@@ -0,0 +1,106 @@ +""" + Copyright (C) 2021 Friedrich Mütschele and other contributors + This file is part of pyAvaCore. + pyAvaCore is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + pyAvaCore is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. +""" + +import typing +from .avabulletin import AvaBulletin, DangerRatingType +from .geojson import Feature, FeatureCollection + + +class Bulletins: + """ + Class for the AvaBulletin collection + Follows partly CAAMLv6 caaml:Bulletins + """ + + bulletins: typing.List[AvaBulletin] + + def max_danger_ratings(self): + ratings = dict() + for bulletin in self.bulletins: + for region in bulletin.regions: + regionID = region.regionID + for danger in bulletin.dangerRatings: + if ( + Bulletins.region_without_elevation(regionID) + or not danger.elevation + or danger.elevation.toString() == "" + or danger.elevation.toString().startswith("<") + ): + key = f"{regionID}:low" + ratings[key] = max( + danger.get_mainValue_int(), ratings.get(key, 0) + ) + if ( + Bulletins.region_without_elevation(regionID) + or not danger.elevation + or danger.elevation.toString() == "" + or danger.elevation.toString().startswith(">") + ): + key = f"{regionID}:high" + ratings[key] = max( + danger.get_mainValue_int(), ratings.get(key, 0) + ) + return ratings + + def augment_geojson(self, geojson: FeatureCollection): + for feature in geojson.features: + self.augment_feature(feature) + + def augment_feature(self, feature: Feature): + id = feature.properties.id + elevation = feature.properties.elevation + + def affects_region(b: AvaBulletin): + return id in [r.regionID for r in b.regions] + + def affects_danger(d: DangerRatingType): + if Bulletins.region_without_elevation(id): + return True + elif not d.elevation: + return True + elif not ( + hasattr(d.elevation, "lowerBound") or hasattr(d.elevation, "upperBound") + ): + return True + elif hasattr(d.elevation, "upperBound") and elevation == "low": + return True + elif hasattr(d.elevation, "lowerBound") and elevation == "high": + return True + else: + return False + + bulletins = [b for b in self.bulletins if affects_region(b)] + dangers = [ + d.get_mainValue_int() + for b in bulletins + for d in b.dangerRatings + if affects_danger(d) + ] + if not dangers: + return + feature.properties.max_danger_rating = max(dangers) + + @staticmethod + def region_without_elevation(id: str): + return ( + id.startswith("CH-") + or id.startswith("IT-21-") + or id.startswith("IT-23-") + or id.startswith("IT-25-") + or id.startswith("IT-34-") + or id.startswith("IT-36-") + or id.startswith("IT-57-") + or id.startswith("FR-") + ) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/geojson.py ^ |
@@ -0,0 +1,169 @@ +""" + Copyright (C) 2021 Friedrich Mütschele and other contributors + This file is part of pyAvaCore. + pyAvaCore is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + pyAvaCore is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. +""" + +# Generated using https://app.quicktype.io/ +from typing import Optional, List, Any, TypeVar, Callable, Type, cast + + +T = TypeVar("T") + + +def from_str(x: Any) -> str: + assert isinstance(x, str) + return x + + +def from_none(x: Any) -> Any: + assert x is None + return x + + +def from_union(fs, x): + for f in fs: + try: + return f(x) + except: + pass + assert False + + +def from_list(f: Callable[[Any], T], x: Any) -> List[T]: + assert isinstance(x, list) + return [f(y) for y in x] + + +def from_float(x: Any) -> float: + assert isinstance(x, (float, int)) and not isinstance(x, bool) + return float(x) + + +def to_float(x: Any) -> float: + assert isinstance(x, float) + return x + + +def to_float_coordinate(x: Any) -> float: + assert isinstance(x, float) + return round(x, 4) + + +def from_int(x: Any) -> int: + assert isinstance(x, int) and not isinstance(x, bool) + return x + + +def to_class(c: Type[T], x: Any) -> dict: + assert isinstance(x, c) + return cast(Any, x).to_dict() + + +class Geometry: + type: Optional[str] + coordinates: Optional[List[List[List[List[float]]]]] + + def __init__(self, type: Optional[str], coordinates: Optional[List[List[List[List[float]]]]]) -> None: + self.type = type + self.coordinates = coordinates + + @staticmethod + def from_dict(obj: Any) -> 'Geometry': + assert isinstance(obj, dict) + type = from_union([from_str, from_none], obj.get("type")) + coordinates = from_union([lambda x: from_list(lambda x: from_list(lambda x: from_list(lambda x: from_list(from_float, x), x), x), x), from_none], obj.get("coordinates")) + return Geometry(type, coordinates) + + def to_dict(self) -> dict: + result: dict = {} + result["type"] = from_union([from_str, from_none], self.type) + result["coordinates"] = from_union([lambda x: from_list(lambda x: from_list(lambda x: from_list(lambda x: from_list(to_float_coordinate, x), x), x), x), from_none], self.coordinates) + return result + + +class Properties: + threshold: None + id: Optional[str] + elevation: Optional[str] + max_danger_rating: Optional[int] + + def __init__(self, threshold: None, id: Optional[str], elevation: Optional[str], max_danger_rating: Optional[int]) -> None: + self.threshold = threshold + self.id = id + self.elevation = elevation + self.max_danger_rating = max_danger_rating + + @staticmethod + def from_dict(obj: Any) -> 'Properties': + assert isinstance(obj, dict) + threshold = from_none(obj.get("threshold")) + id = from_union([from_str, from_none], obj.get("id")) + elevation = from_union([from_str, from_none], obj.get("elevation")) + max_danger_rating = from_union([from_int, from_none], obj.get("maxDangerRating")) + return Properties(threshold, id, elevation, max_danger_rating) + + def to_dict(self) -> dict: + result: dict = {} + result["threshold"] = from_none(self.threshold) + result["id"] = from_union([from_str, from_none], self.id) + result["elevation"] = from_union([from_str, from_none], self.elevation) + result["maxDangerRating"] = from_union([from_int, from_none], self.max_danger_rating) + return result + + +class Feature: + type: Optional[str] + properties: Optional[Properties] + geometry: Optional[Geometry] + + def __init__(self, type: Optional[str], properties: Optional[Properties], geometry: Optional[Geometry]) -> None: + self.type = type + self.properties = properties + self.geometry = geometry + + @staticmethod + def from_dict(obj: Any) -> 'Feature': + assert isinstance(obj, dict) + type = from_union([from_str, from_none], obj.get("type")) + properties = from_union([Properties.from_dict, from_none], obj.get("properties")) + geometry = from_union([Geometry.from_dict, from_none], obj.get("geometry")) + return Feature(type, properties, geometry) + + def to_dict(self) -> dict: + result: dict = {} + result["type"] = from_union([from_str, from_none], self.type) + result["properties"] = from_union([lambda x: to_class(Properties, x), from_none], self.properties) + result["geometry"] = from_union([lambda x: to_class(Geometry, x), from_none], self.geometry) + return result + + +class FeatureCollection: + type: Optional[str] + features: Optional[List[Feature]] + + def __init__(self, type: Optional[str], features: Optional[List[Feature]]) -> None: + self.type = type + self.features = features + + @staticmethod + def from_dict(obj: Any) -> 'FeatureCollection': + assert isinstance(obj, dict) + type = from_union([from_str, from_none], obj.get("type")) + features = from_union([lambda x: from_list(Feature.from_dict, x), from_none], obj.get("features")) + return FeatureCollection(type, features) + + def to_dict(self) -> dict: + result: dict = {} + result["type"] = from_union([from_str, from_none], self.type) + result["features"] = from_union([lambda x: from_list(lambda x: to_class(Feature, x), x), from_none], self.features) + return result | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/processor_caamlv5.py ^ |
@@ -0,0 +1,498 @@ +""" + Copyright (C) 2021 Friedrich Mütschele and other contributors + This file is part of pyAvaCore. + pyAvaCore is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + pyAvaCore is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. +""" +from datetime import datetime +from datetime import time +from datetime import timedelta +import pytz +import dateutil.parser +import copy +from avacore import pyAvaCore +from avacore.avabulletin import AvaBulletin, DangerRatingType, AvalancheProblemType, RegionType + +CAAMLTAG = '{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}' + +def et_add_parent_info(element_tree): + + '''Add Parent-Info to structure an ElementTree''' + + for child in element_tree: + child.attrib['__my_parent__'] = element_tree + et_add_parent_info(child) + +def et_get_parent(element_tree): + + '''get Parent-Info from ElementTree, when parent Info was added previously.''' + + if '__my_parent__' in element_tree.attrib: + return element_tree.attrib['__my_parent__'] + return None + +### XML-Parsers + +def parse_xml(root): + + '''parses ALBINA-Style CAAML-XML. root is a ElementTree''' + + reports = [] + + for bulletin in root.iter(tag=CAAMLTAG + 'Bulletin'): + report = AvaBulletin() + report.bulletinID = bulletin.attrib.get('{http://www.opengis.net/gml}id') + pm_danger_ratings = [] + + pm_available = False + for DangerRating in bulletin.iter(tag=CAAMLTAG + 'DangerRating'): + for validTime in DangerRating.iter(tag=CAAMLTAG + 'validTime'): + pm_available = True + break + + for observations in bulletin: + et_add_parent_info(observations) + for locRef in observations.iter(tag=CAAMLTAG + 'locRef'): + loc_ref = observations.attrib.get('{http://www.w3.org/1999/xlink}href') + if loc_ref not in report.regions: + report.regions.append(RegionType(observations.attrib.get('{http://www.w3.org/1999/xlink}href'))) + for dateTimeReport in observations.iter(tag=CAAMLTAG + 'dateTimeReport'): + report.publicationTime = dateutil.parser.parse(dateTimeReport.text) + for validTime in observations.iter(tag=CAAMLTAG + 'validTime'): + if not et_get_parent(validTime): + for beginPosition in observations.iter(tag=CAAMLTAG + 'beginPosition'): + report.validTime.startTime = dateutil.parser.parse(beginPosition.text) + for endPosition in observations.iter(tag=CAAMLTAG + 'endPosition'): + report.validTime.endTime = dateutil.parser.parse(endPosition.text) + for DangerRating in observations.iter(tag=CAAMLTAG + 'DangerRating'): + main_value = 0 + am_rating = True + for mainValue in DangerRating.iter(tag=CAAMLTAG + 'mainValue'): + main_value = int(mainValue.text) + valid_elevation = "-" + for validElevation in DangerRating.iter(tag=CAAMLTAG + 'validElevation'): + valid_elevation = validElevation.attrib.get('{http://www.w3.org/1999/xlink}href') + for beginPosition in DangerRating.iter(tag=CAAMLTAG + 'beginPosition'): + validity_begin = dateutil.parser.parse(beginPosition.text) + if validity_begin.time() <= time(15, 0, 0): + am_rating = False + report.validTime.endTime = report.validTime.endTime.replace(hour=validity_begin.hour) + danger_rating = DangerRatingType() + danger_rating.set_mainValue_int(main_value) + danger_rating.elevation.auto_select(valid_elevation) + if am_rating: + report.dangerRatings.append(danger_rating) + else: + pm_danger_ratings.append(danger_rating) + ''' + for DangerPattern in observations.iter(tag=CAAMLTAG + 'DangerPattern'): + for DangerPatternType in DangerPattern.iter(tag=CAAMLTAG + 'type'): + report.dangerpattern.append(DangerPatternType.text) + ''' + for AvProblem in observations.iter(tag=CAAMLTAG + 'AvProblem'): + type_r = "" + for avProbType in AvProblem.iter(tag=CAAMLTAG + 'type'): + type_r = avProbType.text + aspect = [] + for validAspect in AvProblem.iter(tag=CAAMLTAG + 'validAspect'): + aspect.append(validAspect.get('{http://www.w3.org/1999/xlink}href').upper().replace('ASPECTRANGE_', '')) + valid_elevation = "-" + for validElevation in AvProblem.iter(tag=CAAMLTAG + 'validElevation'): + valid_elevation = validElevation.get('{http://www.w3.org/1999/xlink}href') + comment_r = '' + for comment in AvProblem.iter(tag=CAAMLTAG + 'comment'): + comment_r = comment.text + problem_danger_rating = DangerRatingType() + problem_danger_rating.aspect = aspect + problem_danger_rating.elevation.auto_select(valid_elevation) + problem = AvalancheProblemType() + problem.add_problemType(type_r) + problem.dangerRating = problem_danger_rating + if comment_r != '': + problem.comment = comment_r + report.avalancheProblems.append(problem) + for avActivityHighlights in observations.iter(tag=CAAMLTAG + 'avActivityHighlights'): + report.avalancheActivityHighlights = avActivityHighlights.text.replace(' ', '\n') + for wxSynopsisComment in observations.iter(tag=CAAMLTAG + 'wxSynopsisComment'): + report.wxSynopsisComment = wxSynopsisComment.text.replace(' ', '\n') + for avActivityComment in observations.iter(tag=CAAMLTAG + 'avActivityComment'): + report.avalancheActivityComment = avActivityComment.text.replace(' ', '\n') + for snowpackStructureComment in observations.iter(tag=CAAMLTAG + ''\ + 'snowpackStructureComment'): + report.snowpackStructureComment = snowpackStructureComment.text.replace(' ', '\n') + for tendencyComment in observations.iter(tag=CAAMLTAG + 'tendencyComment'): + report.tendency.tendencyComment = tendencyComment.text.replace(' ', '\n') + reports.append(report) + + if pm_available: + pm_report = copy.deepcopy(report) + pm_report.dangerRatings = pm_danger_ratings + pm_report.bulletinID += '_PM' + pm_report.validTime.startTime = pm_report.validTime.startTime + timedelta(hours=12) + pm_report.validTime.endTime = pm_report.validTime.endTime + timedelta(hours=12) + reports.append(pm_report) + + for report in reports: + if report.bulletinID.endswith('_PM') and any(x.bulletinID == report.bulletinID[:-3] for x in reports): + report.predecessor_id = report.bulletinID[:-3] + + return reports + +def parse_xml_vorarlberg(root): + + '''parses Vorarlberg-Style CAAML-XML. root is a ElementTree''' + + reports = [] + report = pyAvaCore.AvaBulletin() + comment_empty = 1 + + # Common for every Report: + + report_id = '' + for bulletin in root.iter(tag=CAAMLTAG + 'Bulletin'): + report_id = bulletin.attrib.get('{http://www.opengis.net/gml}id') + + activity_com = '' + for bulletin in root.iter(tag=CAAMLTAG + 'Bulletin'): + for detail in bulletin: + for metaDataProperty in detail.iter(tag=CAAMLTAG + 'metaDataProperty'): + for dateTimeReport in metaDataProperty.iter(tag=CAAMLTAG + 'dateTimeReport'): + report.publicationTime = dateutil.parser.parse(dateTimeReport.text) + for bulletinResultsOf in detail.iter(tag=CAAMLTAG + 'bulletinResultsOf'): + for travelAdvisoryComment in bulletinResultsOf.iter(tag=CAAMLTAG + ''\ + 'travelAdvisoryComment'): + activity_com = travelAdvisoryComment.text + for highlights in bulletinResultsOf.iter(tag=CAAMLTAG + 'highlights'): + report.avalancheActivityHighlights = highlights.text + for comment in bulletinResultsOf.iter(tag=CAAMLTAG + 'comment'): + if comment_empty: + report.tendency.tendencyComment = comment.text + comment_empty = 0 + for wxSynopsisComment in bulletinResultsOf.iter(tag=CAAMLTAG + ''\ + 'wxSynopsisComment'): + report.wxSynopsisComment = wxSynopsisComment.text + for snowpackStructureComment in bulletinResultsOf.iter(tag=CAAMLTAG + ''\ + 'snowpackStructureComment'): + report.snowpackStructureComment = snowpackStructureComment.text + for AvProblem in detail.iter(tag=CAAMLTAG + 'AvProblem'): + type_r = "" + for ac_problemt_type in AvProblem.iter(tag=CAAMLTAG + 'type'): + type_r = ac_problemt_type.text + aspect = [] + for validAspect in AvProblem.iter(tag=CAAMLTAG + 'validAspect'): + aspect.append(validAspect.get('{http://www.w3.org/1999/xlink}href').upper().replace(\ + 'ASPECTRANGE_', '').replace('O', 'E')) + valid_elevation = "-" + for validElevation in AvProblem.iter(tag=CAAMLTAG + 'validElevation'): + if '{http://www.w3.org/1999/xlink}href' in validElevation.attrib: + if "Treeline" in validElevation.attrib.get('{http://www.w3.org/1999/xlink}href'): + if "Hi" in validElevation.attrib.get('{http://www.w3.org/1999/xlink}href'): + valid_elevation = ">Treeline" + if "Lo" in validElevation.attrib.get('{http://www.w3.org/1999/xlink}href'): | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/processor_caamlv6.py ^ |
@@ -0,0 +1,126 @@ +""" + Copyright (C) 2021 Friedrich Mütschele and other contributors + This file is part of pyAvaCore. + pyAvaCore is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + pyAvaCore is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. +""" +from datetime import datetime +from datetime import timezone +from datetime import time +from datetime import timedelta +import copy + +from avacore import pyAvaCore +from avacore.avabulletin import AvaBulletin + +def et_add_parent_info(element_tree): + + '''Add Parent-Info to structure an ElementTree''' + + for child in element_tree: + child.attrib['__my_parent__'] = element_tree + et_add_parent_info(child) + +def et_get_parent(element_tree): + + '''get Parent-Info from ElementTree, when parent Info was added previously.''' + + if '__my_parent__' in element_tree.attrib: + return element_tree.attrib['__my_parent__'] + return None + +### XML-Parsers + +def parse_xml(root): + + '''parses ALBINA-Style CAAML-XML. root is a ElementTree''' + + reports = [] + + for bulletin in root.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}Bulletin'): + report = pyAvaCore.AvaBulletin() + report.reportId = bulletin.attrib.get('{http://www.opengis.net/gml}id') + pm_danger_ratings = [] + + pm_available = False + for DangerRating in bulletin.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}DangerRating'): + for validTime in DangerRating.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validTime'): + pm_available = True + break + + for observations in bulletin: + et_add_parent_info(observations) + for locRef in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}locRef'): + loc_ref = observations.attrib.get('{http://www.w3.org/1999/xlink}href') + if loc_ref not in report.region: + report.region.append(observations.attrib.get('{http://www.w3.org/1999/xlink}href')) + for dateTimeReport in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}dateTimeReport'): + report.publicationTime = pyAvaCore.try_parse_datetime(dateTimeReport.text).replace(tzinfo=timezone.utc) + for validTime in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validTime'): + if not et_get_parent(validTime): + for beginPosition in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}beginPosition'): + report.validity_begin = pyAvaCore.try_parse_datetime(beginPosition.text).replace(tzinfo=timezone.utc) + for endPosition in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}endPosition'): + report.validity_end = pyAvaCore.try_parse_datetime(endPosition.text).replace(tzinfo=timezone.utc) + for DangerRating in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}DangerRating'): + main_value = 0 + am_rating = True + for mainValue in DangerRating.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}mainValue'): + main_value = int(mainValue.text) + valid_elevation = "-" + for validElevation in DangerRating.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validElevation'): + valid_elevation = validElevation.attrib.get('{http://www.w3.org/1999/xlink}href') + for beginPosition in DangerRating.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}beginPosition'): + if '11:00' in beginPosition.text: + am_rating = False + report.validity_end = report.validity_end.replace(hour=11) + if am_rating: + report.danger_main.append(pyAvaCore.DangerMain(main_value, valid_elevation)) + else: + pm_danger_ratings.append(pyAvaCore.DangerMain(main_value, valid_elevation)) + for DangerPattern in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}DangerPattern'): + for DangerPatternType in DangerPattern.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}type'): + report.dangerpattern.append(DangerPatternType.text) + for AvProblem in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}AvProblem'): + type_r = "" + for avProbType in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}type'): + type_r = avProbType.text + aspect = [] + for validAspect in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validAspect'): + aspect.append(validAspect.get('{http://www.w3.org/1999/xlink}href').upper().replace('ASPECTRANGE_', '')) + valid_elevation = "-" + for validElevation in AvProblem.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}validElevation'): + valid_elevation = validElevation.get('{http://www.w3.org/1999/xlink}href') + report.problem_list.append(pyAvaCore.Problem(type_r, aspect, valid_elevation)) + for avActivityHighlights in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}avActivityHighlights'): + report.report_texts.append(pyAvaCore.ReportText('activity_hl', avActivityHighlights.text)) + for avActivityComment in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}avActivityComment'): + report.report_texts.append(pyAvaCore.ReportText('activity_com', avActivityComment.text)) + for snowpackStructureComment in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}'\ + 'snowpackStructureComment'): + report.report_texts.append(pyAvaCore.ReportText('snow_struct_com', snowpackStructureComment.text)) + for tendencyComment in observations.iter(tag='{http://caaml.org/Schemas/V5.0/Profiles/BulletinEAWS}tendencyComment'): + report.report_texts.append(pyAvaCore.ReportText('tendency_com', tendencyComment.text)) + reports.append(report) + + if pm_available: + pm_report = copy.deepcopy(report) + pm_report.danger_main = pm_danger_ratings + pm_report.report_id += '_PM' + pm_report.validity_begin = pm_report.validity_begin + timedelta(hours=12) + pm_report.validity_end = pm_report.validity_end + timedelta(hours=12) + reports.append(pm_report) + + for report in reports: + if report.reportId.endswith('_PM') and any(x.reportId == report.reportId[:-3] for x in reports): + report.predecessor_id = report.reportId[:-3] + + return reports | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/processor_ch.py ^ |
@@ -15,14 +15,18 @@ from datetime import datetime from datetime import timedelta from pathlib import Path +import pytz import urllib.request import zipfile import copy import base64 import json +import logging +import re from avacore import pyAvaCore from avacore.png import png +from avacore.avabulletin import AvaBulletin, DangerRatingType, AvalancheProblemType, AvaCoreCustom, ElevationType, RegionType def fetch_files_ch(lang, path): @@ -31,14 +35,25 @@ ''' Path(path + '/swiss/').mkdir(parents=True, exist_ok=True) url = 'https://www.slf.ch/avalanche/mobile/bulletin_'+lang+'.zip' + logging.info('Fetching %s', url) urllib.request.urlretrieve(url, path + '/swiss/bulletin_'+lang+'.zip') - urllib.request.urlretrieve('https://www.slf.ch/avalanche/bulletin/'+lang+'/gk_region2pdf.txt', path + '/swiss/gk_region2pdf.txt') + try: + urllib.request.urlretrieve('https://www.slf.ch/avalanche/bulletin/'+lang+'/gk_region2pdf.txt', path + '/swiss/gk_region2pdf.txt') + except: + open(path + '/swiss/gk_region2pdf.txt', 'a').close() + with zipfile.ZipFile(path + '/swiss/bulletin_'+lang+'.zip', 'r') as zip_ref: zip_ref.extractall(path + '/swiss/') +def append_to_list(list_r, element): + if not element in list_r: + list_r.append(element) + return list_r + return list_r + def get_prone_locations(img_text): ''' Extract dangerous aspects from png @@ -53,28 +68,67 @@ aspects = [] if px_list[20][129] == 0: - aspects.append('NNE') + # aspects.append('NNE') + aspects = append_to_list(aspects, 'N') + aspects = append_to_list(aspects, 'NE') if px_list[25][145] == 0: - aspects.append('ENE') + # aspects.append('ENE') + aspects = append_to_list(aspects, 'NE') + aspects = append_to_list(aspects, 'E') if px_list[31][145] == 0: - aspects.append('ESE') + # aspects.append('ESE') + aspects = append_to_list(aspects, 'E') + aspects = append_to_list(aspects, 'SE') if px_list[36][129] == 0: - aspects.append('SSE') + # aspects.append('SSE') + aspects = append_to_list(aspects, 'SE') + aspects = append_to_list(aspects, 'S') if px_list[36][101] == 0: - aspects.append('SSW') + # aspects.append('SSW') + aspects = append_to_list(aspects, 'S') + aspects = append_to_list(aspects, 'SW') if px_list[31][77] == 0: - aspects.append('WSW') + # aspects.append('WSW') + aspects = append_to_list(aspects, 'SW') + aspects = append_to_list(aspects, 'W') if px_list[25][77] == 0: - aspects.append('WNW') + # aspects.append('WNW') + aspects = append_to_list(aspects, 'W') + aspects = append_to_list(aspects, 'NW') if px_list[20][101] == 0: - aspects.append('NNW') + # aspects.append('NNW') + aspects = append_to_list(aspects, 'NW') + aspects = append_to_list(aspects, 'N') return aspects -def process_reports_ch(path, lang="en", cached=False): +def clean_html_string(to_clean): + to_clean = re.sub('(\<div class="header-5-weather"\>.*\<\/div\>)', r'§newLine§\1:', to_clean) + to_clean = re.sub('(?=\<div)(.|\n)*?(\>)', '', to_clean) + to_clean = re.sub('">', '', to_clean) + to_clean = re.sub('</div>', '', to_clean) + to_clean = re.sub(' +', ' ', to_clean) + to_clean = re.sub('(\n\s*)+\n', '', to_clean) + to_clean = re.sub('\A\s+', '', to_clean) + to_clean = re.sub('\n', '', to_clean) + to_clean = re.sub('<br \/>', '\n', to_clean) + to_clean = re.sub('<br>', '\n', to_clean) + to_clean = re.sub('<\/ul>', '\n', to_clean) + # to_clean = re.sub('^(\n)', '', to_clean) + to_clean = re.sub('<ul class=\\"bullet-list-indent', '', to_clean) + to_clean = re.sub('<li class=\\"bullet-list-item', '- ', to_clean) + to_clean = re.sub('\\<\/li>', '\n', to_clean) + to_clean = re.sub('§newLine§', '\n', to_clean) + to_clean = to_clean.strip() + return to_clean + +def process_reports_ch(path, lang="en", cached=False, problems=False): ''' Download the reports for CH ''' + + reports = [] + if not cached: fetch_files_ch(lang, path) @@ -86,49 +140,79 @@ # region_id = region_id[-4:] - common_report = pyAvaCore.AvaReport() + common_report = pyAvaCore.AvaBulletin() begin, end = data['validity'].split('/') date_time_now = datetime.now() - common_report.rep_date = datetime.strptime(str(date_time_now.year) + '-' + begin[begin.find(':')+2:-1], '%Y-%d.%m., %H:%M') - common_report.validity_begin = common_report.rep_date - if common_report.validity_begin.hour == 17: - common_report.validity_end = common_report.validity_begin + timedelta(days=1) - elif common_report.validity_begin.hour == 8: - common_report.validity_end = common_report.validity_begin + timedelta(hours=9) + common_report.publicationTime = pytz.timezone("Europe/Zurich").localize(datetime.strptime(str(date_time_now.year) + '-' + begin[begin.find(':')+2:-1], '%Y-%d.%m., %H:%M')) + common_report.validTime.startTime = common_report.publicationTime + if common_report.validTime.startTime.hour == 17: + common_report.validTime.endTime = common_report.validTime.startTime + timedelta(days=1) + elif common_report.validTime.startTime.hour == 8: + common_report.validTime.endTime = common_report.validTime.startTime + timedelta(hours=9) else: # Shourld not happen - common_report.validity_end = datetime.strptime(str(date_time_now.year) + '-' + end[end.find(':')+2:], '%Y-%d.%m., %H:%M') - - report_ids = [] - reports = [] - + common_report.validTime.endTime = pytz.timezone("Europe/Zurich").localize(datetime.strptime(str(date_time_now.year) + '-' + end[end.find(':')+2:], '%Y-%d.%m., %H:%M')) + + common_report.avalancheActivityHighlights = data['flash'] + + text = "" + with open(path + '/swiss/sdwetter.html', encoding="utf-8") as f: + text = f.read() + + text = text.split('<div class="footer-meteo-mobile')[0] + segments = text.split('popover-flag') + + for segment in segments[1:]: + outlook = None + if 'Outlook' in segment or 'Tendenz' in segment: + outlook = segment.split('<div class="snow-and-weather-block">')[1] + segment = segment.split('<div class="snow-and-weather-block">')[0] + segment = clean_html_string(segment) + + # segment = segment.split + if 'popover-snowpack' in segment: + common_report.snowpackStructureComment = segment.split('popover-snowpack ')[1] + if 'popover-actual-weather' in segment: + common_report.wxSynopsisComment = segment.split('popover-actual-weather ')[1] + if 'popover-weather-forecast' in segment: + common_report.wxSynopsisComment += '\n' + segment.split('popover-weather-forecast ')[1] + if outlook: + common_report.tendency.tendencyComment = clean_html_string(outlook.split('</span>')[1]) + + # html_weather_snow = AvaCoreCustom('html_weather_snow') + # html_weather_snow.content = text + # report.dangerRatings[0].customData.append(html_weather_snow) + + bulletinIDs = [] + bulletin_combinations = set() # Receives the ID of the report that matches the selected region_id with open(path + '/swiss/gk_region2pdf.txt') as fp: for line in fp: - report_id = line.split('_')[5][:-5] - report_id_pm = None - if len(report_id) > 7: - report_id_pm = report_id[7:] - report_id = report_id[:7] - if report_id not in report_ids: - report_ids.append(report_id) + bulletinID = line.split('_')[5][:-5] + bulletin_combinations.add(bulletinID) + bulletinID_pm = None + if len(bulletinID) > 7: | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/processor_fr.py ^ |
@@ -13,12 +13,16 @@ along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. """ from urllib.request import urlopen, Request +import pytz +import dateutil.parser import urllib.request import copy +import logging import re import string from avacore import pyAvaCore +from avacore.avabulletin import AvaBulletin, DangerRatingType, AvalancheProblemType, RegionType def download_report_fr(region_id): try: @@ -44,6 +48,7 @@ req = Request('https://rpcache-aa.meteofrance.com/internet2018client/2.0/report?domain=' + re.sub('FR-', '', region_id) + \ '&report_type=Forecast&report_subtype=BRA') req.add_header('Authorization', 'Bearer ' + access_token) + logging.info('Fetching %s', req.full_url) response_content = urlopen(req).read() try: @@ -53,6 +58,14 @@ return root +def process_all_reports_fr(): + all_reports = [] + for region in fr_regions: + reports = process_reports_fr(region) + for report in reports: + all_reports.append(report) + return all_reports + def process_reports_fr(region_id, path='', cached=False): ''' Download report for specified france region @@ -70,21 +83,19 @@ for bulletins in m_root.iter(tag='BULLETINS_NEIGE_AVALANCHE'): root = bulletins - report = pyAvaCore.AvaReport() + report = AvaBulletin() reports = [] - report.valid_regions.append('FR-' + root.attrib.get('ID').zfill(2)) - report.rep_date = pyAvaCore.try_parse_datetime(root.attrib.get('DATEBULLETIN')) - report.validity_begin = pyAvaCore.try_parse_datetime(root.attrib.get('DATEBULLETIN')) - report.validity_end = pyAvaCore.try_parse_datetime(root.attrib.get('DATEVALIDITE')) + report.regions.append(RegionType('FR-' + root.attrib.get('ID').zfill(2))) + report.publicationTime = pytz.timezone("Europe/Paris").localize(dateutil.parser.parse(root.attrib.get('DATEBULLETIN'))) + report.validTime.startTime = pytz.timezone("Europe/Paris").localize(dateutil.parser.parse(root.attrib.get('DATEBULLETIN'))) + report.validTime.endTime = pytz.timezone("Europe/Paris").localize(dateutil.parser.parse(root.attrib.get('DATEVALIDITE'))) + + for cartoucherisque in root.iter(tag='CARTOUCHERISQUE'): - for risque in cartoucherisque.iter(tag='RISQUE'): - report.danger_main.append(pyAvaCore.DangerMain(int(risque.attrib.get('RISQUE1')), risque.attrib.get('LOC1'))) - if not risque.attrib.get('RISQUE2') == '': - report.danger_main.append(pyAvaCore.DangerMain(int(risque.attrib.get('RISQUE2')), risque.attrib.get('LOC2'))) - - + + danger_rating_pre = DangerRatingType() aspects = [] for pente in cartoucherisque.iter(tag='PENTE'): @@ -105,48 +116,134 @@ if pente.get('NW') == 'true': aspects.append('NW') - general_problem_valid_elevation = '-' - report.problem_list.append(pyAvaCore.Problem("general", aspects, general_problem_valid_elevation)) + # general_problem_valid_elevation = '-' + # report.problem_list.append(pyAvaCore.Problem("general", aspects, general_problem_valid_elevation)) + danger_rating_pre.aspect = aspects + + for risque in cartoucherisque.iter(tag='RISQUE'): + # report.danger_main.append(pyAvaCore.DangerMain(int(risque.attrib.get('RISQUE1')), risque.attrib.get('LOC1'))) + danger_rating = copy.deepcopy(danger_rating_pre) + danger_rating.set_mainValue_int(int(risque.attrib.get('RISQUE1'))) + danger_rating.elevation.auto_select(risque.attrib.get('LOC1')) + report.dangerRatings.append(danger_rating) + if not risque.attrib.get('RISQUE2') == '': + #report.danger_main.append(pyAvaCore.DangerMain(int(risque.attrib.get('RISQUE2')), risque.attrib.get('LOC2'))) + danger_rating2 = copy.deepcopy(danger_rating_pre) + danger_rating2.set_mainValue_int(int(risque.attrib.get('RISQUE2'))) + danger_rating2.elevation.auto_select(risque.attrib.get('LOC2')) + report.dangerRatings.append(danger_rating2) for resume in cartoucherisque.iter(tag='RESUME'): - report.report_texts.append(pyAvaCore.ReportText('activity_hl', resume.text)) + report.avalancheActivityHighlights = resume.text for stabilite in root.iter(tag='STABILITE'): for texte in stabilite.iter(tag='TEXTE'): - report.report_texts.append(pyAvaCore.ReportText('activity_com', texte.text)) + report.avalancheActivityComment = texte.text for qualite in root.iter(tag='QUALITE'): for texte in qualite.iter(tag='TEXTE'): - report.report_texts.append(pyAvaCore.ReportText('snow_struct_com', texte.text)) + report.snowpackStructureComment = texte.text pm_danger_ratings = [] pm_available = False for cartoucherisque in root.iter(tag='CARTOUCHERISQUE'): + + danger_rating_pre = DangerRatingType() + aspects = [] + for pente in cartoucherisque.iter(tag='PENTE'): + + if pente.get('N') == 'true': + aspects.append('N') + if pente.get('NE') == 'true': + aspects.append('NE') + if pente.get('E') == 'true': + aspects.append('E') + if pente.get('SE') == 'true': + aspects.append('SE') + if pente.get('S') == 'true': + aspects.append('S') + if pente.get('SW') == 'true': + aspects.append('SW') + if pente.get('W') == 'true': + aspects.append('W') + if pente.get('NW') == 'true': + aspects.append('NW') + + # general_problem_valid_elevation = '-' + # report.problem_list.append(pyAvaCore.Problem("general", aspects, general_problem_valid_elevation)) + danger_rating_pre.aspect = aspects + for risque in cartoucherisque.iter(tag='RISQUE'): if not risque.attrib.get('EVOLURISQUE1') == '': pm_available = True - pm_danger_ratings.append(pyAvaCore.DangerMain(int(risque.attrib.get('EVOLURISQUE1')), risque.attrib.get('LOC1'))) + danger_rating_pm = copy.deepcopy(danger_rating_pre) + danger_rating_pm.set_mainValue_int(int(risque.attrib.get('EVOLURISQUE1'))) + danger_rating_pm.elevation.auto_select(risque.attrib.get('LOC1')) + pm_danger_ratings.append(danger_rating_pm) + # pm_danger_ratings.append(pyAvaCore.DangerMain(int(risque.attrib.get('EVOLURISQUE1')), risque.attrib.get('LOC1'))) else: - pm_danger_ratings.append(report.danger_main[0]) + pm_danger_ratings.append(report.dangerRatings[0]) if not risque.attrib.get('EVOLURISQUE2') == '': pm_available = True - pm_danger_ratings.append(pyAvaCore.DangerMain(int(risque.attrib.get('EVOLURISQUE2')), risque.attrib.get('LOC2'))) - elif len(report.danger_main) > 1: - pm_danger_ratings.append(report.danger_main[1]) + danger_rating_pm2 = copy.deepcopy(danger_rating_pre) + danger_rating_pm2.set_mainValue_int(int(risque.attrib.get('EVOLURISQUE2'))) + danger_rating_pm2.elevation.auto_select(risque.attrib.get('LOC2')) + pm_danger_ratings.append(danger_rating_pm2) + elif len(report.dangerRatings) > 1: + pm_danger_ratings.append(report.dangerRatings[1]) - report.report_id = report.valid_regions[0] + '_' + str(report.rep_date.isoformat()) + report.bulletinID = report.regions[0].regionID + '_' + str(report.publicationTime.isoformat()) if pm_available: pm_report = copy.deepcopy(report) - pm_report.predecessor_id = pm_report.report_id - pm_report.report_id += '_PM' - report.validity_end = report.validity_end.replace(hour=12) - pm_report.validity_begin = report.validity_end.replace(hour=12) - pm_report.danger_main = pm_danger_ratings + pm_report.predecessor_id = pm_report.bulletinID + pm_report.bulletinID += '_PM' + report.validTime.endTime = report.validTime.endTime.replace(hour=12) + pm_report.validTime.startTime = report.validTime.endTime.replace(hour=12) + pm_report.dangerRatings = pm_danger_ratings reports.append(pm_report) reports.append(report) return reports + +fr_regions = [ + "FR-01", + "FR-02", + "FR-03", + "FR-04", + "FR-05", + "FR-06", + "FR-09", + "FR-10", + "FR-11", + "FR-07", + "FR-08", + "FR-12", + "FR-14", + "FR-15", + "FR-13", | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/processor_it.py ^ |
@@ -0,0 +1,235 @@ +""" + Copyright (C) 2021 Friedrich Mütschele and other contributors + This file is part of pyAvaCore. + pyAvaCore is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + pyAvaCore is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. +""" +import json +import urllib.request +from datetime import datetime +from datetime import time +from datetime import timedelta +import pytz +import dateutil.parser +import logging +import logging.handlers + +from avacore import pyAvaCore +from avacore.avabulletin import AvaBulletin, DangerRatingType, AvalancheProblemType, AvaCoreCustom, ElevationType, RegionType + + +def process_reports_it(region_id, today=datetime.now(pytz.timezone('Europe/Rome'))): + + ''' + if today == datetime(1, 1, 1, 1, 1, 1): + now = datetime.now(pytz.timezone('Europe/Rome')) + if now.time() > time(17, 0, 1): + today = now.date() + timedelta(days=1) + else: + today = now.date() + ''' + + reports = [] + report = pyAvaCore.AvaBulletin() + + format = 0 + pm_available = False + valid_report = True + + old = False + + p_code, p_zona = it_region_ref[region_id] + p_giorno = '1' + + now = datetime.now(pytz.timezone('Europe/Rome')) + if now.time() > time(16, 0, 0): + p_giorno = '3' + + url = "https://services.aineva.it/Aineva_bollettini/NivoMeteo/ServiziNivo.asmx/getZonePrevisioni?pGiorno='" + p_giorno + "'&pIdZona='" \ + + str(p_zona) + "'&pCode='" + p_code + "'&pIdBollettino=''" + + headers = { + "Content-Type": "application/json; charset=utf-8" + } + + req = urllib.request.Request(url, headers=headers) + logging.info('Fetching %s', req.full_url) + + with urllib.request.urlopen(req) as response: + content = response.read() + + aineva_object = json.loads(content) + + all_text = aineva_object['d'] + details_1x = all_text.split('£') + details_10 = details_1x[0].split('|') + details_11 = details_1x[1].split('|') + details_12 = details_1x[2].split('|') + + report.publicationTime = date_from_report(details_1x[9]) + report.regions.append(RegionType(region_id)) + + report.bulletinID = region_id + '_' + today.isoformat() + + if p_giorno == '1': + report.validTime.startTime = datetime.combine(today, time(17,0)) - timedelta(hours=24) + else: + report.validTime.startTime = datetime.combine(today, time(17,0)) + report.validTime.endTime = report.validTime.startTime + timedelta(hours=24) + + danger_rating = DangerRatingType() + + if (details_10[0][4].isnumeric()): + danger_img_value = int(details_10[0][3] + details_10[0][4]) + elif (details_10[0][3].isnumeric()): + danger_img_value = int(details_10[0][3]) + else: + danger_img_value = -1 + + if danger_img_value != -1: + if danger_img_value < 6: + danger_rating.set_mainValue_int(danger_img_value) + # danger_rating.elevation.auto_select(valid_elevation) + # report.danger_main.append(pyAvaCore.DangerMain(int(details_10[0][3]), '-')) + else: + # More Values should follow here. I don't know all the possible combinations. + if danger_img_value == 12: + danger_rating.set_mainValue_int(2) # Tagesverläuflicher Anstieg von 1 auf 2 + elif danger_img_value == 14: + danger_rating.set_mainValue_int(3) # Tagesverläuflicher Anstieg von 2 auf 3 + elif danger_img_value == 16: + danger_rating.set_mainValue_int(2) # Tagesverläuflicher Wechsel von 2 auf 1 + elif danger_img_value == 17: + danger_rating.set_mainValue_int(4) # Tagesverläuflicher Anstieg von 3 auf 4 + elif danger_img_value == 20: + danger_rating.set_mainValue_int(3) # Tagesverläuflicher Wechsel von 3 auf 2 + + prefix_alti = '' + + if int(details_10[2][3]) in [1, 2, 3]: + prefix_alti = '>' + if int(details_10[2][3]) == 4: + prefix_alti = '<' + elev_data = details_11[2] + if prefix_alti != '' and len(elev_data) < 20: + aspects = [] + general_problem_valid_elevation = ''.join(c for c in elev_data.split('/')[0].split('-')[0] if c.isdigit()) + # ToDo Aspects are missing at the moment + # report.problem_list.append(pyAvaCore.Problem("general", aspects, prefix_alti + general_problem_valid_elevation)) + danger_rating.elevation.auto_select(prefix_alti + general_problem_valid_elevation) + + report.dangerRatings.append(danger_rating) + + av_problem = details_10[3][5:-4].lower() + if av_problem != '': + #report.problem_list.append(av_problem) + problem = AvalancheProblemType() + problem.add_problemType(av_problem) + report.avalancheProblems.append(problem) + + reports.append(report) + + return reports + +def date_from_report(date): + date = dateutil.parser.parse(date, dayfirst=True) + # date = datetime.datetime.strptime(date, '%d/%m/%Y') + return date + +# Only temporary for debug +def process_all_reports_it(region_prefix=''): + all_reports = [] + for region in it_region_ref.keys(): + if not region.startswith(region_prefix): + continue + try: + m_reports = process_reports_it(region) + except Exception as e: # pylint: disable=broad-except + logging.error('Failed to download %s', region, exc_info=e) + + for report in m_reports: + all_reports.append(report) + + return all_reports + + +it_region_ref = { + 'IT-21-VB-03': ['Piemonte', 1], + 'IT-21-VB-02': ['Piemonte', 2], + 'IT-21-VB-01': ['Piemonte', 3], + 'IT-21-VC-01': ['Piemonte', 4], + 'IT-21-TO-03': ['Piemonte', 5], + 'IT-21-TO-01': ['Piemonte', 6], + 'IT-21-TO-04': ['Piemonte', 7], + 'IT-21-TO-02': ['Piemonte', 8], + 'IT-21-CN-03': ['Piemonte', 9], + 'IT-21-CN-01': ['Piemonte', 10], + 'IT-21-CN-02': ['Piemonte', 11], + 'IT-21-CN-04': ['Piemonte', 12], + 'IT-21-CN-05': ['Piemonte', 13], + 'IT-23-AO-A01': ['Aosta', 1], + 'IT-23-AO-A02': ['Aosta', 2], + 'IT-23-AO-A03': ['Aosta', 3], + 'IT-23-AO-A04': ['Aosta', 4], + 'IT-23-AO-A05': ['Aosta', 5], + 'IT-23-AO-B06': ['Aosta', 6], + 'IT-23-AO-B07': ['Aosta', 7], + 'IT-23-AO-B08': ['Aosta', 8], + 'IT-23-AO-B09': ['Aosta', 9], + 'IT-23-AO-B10': ['Aosta', 10], + 'IT-23-AO-B11': ['Aosta', 11], + 'IT-23-AO-C12': ['Aosta', 12], + 'IT-23-AO-C13': ['Aosta', 13], + 'IT-23-AO-D14': ['Aosta', 14], + 'IT-23-AO-D15': ['Aosta', 15], + 'IT-23-AO-D16': ['Aosta', 16], + 'IT-23-AO-D17': ['Aosta', 17], + 'IT-23-AO-D18': ['Aosta', 18], + 'IT-23-AO-D19': ['Aosta', 19], + 'IT-23-AO-D20': ['Aosta', 20], + 'IT-23-AO-C21': ['Aosta', 21], + 'IT-23-AO-D22': ['Aosta', 22], | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/processor_norway.py ^ |
@@ -0,0 +1,120 @@ +""" + Copyright (C) 2021 Friedrich Mütschele and other contributors + This file is part of pyAvaCore. + pyAvaCore is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + pyAvaCore is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. +""" +import json +import urllib.request +from datetime import datetime +from datetime import timedelta +from datetime import time +import pytz +import dateutil.parser +import logging + +from avacore.avabulletin import AvaBulletin, DangerRatingType, AvalancheProblemType, AvaCoreCustom, ElevationType, RegionType + + +def process_reports_no(region_id): + + langkey = '2' # Needs to be set by language 1 -> Norwegian, 2 -> Englisch (parts of report) + + url = "https://api01.nve.no/hydrology/forecast/avalanche/v6.0.0/api/AvalancheWarningByRegion/Detail/" + region_id[3:] + "/" + langkey + "/" + + headers = { + "Content-Type": "application/json; charset=utf-8" + } + + req = urllib.request.Request(url, headers=headers) + + logging.info('Fetching %s', req.full_url) + with urllib.request.urlopen(req) as response: + content = response.read() + + varsom_report = json.loads(content) + + reports = get_reports_fromjson(region_id, varsom_report) + + return reports + + +def get_reports_fromjson(region_id, varsom_report, fetch_time_dependant=True): + reports = [] + report = AvaBulletin() + + current = 0 + now = datetime.now(pytz.timezone('Europe/Oslo')) + if fetch_time_dependant and now.time() > time(17, 0, 0): + current = 1 + + report.regions.append(RegionType(region_id)) + report.publicationTime = dateutil.parser.parse(varsom_report[current]['PublishTime'].split('.')[0]) + report.bulletinID = (region_id + "_" + str(report.publicationTime)) + + report.validTime.startTime = dateutil.parser.parse(varsom_report[current]['ValidFrom']) + report.validTime.endTime = dateutil.parser.parse(varsom_report[current]['ValidTo']) + + # report.danger_main.append(pyAvaCore.DangerMain(int(varsom_report[current]['DangerLevel']), '-')) + + danger_rating = DangerRatingType() + danger_rating.set_mainValue_int(int(varsom_report[current]['DangerLevel'])) + + report.dangerRatings.append(danger_rating) + + for problem in varsom_report[current]['AvalancheProblems']: + problem_type = '' + if problem['AvalancheProblemTypeId'] == 7: + problem_type = 'new_snow' + elif problem['AvalancheProblemTypeId'] == 10: + problem_type = 'wind_drifted_snow' + elif problem['AvalancheProblemTypeId'] == 30: + problem_type = 'persistent_weak_layers' + elif problem['AvalancheProblemTypeId'] == 45: + problem_type = 'wet_snow' + elif problem['AvalancheProblemTypeId'] == 0: #??? + problem_type = 'gliding_snow' + elif problem['AvalancheProblemTypeId'] == 0: #??? + problem_type = 'favourable_situation' + + aspects = ['N','NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'] + aspect_list = [] + + for i, c in enumerate(problem['ValidExpositions']): + if c == '1': + aspect_list.append(aspects[i]) + + elev_prefix = '' + if problem['ExposedHeightFill'] == 1: + elev_prefix = '>' + elif problem['ExposedHeightFill'] == 2: + elev_prefix = '<' + + if not problem_type == '': + problem_danger_rating = DangerRatingType() + problem_danger_rating.aspect = aspect_list + problem_danger_rating.elevation.auto_select(elev_prefix + str(problem['ExposedHeight1'])) + problem = AvalancheProblemType() + problem.dangerRating = problem_danger_rating + problem.problemType = problem_type + report.avalancheProblems.append(problem) + + report.avalancheActivityHighlights = varsom_report[current]['MainText'] + report.avalancheActivityComment = varsom_report[current]['AvalancheDanger'] + waek_layers = '' + if varsom_report[0]['CurrentWeaklayers'] != None: + waek_layers = '\n' + varsom_report[0]['CurrentWeaklayers'] + report.snowpackStructureComment = varsom_report[current]['SnowSurface'] + waek_layers + report.tendency.tendencyComment = varsom_report[current+1]['MainText'] + + reports.append(report) + + return reports | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/pyAvaCore.py ^ |
@@ -5,14 +5,18 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - pyAvaCore is distributed in the hope that it will be useful, + pyAvaCore is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with pyAvaCore. If not, see <http://www.gnu.org/licenses/>. """ + +import configparser from datetime import datetime +from urllib import parse +from urllib.parse import urlparse from urllib.request import urlopen from pathlib import Path import re @@ -20,15 +24,22 @@ import logging import typing -from avacore.processor_fr import process_reports_fr +from avacore.avabulletin import AvaBulletin +from avacore.processor_fr import process_reports_fr, process_all_reports_fr from avacore.processor_ch import process_reports_ch -from avacore.processor_caaml import parse_xml, parse_xml_bavaria, parse_xml_vorarlberg +from avacore.processor_it import process_reports_it, process_all_reports_it +from avacore.processor_norway import process_reports_no +from avacore.processor_caamlv5 import parse_xml, parse_xml_bavaria, parse_xml_vorarlberg + +config = configparser.ConfigParser() +config.read(f'{__file__}.ini') ### XML-Helpers def get_xml_as_et(url): - - '''returns the xml-file from url as ElementTree''' + ''' + returns the xml-file from url as ElementTree + ''' with urlopen(url) as response: response_content = response.read() @@ -37,268 +48,67 @@ import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET - if "VORARLBERG" in url.upper(): - root = ET.fromstring(response_content.decode('latin-1')) - else: - root = ET.fromstring(response_content.decode('utf-8')) + root = ET.fromstring(response_content.decode('utf-8')) except Exception as r_e: print('error parsing ElementTree: ' + str(r_e)) return root def get_reports(region_id, local='en', cache_path=str(Path('cache')), from_cache=False): - - '''returns array of AvaReports for requested region_id and provider information''' + ''' + returns array of AvaReports for requested region_id and provider information + ''' url = '' if region_id.startswith("FR"): - logging.info('Fetching %s', region_id) - reports = process_reports_fr(region_id) + if region_id == "FR": + reports = process_all_reports_fr() + else: + reports = process_reports_fr(region_id) provider = "Rédigé par Météo-France avec la contribution des observateurs du réseau nivo-météorologique. Partenariat : "\ + "ANMSM (Maires de Stations de Montagne), DSF (Domaines Skiables de France), "\ + "ADSP (Directeurs de Pistes et de la Sécurité des Stations de Sports d'Hiver) et autres acteurs de la montagne." elif region_id.startswith("CH"): reports = process_reports_ch(lang=local, path=cache_path, cached=from_cache) - provider = "WSL Institute for Snow and Avalanche Research SLF: www.slf.ch" + url, provider = get_report_url(region_id, local) + elif region_id.startswith('IT-') and not region_id.startswith('IT-32-BZ') and not region_id.startswith('IT-32-TN'): + if region_id == 'IT-AINEVA': + reports = process_all_reports_it() + elif region_id == 'IT-21' or region_id == 'IT-23' or region_id == 'IT-25' or region_id == 'IT-34' or region_id == 'IT-36' or region_id == 'IT-57': + reports = process_all_reports_it(region_prefix=region_id) + else: + reports = process_reports_it(region_id) + provider = "AINEVA: aineva.it" + elif region_id.startswith("NO"): + reports = process_reports_no(region_id) + provider = "varsom.no" else: url, provider = get_report_url(region_id, local) logging.info('Fetching %s', url) root = get_xml_as_et(url) - if region_id.startswith("AT8") or region_id.startswith("AT-08"): - reports = parse_xml_vorarlberg(root) - elif region_id.startswith("BY"): - reports = parse_xml_bavaria(root, "bavaria") - elif region_id.startswith("SI"): + + if region_id.startswith("SI"): reports = parse_xml_bavaria(root, "slovenia") else: reports = parse_xml(root) return reports, provider, url -def try_parse_datetime(datetime_string): - - '''try to parse a datetime from string with matching format''' - - try: - r_datetime = datetime.strptime(datetime_string, '%Y-%m-%dT%XZ') - except: - try: - r_datetime = datetime.strptime(datetime_string[:19], '%Y-%m-%dT%X') # 2019-04-30T15:55:29+01:00 - except: - r_datetime = datetime.now() - return r_datetime - def get_report_url(region_id, local=''): #You can ignore "provider" return value by url, _ = getReportsUrl - - '''returns the valid URL for requested region_id''' - - # Euregio-Region Tirol, Südtirol, Trentino - if ("AT-07" in region_id) or ("IT-32-BZ" in region_id) or ("IT-32-TN" in region_id): - url = "https://avalanche.report/albina_files/latest/en.xml" - provider = "The displayed information is provided by an open data API on https://avalanche.report by: "\ - "Avalanche Warning Service Tirol, Avalanche Warning Service Südtirol, Avalanche Warning Service Trentino." - if "DE" in local.upper(): - url = "https://avalanche.report/albina_files/latest/de.xml" - provider = "Die dargestellten Informationen werden über eine API auf https://avalanche.report abgefragt. Diese wird "\ - "bereitgestellt von: Avalanche Warning Service Tirol, Avalanche Warning Service Südtirol, Avalanche Warning Service Trentino." - if "FR" in local.upper(): - url = "https://avalanche.report/albina_files/latest/fr.xml" - provider = "The displayed information is provided by an open data API on https://avalanche.report by: "\ - "Avalanche Warning Service Tirol, Avalanche Warning Service Südtirol, Avalanche Warning Service Trentino." - - # Kärnten - if region_id.startswith("AT-02"): - url = "https://www.avalanche-warnings.eu/public/kaernten/caaml" - provider = "Die dargestellten Informationen werden über eine API auf https://www.avalanche-warnings.eu abgefragt. Diese wird "\ - "bereitgestellt vom: Lawinenwarndienst Kärnten (https://lawinenwarndienst.ktn.gv.at)." - - # Salzburg - if region_id.startswith("AT-05"): - url = "https://www.avalanche-warnings.eu/public/salzburg/caaml/en" - provider = "Die dargestellten Informationen werden über eine API auf https://www.avalanche-warnings.eu abgefragt. Diese wird "\ - "bereitgestellt vom: Lawinenwarndienst Salzburg (https://lawine.salzburg.at)." - if "DE" in local.upper(): - url = "https://www.avalanche-warnings.eu/public/salzburg/caaml" - provider = "The displayed information is provided by an open data API on https://www.avalanche-warnings.eu by: "\ - "Avalanche Warning Service Salzburg (https://lawine.salzburg.at)." - - # Steiermark - if region_id.startswith("AT-06"): - url = "https://www.avalanche-warnings.eu/public/steiermark/caaml/en" - provider = "The displayed information is provided by an open data API on https://www.avalanche-warnings.eu by: "\ - "Avalanche Warning Service Steiermark (https://www.lawine-steiermark.at)." - if "DE" in local.upper(): - url = "https://www.avalanche-warnings.eu/public/steiermark/caaml" - provider = "Die dargestellten Informationen werden über eine API auf https://www.avalanche-warnings.eu abgefragt. "\ - "Diese wird bereitgestellt vom: Lawinenwarndienst Steiermark (https://www.lawine-steiermark.at)." - - # Oberösterreich - if region_id.startswith("AT-04"): - url = "https://www.avalanche-warnings.eu/public/oberoesterreich/caaml" - provider = "Die dargestellten Informationen werden über eine API auf https://www.avalanche-warnings.eu abgefragt. Diese wird "\ - "bereitgestellt vom: Lawinenwarndienst Oberösterreich (https://www.land-oberoesterreich.gv.at/lawinenwarndienst.htm)." - - # Niederösterreich - if region_id.startswith("AT-03"): - url = "https://www.avalanche-warnings.eu/public/niederoesterreich/caaml" - provider = "Die dargestellten Informationen werden über eine API auf https://www.avalanche-warnings.eu abgefragt. Diese wird "\ - "bereitgestellt vom: Lawinenwarndienst Niederösterreich (https://www.lawinenwarndienst-niederoesterreich.at)." - - #Vorarlberg - if region_id.startswith("AT8") or region_id.startswith("AT-08"): - url = "https://warndienste.cnv.at/dibos/lawine_en/avalanche_bulletin_vorarlberg_en.xml" - provider = "The displayed information is provided by an open data API on https://warndienste.cnv.at by: "\ - "Landeswarnzentrale Vorarlberg - http://www.vorarlberg.at/lawine" - if "DE" in local.upper(): - url = "http://warndienste.cnv.at/dibos/lawine/avalanche_bulletin_vorarlberg_de.xml" - provider = "Die dargestellten Informationen werden über eine API auf https://warndienste.cnv.at abgefragt. Diese wird "\ - "bereitgestellt von der Landeswarnzentrale Vorarlberg - http://www.vorarlberg.at/lawine" - - #Bavaria - if region_id.startswith("BY"): - url = "https://www.lawinenwarndienst-bayern.de/download/lagebericht/caaml_en.xml" - provider = "The displayed ihe displayed information is provided by an open data API on https://www.lawinenwarndienst-bayern.de/ "\ - "by: Avalanche warning centre at the Bavarian State Office for the Environment - https://www.lawinenwarndienst-bayern.de/" - if "DE" in local.upper(): - url = "https://www.lawinenwarndienst-bayern.de/download/lagebericht/caaml.xml" - provider = "Die dargestellten Informationen werden über eine API auf https://www.lawinenwarndienst-bayern.de abgefragt. "\ - "Diese wird bereitgestellt von der Lawinenwarnzentrale Bayern (https://www.lawinenwarndienst-bayern.de)." - | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/avacore/pyAvaCore.py.ini ^ |
@@ -0,0 +1,63 @@ +[AT-07] +name = Lawinenwarndienst Tirol +url = https://avalanche.report/albina_files/latest/en.xml +url.DE = https://avalanche.report/albina_files/latest/de.xml +url.FR = https://avalanche.report/albina_files/latest/fr.xml + +[IT-32-BZ] +name = Lawinenwarndienst Alto Adige/Südtirol +url = https://avalanche.report/albina_files/latest/en.xml +url.DE = https://avalanche.report/albina_files/latest/de.xml +url.FR = https://avalanche.report/albina_files/latest/fr.xml + +[IT-32-TN] +name = Lawinenwarndienst Trentino +url = https://avalanche.report/albina_files/latest/en.xml +url.DE = https://avalanche.report/albina_files/latest/de.xml +url.FR = https://avalanche.report/albina_files/latest/fr.xml + +[AT-02] +name = Lawinenwarndienst Kärnten +url = https://www.avalanche-warnings.eu/public/kaernten/caaml + +[AT-05] +name = Lawinenwarndienst Salzburg +url = https://www.avalanche-warnings.eu/public/salzburg/caaml/en +url.DE = https://www.avalanche-warnings.eu/public/salzburg/caaml + +[AT-06] +name = Lawinenwarndienst Steiermark +url = https://www.avalanche-warnings.eu/public/steiermark/caaml/en +url.DE = https://www.avalanche-warnings.eu/public/steiermark/caaml + +[AT-04] +name = Lawinenwarndienst Oberösterreich +url = https://www.avalanche-warnings.eu/public/oberoesterreich/caaml + +[AT-03] +name = Lawinenwarndienst Niederösterreich +url = https://www.avalanche-warnings.eu/public/niederoesterreich/caaml + +[AT-08] +name = Landeswarnzentrale Vorarlberg +url = https://www.avalanche-warnings.eu/public/vorarlberg/caaml/en +url.DE = https://www.avalanche-warnings.eu/public/vorarlberg/caaml + +[CH] +name = WSL Institute for Snow and Avalanche Research SLF +url = https://www.slf.ch/avalanche/mobile/bulletin_en.zip + +[DE-BY] +name = Lawinenwarnzentrale Bayern +url = https://www.avalanche-warnings.eu/public/bayern/caaml/en +url.DE = https://www.avalanche-warnings.eu/public/bayern/caaml + +[ES-CT-L] +name = Conselh Generau d'Aran +url = http://statics.lauegi.report/albina_files_local/latest/en.xml +url.DE = http://statics.lauegi.report/albina_files_local/latest/de.xml +url.FR = http://statics.lauegi.report/albina_files_local/latest/fr.xml + +[SI] +name = Avalanche Warning Service Slovenia +url = https://meteo.arso.gov.si/uploads/probase/www/avalanche/text/sl/bulletinAvalanche.xml | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/__init__.py ^ |
@@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +try: + from ._version import version as __version__ +except ImportError: + __version__ = 'unknown' + +__all__ = ['easter', 'parser', 'relativedelta', 'rrule', 'tz', + 'utils', 'zoneinfo'] | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/_common.py ^ |
@@ -0,0 +1,43 @@ +""" +Common code used in multiple modules. +""" + + +class weekday(object): + __slots__ = ["weekday", "n"] + + def __init__(self, weekday, n=None): + self.weekday = weekday + self.n = n + + def __call__(self, n): + if n == self.n: + return self + else: + return self.__class__(self.weekday, n) + + def __eq__(self, other): + try: + if self.weekday != other.weekday or self.n != other.n: + return False + except AttributeError: + return False + return True + + def __hash__(self): + return hash(( + self.weekday, + self.n, + )) + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + s = ("MO", "TU", "WE", "TH", "FR", "SA", "SU")[self.weekday] + if not self.n: + return s + else: + return "%s(%+d)" % (s, self.n) + +# vim:ts=4:sw=4:et | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/_version.py ^ |
@@ -0,0 +1,5 @@ +# coding: utf-8 +# file generated by setuptools_scm +# don't change, don't track in version control +version = '2.8.2' +version_tuple = (2, 8, 2) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/easter.py ^ |
@@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +""" +This module offers a generic Easter computing method for any given year, using +Western, Orthodox or Julian algorithms. +""" + +import datetime + +__all__ = ["easter", "EASTER_JULIAN", "EASTER_ORTHODOX", "EASTER_WESTERN"] + +EASTER_JULIAN = 1 +EASTER_ORTHODOX = 2 +EASTER_WESTERN = 3 + + +def easter(year, method=EASTER_WESTERN): + """ + This method was ported from the work done by GM Arts, + on top of the algorithm by Claus Tondering, which was + based in part on the algorithm of Ouding (1940), as + quoted in "Explanatory Supplement to the Astronomical + Almanac", P. Kenneth Seidelmann, editor. + + This algorithm implements three different Easter + calculation methods: + + 1. Original calculation in Julian calendar, valid in + dates after 326 AD + 2. Original method, with date converted to Gregorian + calendar, valid in years 1583 to 4099 + 3. Revised method, in Gregorian calendar, valid in + years 1583 to 4099 as well + + These methods are represented by the constants: + + * ``EASTER_JULIAN = 1`` + * ``EASTER_ORTHODOX = 2`` + * ``EASTER_WESTERN = 3`` + + The default method is method 3. + + More about the algorithm may be found at: + + `GM Arts: Easter Algorithms <http://www.gmarts.org/index.php?go=415>`_ + + and + + `The Calendar FAQ: Easter <https://www.tondering.dk/claus/cal/easter.php>`_ + + """ + + if not (1 <= method <= 3): + raise ValueError("invalid method") + + # g - Golden year - 1 + # c - Century + # h - (23 - Epact) mod 30 + # i - Number of days from March 21 to Paschal Full Moon + # j - Weekday for PFM (0=Sunday, etc) + # p - Number of days from March 21 to Sunday on or before PFM + # (-6 to 28 methods 1 & 3, to 56 for method 2) + # e - Extra days to add for method 2 (converting Julian + # date to Gregorian date) + + y = year + g = y % 19 + e = 0 + if method < 3: + # Old method + i = (19*g + 15) % 30 + j = (y + y//4 + i) % 7 + if method == 2: + # Extra dates to convert Julian to Gregorian date + e = 10 + if y > 1600: + e = e + y//100 - 16 - (y//100 - 16)//4 + else: + # New method + c = y//100 + h = (c - c//4 - (8*c + 13)//25 + 19*g + 15) % 30 + i = h - (h//28)*(1 - (h//28)*(29//(h + 1))*((21 - g)//11)) + j = (y + y//4 + i + 2 - c + c//4) % 7 + + # p can be from -6 to 56 corresponding to dates 22 March to 23 May + # (later dates apply to method 2, although 23 May never actually occurs) + p = i - j + e + d = 1 + (p + 27 + (p + 6)//40) % 31 + m = 3 + (p + 26)//30 + return datetime.date(int(y), int(m), int(d)) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/parser/__init__.py ^ |
@@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +from ._parser import parse, parser, parserinfo, ParserError +from ._parser import DEFAULTPARSER, DEFAULTTZPARSER +from ._parser import UnknownTimezoneWarning + +from ._parser import __doc__ + +from .isoparser import isoparser, isoparse + +__all__ = ['parse', 'parser', 'parserinfo', + 'isoparse', 'isoparser', + 'ParserError', + 'UnknownTimezoneWarning'] + + +### +# Deprecate portions of the private interface so that downstream code that +# is improperly relying on it is given *some* notice. + + +def __deprecated_private_func(f): + from functools import wraps + import warnings + + msg = ('{name} is a private function and may break without warning, ' + 'it will be moved and or renamed in future versions.') + msg = msg.format(name=f.__name__) + + @wraps(f) + def deprecated_func(*args, **kwargs): + warnings.warn(msg, DeprecationWarning) + return f(*args, **kwargs) + + return deprecated_func + +def __deprecate_private_class(c): + import warnings + + msg = ('{name} is a private class and may break without warning, ' + 'it will be moved and or renamed in future versions.') + msg = msg.format(name=c.__name__) + + class private_class(c): + __doc__ = c.__doc__ + + def __init__(self, *args, **kwargs): + warnings.warn(msg, DeprecationWarning) + super(private_class, self).__init__(*args, **kwargs) + + private_class.__name__ = c.__name__ + + return private_class + + +from ._parser import _timelex, _resultbase +from ._parser import _tzparser, _parsetz + +_timelex = __deprecate_private_class(_timelex) +_tzparser = __deprecate_private_class(_tzparser) +_resultbase = __deprecate_private_class(_resultbase) +_parsetz = __deprecated_private_func(_parsetz) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/parser/_parser.py ^ |
@@ -0,0 +1,1613 @@ +# -*- coding: utf-8 -*- +""" +This module offers a generic date/time string parser which is able to parse +most known formats to represent a date and/or time. + +This module attempts to be forgiving with regards to unlikely input formats, +returning a datetime object even for dates which are ambiguous. If an element +of a date/time stamp is omitted, the following rules are applied: + +- If AM or PM is left unspecified, a 24-hour clock is assumed, however, an hour + on a 12-hour clock (``0 <= hour <= 12``) *must* be specified if AM or PM is + specified. +- If a time zone is omitted, a timezone-naive datetime is returned. + +If any other elements are missing, they are taken from the +:class:`datetime.datetime` object passed to the parameter ``default``. If this +results in a day number exceeding the valid number of days per month, the +value falls back to the end of the month. + +Additional resources about date/time string formats can be found below: + +- `A summary of the international standard date and time notation + <https://www.cl.cam.ac.uk/~mgk25/iso-time.html>`_ +- `W3C Date and Time Formats <https://www.w3.org/TR/NOTE-datetime>`_ +- `Time Formats (Planetary Rings Node) <https://pds-rings.seti.org:443/tools/time_formats.html>`_ +- `CPAN ParseDate module + <https://metacpan.org/pod/release/MUIR/Time-modules-2013.0912/lib/Time/ParseDate.pm>`_ +- `Java SimpleDateFormat Class + <https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html>`_ +""" +from __future__ import unicode_literals + +import datetime +import re +import string +import time +import warnings + +from calendar import monthrange +from io import StringIO + +import six +from six import integer_types, text_type + +from decimal import Decimal + +from warnings import warn + +from .. import relativedelta +from .. import tz + +__all__ = ["parse", "parserinfo", "ParserError"] + + +# TODO: pandas.core.tools.datetimes imports this explicitly. Might be worth +# making public and/or figuring out if there is something we can +# take off their plate. +class _timelex(object): + # Fractional seconds are sometimes split by a comma + _split_decimal = re.compile("([.,])") + + def __init__(self, instream): + if isinstance(instream, (bytes, bytearray)): + instream = instream.decode() + + if isinstance(instream, text_type): + instream = StringIO(instream) + elif getattr(instream, 'read', None) is None: + raise TypeError('Parser must be a string or character stream, not ' + '{itype}'.format(itype=instream.__class__.__name__)) + + self.instream = instream + self.charstack = [] + self.tokenstack = [] + self.eof = False + + def get_token(self): + """ + This function breaks the time string into lexical units (tokens), which + can be parsed by the parser. Lexical units are demarcated by changes in + the character set, so any continuous string of letters is considered + one unit, any continuous string of numbers is considered one unit. + + The main complication arises from the fact that dots ('.') can be used + both as separators (e.g. "Sep.20.2009") or decimal points (e.g. + "4:30:21.447"). As such, it is necessary to read the full context of + any dot-separated strings before breaking it into tokens; as such, this + function maintains a "token stack", for when the ambiguous context + demands that multiple tokens be parsed at once. + """ + if self.tokenstack: + return self.tokenstack.pop(0) + + seenletters = False + token = None + state = None + + while not self.eof: + # We only realize that we've reached the end of a token when we + # find a character that's not part of the current token - since + # that character may be part of the next token, it's stored in the + # charstack. + if self.charstack: + nextchar = self.charstack.pop(0) + else: + nextchar = self.instream.read(1) + while nextchar == '\x00': + nextchar = self.instream.read(1) + + if not nextchar: + self.eof = True + break + elif not state: + # First character of the token - determines if we're starting + # to parse a word, a number or something else. + token = nextchar + if self.isword(nextchar): + state = 'a' + elif self.isnum(nextchar): + state = '0' + elif self.isspace(nextchar): + token = ' ' + break # emit token + else: + break # emit token + elif state == 'a': + # If we've already started reading a word, we keep reading + # letters until we find something that's not part of a word. + seenletters = True + if self.isword(nextchar): + token += nextchar + elif nextchar == '.': + token += nextchar + state = 'a.' + else: + self.charstack.append(nextchar) + break # emit token + elif state == '0': + # If we've already started reading a number, we keep reading + # numbers until we find something that doesn't fit. + if self.isnum(nextchar): + token += nextchar + elif nextchar == '.' or (nextchar == ',' and len(token) >= 2): + token += nextchar + state = '0.' + else: + self.charstack.append(nextchar) + break # emit token + elif state == 'a.': + # If we've seen some letters and a dot separator, continue + # parsing, and the tokens will be broken up later. + seenletters = True + if nextchar == '.' or self.isword(nextchar): + token += nextchar + elif self.isnum(nextchar) and token[-1] == '.': + token += nextchar + state = '0.' + else: + self.charstack.append(nextchar) + break # emit token + elif state == '0.': + # If we've seen at least one dot separator, keep going, we'll + # break up the tokens later. + if nextchar == '.' or self.isnum(nextchar): + token += nextchar + elif self.isword(nextchar) and token[-1] == '.': + token += nextchar + state = 'a.' + else: + self.charstack.append(nextchar) + break # emit token + + if (state in ('a.', '0.') and (seenletters or token.count('.') > 1 or + token[-1] in '.,')): + l = self._split_decimal.split(token) + token = l[0] + for tok in l[1:]: + if tok: + self.tokenstack.append(tok) + + if state == '0.' and token.count('.') == 0: + token = token.replace(',', '.') + + return token + + def __iter__(self): + return self + + def __next__(self): + token = self.get_token() + if token is None: + raise StopIteration + + return token + + def next(self): + return self.__next__() # Python 2.x support + + @classmethod | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/parser/isoparser.py ^ |
@@ -0,0 +1,416 @@ +# -*- coding: utf-8 -*- +""" +This module offers a parser for ISO-8601 strings + +It is intended to support all valid date, time and datetime formats per the +ISO-8601 specification. + +..versionadded:: 2.7.0 +""" +from datetime import datetime, timedelta, time, date +import calendar +from dateutil import tz + +from functools import wraps + +import re +import six + +__all__ = ["isoparse", "isoparser"] + + +def _takes_ascii(f): + @wraps(f) + def func(self, str_in, *args, **kwargs): + # If it's a stream, read the whole thing + str_in = getattr(str_in, 'read', lambda: str_in)() + + # If it's unicode, turn it into bytes, since ISO-8601 only covers ASCII + if isinstance(str_in, six.text_type): + # ASCII is the same in UTF-8 + try: + str_in = str_in.encode('ascii') + except UnicodeEncodeError as e: + msg = 'ISO-8601 strings should contain only ASCII characters' + six.raise_from(ValueError(msg), e) + + return f(self, str_in, *args, **kwargs) + + return func + + +class isoparser(object): + def __init__(self, sep=None): + """ + :param sep: + A single character that separates date and time portions. If + ``None``, the parser will accept any single character. + For strict ISO-8601 adherence, pass ``'T'``. + """ + if sep is not None: + if (len(sep) != 1 or ord(sep) >= 128 or sep in '0123456789'): + raise ValueError('Separator must be a single, non-numeric ' + + 'ASCII character') + + sep = sep.encode('ascii') + + self._sep = sep + + @_takes_ascii + def isoparse(self, dt_str): + """ + Parse an ISO-8601 datetime string into a :class:`datetime.datetime`. + + An ISO-8601 datetime string consists of a date portion, followed + optionally by a time portion - the date and time portions are separated + by a single character separator, which is ``T`` in the official + standard. Incomplete date formats (such as ``YYYY-MM``) may *not* be + combined with a time portion. + + Supported date formats are: + + Common: + + - ``YYYY`` + - ``YYYY-MM`` or ``YYYYMM`` + - ``YYYY-MM-DD`` or ``YYYYMMDD`` + + Uncommon: + + - ``YYYY-Www`` or ``YYYYWww`` - ISO week (day defaults to 0) + - ``YYYY-Www-D`` or ``YYYYWwwD`` - ISO week and day + + The ISO week and day numbering follows the same logic as + :func:`datetime.date.isocalendar`. + + Supported time formats are: + + - ``hh`` + - ``hh:mm`` or ``hhmm`` + - ``hh:mm:ss`` or ``hhmmss`` + - ``hh:mm:ss.ssssss`` (Up to 6 sub-second digits) + + Midnight is a special case for `hh`, as the standard supports both + 00:00 and 24:00 as a representation. The decimal separator can be + either a dot or a comma. + + + .. caution:: + + Support for fractional components other than seconds is part of the + ISO-8601 standard, but is not currently implemented in this parser. + + Supported time zone offset formats are: + + - `Z` (UTC) + - `±HH:MM` + - `±HHMM` + - `±HH` + + Offsets will be represented as :class:`dateutil.tz.tzoffset` objects, + with the exception of UTC, which will be represented as + :class:`dateutil.tz.tzutc`. Time zone offsets equivalent to UTC (such + as `+00:00`) will also be represented as :class:`dateutil.tz.tzutc`. + + :param dt_str: + A string or stream containing only an ISO-8601 datetime string + + :return: + Returns a :class:`datetime.datetime` representing the string. + Unspecified components default to their lowest value. + + .. warning:: + + As of version 2.7.0, the strictness of the parser should not be + considered a stable part of the contract. Any valid ISO-8601 string + that parses correctly with the default settings will continue to + parse correctly in future versions, but invalid strings that + currently fail (e.g. ``2017-01-01T00:00+00:00:00``) are not + guaranteed to continue failing in future versions if they encode + a valid date. + + .. versionadded:: 2.7.0 + """ + components, pos = self._parse_isodate(dt_str) + + if len(dt_str) > pos: + if self._sep is None or dt_str[pos:pos + 1] == self._sep: + components += self._parse_isotime(dt_str[pos + 1:]) + else: + raise ValueError('String contains unknown ISO components') + + if len(components) > 3 and components[3] == 24: + components[3] = 0 + return datetime(*components) + timedelta(days=1) + + return datetime(*components) + + @_takes_ascii + def parse_isodate(self, datestr): + """ + Parse the date portion of an ISO string. + + :param datestr: + The string portion of an ISO string, without a separator + + :return: + Returns a :class:`datetime.date` object + """ + components, pos = self._parse_isodate(datestr) + if pos < len(datestr): + raise ValueError('String contains unknown ISO ' + + 'components: {!r}'.format(datestr.decode('ascii'))) + return date(*components) + + @_takes_ascii + def parse_isotime(self, timestr): + """ + Parse the time portion of an ISO string. + + :param timestr: + The time portion of an ISO string, without a separator + + :return: + Returns a :class:`datetime.time` object + """ + components = self._parse_isotime(timestr) + if components[0] == 24: + components[0] = 0 + return time(*components) + + @_takes_ascii + def parse_tzstr(self, tzstr, zero_as_utc=True): + """ + Parse a valid ISO time zone string. + + See :func:`isoparser.isoparse` for details on supported formats. + + :param tzstr: + A string representing an ISO time zone offset + + :param zero_as_utc: + Whether to return :class:`dateutil.tz.tzutc` for zero-offset zones + + :return: + Returns :class:`dateutil.tz.tzoffset` for offsets and + :class:`dateutil.tz.tzutc` for ``Z`` and (if ``zero_as_utc`` is + specified) offsets equivalent to UTC. + """ + return self._parse_tzstr(tzstr, zero_as_utc=zero_as_utc) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/relativedelta.py ^ |
@@ -0,0 +1,599 @@ +# -*- coding: utf-8 -*- +import datetime +import calendar + +import operator +from math import copysign + +from six import integer_types +from warnings import warn + +from ._common import weekday + +MO, TU, WE, TH, FR, SA, SU = weekdays = tuple(weekday(x) for x in range(7)) + +__all__ = ["relativedelta", "MO", "TU", "WE", "TH", "FR", "SA", "SU"] + + +class relativedelta(object): + """ + The relativedelta type is designed to be applied to an existing datetime and + can replace specific components of that datetime, or represents an interval + of time. + + It is based on the specification of the excellent work done by M.-A. Lemburg + in his + `mx.DateTime <https://www.egenix.com/products/python/mxBase/mxDateTime/>`_ extension. + However, notice that this type does *NOT* implement the same algorithm as + his work. Do *NOT* expect it to behave like mx.DateTime's counterpart. + + There are two different ways to build a relativedelta instance. The + first one is passing it two date/datetime classes:: + + relativedelta(datetime1, datetime2) + + The second one is passing it any number of the following keyword arguments:: + + relativedelta(arg1=x,arg2=y,arg3=z...) + + year, month, day, hour, minute, second, microsecond: + Absolute information (argument is singular); adding or subtracting a + relativedelta with absolute information does not perform an arithmetic + operation, but rather REPLACES the corresponding value in the + original datetime with the value(s) in relativedelta. + + years, months, weeks, days, hours, minutes, seconds, microseconds: + Relative information, may be negative (argument is plural); adding + or subtracting a relativedelta with relative information performs + the corresponding arithmetic operation on the original datetime value + with the information in the relativedelta. + + weekday: + One of the weekday instances (MO, TU, etc) available in the + relativedelta module. These instances may receive a parameter N, + specifying the Nth weekday, which could be positive or negative + (like MO(+1) or MO(-2)). Not specifying it is the same as specifying + +1. You can also use an integer, where 0=MO. This argument is always + relative e.g. if the calculated date is already Monday, using MO(1) + or MO(-1) won't change the day. To effectively make it absolute, use + it in combination with the day argument (e.g. day=1, MO(1) for first + Monday of the month). + + leapdays: + Will add given days to the date found, if year is a leap + year, and the date found is post 28 of february. + + yearday, nlyearday: + Set the yearday or the non-leap year day (jump leap days). + These are converted to day/month/leapdays information. + + There are relative and absolute forms of the keyword + arguments. The plural is relative, and the singular is + absolute. For each argument in the order below, the absolute form + is applied first (by setting each attribute to that value) and + then the relative form (by adding the value to the attribute). + + The order of attributes considered when this relativedelta is + added to a datetime is: + + 1. Year + 2. Month + 3. Day + 4. Hours + 5. Minutes + 6. Seconds + 7. Microseconds + + Finally, weekday is applied, using the rule described above. + + For example + + >>> from datetime import datetime + >>> from dateutil.relativedelta import relativedelta, MO + >>> dt = datetime(2018, 4, 9, 13, 37, 0) + >>> delta = relativedelta(hours=25, day=1, weekday=MO(1)) + >>> dt + delta + datetime.datetime(2018, 4, 2, 14, 37) + + First, the day is set to 1 (the first of the month), then 25 hours + are added, to get to the 2nd day and 14th hour, finally the + weekday is applied, but since the 2nd is already a Monday there is + no effect. + + """ + + def __init__(self, dt1=None, dt2=None, + years=0, months=0, days=0, leapdays=0, weeks=0, + hours=0, minutes=0, seconds=0, microseconds=0, + year=None, month=None, day=None, weekday=None, + yearday=None, nlyearday=None, + hour=None, minute=None, second=None, microsecond=None): + + if dt1 and dt2: + # datetime is a subclass of date. So both must be date + if not (isinstance(dt1, datetime.date) and + isinstance(dt2, datetime.date)): + raise TypeError("relativedelta only diffs datetime/date") + + # We allow two dates, or two datetimes, so we coerce them to be + # of the same type + if (isinstance(dt1, datetime.datetime) != + isinstance(dt2, datetime.datetime)): + if not isinstance(dt1, datetime.datetime): + dt1 = datetime.datetime.fromordinal(dt1.toordinal()) + elif not isinstance(dt2, datetime.datetime): + dt2 = datetime.datetime.fromordinal(dt2.toordinal()) + + self.years = 0 + self.months = 0 + self.days = 0 + self.leapdays = 0 + self.hours = 0 + self.minutes = 0 + self.seconds = 0 + self.microseconds = 0 + self.year = None + self.month = None + self.day = None + self.weekday = None + self.hour = None + self.minute = None + self.second = None + self.microsecond = None + self._has_time = 0 + + # Get year / month delta between the two + months = (dt1.year - dt2.year) * 12 + (dt1.month - dt2.month) + self._set_months(months) + + # Remove the year/month delta so the timedelta is just well-defined + # time units (seconds, days and microseconds) + dtm = self.__radd__(dt2) + + # If we've overshot our target, make an adjustment + if dt1 < dt2: + compare = operator.gt + increment = 1 + else: + compare = operator.lt + increment = -1 + + while compare(dt1, dtm): + months += increment + self._set_months(months) + dtm = self.__radd__(dt2) + + # Get the timedelta between the "months-adjusted" date and dt1 + delta = dt1 - dtm + self.seconds = delta.seconds + delta.days * 86400 + self.microseconds = delta.microseconds + else: + # Check for non-integer values in integer-only quantities + if any(x is not None and x != int(x) for x in (years, months)): + raise ValueError("Non-integer years and months are " + "ambiguous and not currently supported.") + + # Relative information + self.years = int(years) + self.months = int(months) + self.days = days + weeks * 7 + self.leapdays = leapdays + self.hours = hours + self.minutes = minutes + self.seconds = seconds + self.microseconds = microseconds + + # Absolute information + self.year = year + self.month = month + self.day = day + self.hour = hour + self.minute = minute + self.second = second + self.microsecond = microsecond + + if any(x is not None and int(x) != x + for x in (year, month, day, hour, + minute, second, microsecond)): + # For now we'll deprecate floats - later it'll be an error. + warn("Non-integer value passed as absolute information. " + | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/rrule.py ^ |
@@ -0,0 +1,1737 @@ +# -*- coding: utf-8 -*- +""" +The rrule module offers a small, complete, and very fast, implementation of +the recurrence rules documented in the +`iCalendar RFC <https://tools.ietf.org/html/rfc5545>`_, +including support for caching of results. +""" +import calendar +import datetime +import heapq +import itertools +import re +import sys +from functools import wraps +# For warning about deprecation of until and count +from warnings import warn + +from six import advance_iterator, integer_types + +from six.moves import _thread, range + +from ._common import weekday as weekdaybase + +try: + from math import gcd +except ImportError: + from fractions import gcd + +__all__ = ["rrule", "rruleset", "rrulestr", + "YEARLY", "MONTHLY", "WEEKLY", "DAILY", + "HOURLY", "MINUTELY", "SECONDLY", + "MO", "TU", "WE", "TH", "FR", "SA", "SU"] + +# Every mask is 7 days longer to handle cross-year weekly periods. +M366MASK = tuple([1]*31+[2]*29+[3]*31+[4]*30+[5]*31+[6]*30 + + [7]*31+[8]*31+[9]*30+[10]*31+[11]*30+[12]*31+[1]*7) +M365MASK = list(M366MASK) +M29, M30, M31 = list(range(1, 30)), list(range(1, 31)), list(range(1, 32)) +MDAY366MASK = tuple(M31+M29+M31+M30+M31+M30+M31+M31+M30+M31+M30+M31+M31[:7]) +MDAY365MASK = list(MDAY366MASK) +M29, M30, M31 = list(range(-29, 0)), list(range(-30, 0)), list(range(-31, 0)) +NMDAY366MASK = tuple(M31+M29+M31+M30+M31+M30+M31+M31+M30+M31+M30+M31+M31[:7]) +NMDAY365MASK = list(NMDAY366MASK) +M366RANGE = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366) +M365RANGE = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365) +WDAYMASK = [0, 1, 2, 3, 4, 5, 6]*55 +del M29, M30, M31, M365MASK[59], MDAY365MASK[59], NMDAY365MASK[31] +MDAY365MASK = tuple(MDAY365MASK) +M365MASK = tuple(M365MASK) + +FREQNAMES = ['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY', 'HOURLY', 'MINUTELY', 'SECONDLY'] + +(YEARLY, + MONTHLY, + WEEKLY, + DAILY, + HOURLY, + MINUTELY, + SECONDLY) = list(range(7)) + +# Imported on demand. +easter = None +parser = None + + +class weekday(weekdaybase): + """ + This version of weekday does not allow n = 0. + """ + def __init__(self, wkday, n=None): + if n == 0: + raise ValueError("Can't create weekday with n==0") + + super(weekday, self).__init__(wkday, n) + + +MO, TU, WE, TH, FR, SA, SU = weekdays = tuple(weekday(x) for x in range(7)) + + +def _invalidates_cache(f): + """ + Decorator for rruleset methods which may invalidate the + cached length. + """ + @wraps(f) + def inner_func(self, *args, **kwargs): + rv = f(self, *args, **kwargs) + self._invalidate_cache() + return rv + + return inner_func + + +class rrulebase(object): + def __init__(self, cache=False): + if cache: + self._cache = [] + self._cache_lock = _thread.allocate_lock() + self._invalidate_cache() + else: + self._cache = None + self._cache_complete = False + self._len = None + + def __iter__(self): + if self._cache_complete: + return iter(self._cache) + elif self._cache is None: + return self._iter() + else: + return self._iter_cached() + + def _invalidate_cache(self): + if self._cache is not None: + self._cache = [] + self._cache_complete = False + self._cache_gen = self._iter() + + if self._cache_lock.locked(): + self._cache_lock.release() + + self._len = None + + def _iter_cached(self): + i = 0 + gen = self._cache_gen + cache = self._cache + acquire = self._cache_lock.acquire + release = self._cache_lock.release + while gen: + if i == len(cache): + acquire() + if self._cache_complete: + break + try: + for j in range(10): + cache.append(advance_iterator(gen)) + except StopIteration: + self._cache_gen = gen = None + self._cache_complete = True + break + release() + yield cache[i] + i += 1 + while i < self._len: + yield cache[i] + i += 1 + + def __getitem__(self, item): + if self._cache_complete: + return self._cache[item] + elif isinstance(item, slice): + if item.step and item.step < 0: + return list(iter(self))[item] + else: + return list(itertools.islice(self, + item.start or 0, + item.stop or sys.maxsize, + item.step or 1)) + elif item >= 0: + gen = iter(self) + try: + for i in range(item+1): + res = advance_iterator(gen) + except StopIteration: + raise IndexError + return res + else: + return list(iter(self))[item] + + def __contains__(self, item): + if self._cache_complete: + return item in self._cache + else: + for i in self: + if i == item: + return True + elif i > item: + return False + return False + + # __len__() introduces a large performance penalty. + def count(self): + """ Returns the number of recurrences in this set. It will have go + trough the whole recurrence, if this hasn't been done before. """ + if self._len is None: + for x in self: + pass + return self._len + + def before(self, dt, inc=False): + """ Returns the last recurrence before the given datetime instance. The + inc keyword defines what happens if dt is an occurrence. With + inc=True, if dt itself is an occurrence, it will be returned. """ + if self._cache_complete: + gen = self._cache + else: + gen = self + last = None | ||
Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/__init__.py ^ | |
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/_common.py ^ |
@@ -0,0 +1,233 @@ +from __future__ import unicode_literals +import os +import time +import subprocess +import warnings +import tempfile +import pickle + +import pytest + + +class PicklableMixin(object): + def _get_nobj_bytes(self, obj, dump_kwargs, load_kwargs): + """ + Pickle and unpickle an object using ``pickle.dumps`` / ``pickle.loads`` + """ + pkl = pickle.dumps(obj, **dump_kwargs) + return pickle.loads(pkl, **load_kwargs) + + def _get_nobj_file(self, obj, dump_kwargs, load_kwargs): + """ + Pickle and unpickle an object using ``pickle.dump`` / ``pickle.load`` on + a temporary file. + """ + with tempfile.TemporaryFile('w+b') as pkl: + pickle.dump(obj, pkl, **dump_kwargs) + pkl.seek(0) # Reset the file to the beginning to read it + nobj = pickle.load(pkl, **load_kwargs) + + return nobj + + def assertPicklable(self, obj, singleton=False, asfile=False, + dump_kwargs=None, load_kwargs=None): + """ + Assert that an object can be pickled and unpickled. This assertion + assumes that the desired behavior is that the unpickled object compares + equal to the original object, but is not the same object. + """ + get_nobj = self._get_nobj_file if asfile else self._get_nobj_bytes + dump_kwargs = dump_kwargs or {} + load_kwargs = load_kwargs or {} + + nobj = get_nobj(obj, dump_kwargs, load_kwargs) + if not singleton: + self.assertIsNot(obj, nobj) + self.assertEqual(obj, nobj) + + +class TZContextBase(object): + """ + Base class for a context manager which allows changing of time zones. + + Subclasses may define a guard variable to either block or or allow time + zone changes by redefining ``_guard_var_name`` and ``_guard_allows_change``. + The default is that the guard variable must be affirmatively set. + + Subclasses must define ``get_current_tz`` and ``set_current_tz``. + """ + _guard_var_name = "DATEUTIL_MAY_CHANGE_TZ" + _guard_allows_change = True + + def __init__(self, tzval): + self.tzval = tzval + self._old_tz = None + + @classmethod + def tz_change_allowed(cls): + """ + Class method used to query whether or not this class allows time zone + changes. + """ + guard = bool(os.environ.get(cls._guard_var_name, False)) + + # _guard_allows_change gives the "default" behavior - if True, the + # guard is overcoming a block. If false, the guard is causing a block. + # Whether tz_change is allowed is therefore the XNOR of the two. + return guard == cls._guard_allows_change + + @classmethod + def tz_change_disallowed_message(cls): + """ Generate instructions on how to allow tz changes """ + msg = ('Changing time zone not allowed. Set {envar} to {gval} ' + 'if you would like to allow this behavior') + + return msg.format(envar=cls._guard_var_name, + gval=cls._guard_allows_change) + + def __enter__(self): + if not self.tz_change_allowed(): + msg = self.tz_change_disallowed_message() + pytest.skip(msg) + + # If this is used outside of a test suite, we still want an error. + raise ValueError(msg) # pragma: no cover + + self._old_tz = self.get_current_tz() + self.set_current_tz(self.tzval) + + def __exit__(self, type, value, traceback): + if self._old_tz is not None: + self.set_current_tz(self._old_tz) + + self._old_tz = None + + def get_current_tz(self): + raise NotImplementedError + + def set_current_tz(self): + raise NotImplementedError + + +class TZEnvContext(TZContextBase): + """ + Context manager that temporarily sets the `TZ` variable (for use on + *nix-like systems). Because the effect is local to the shell anyway, this + will apply *unless* a guard is set. + + If you do not want the TZ environment variable set, you may set the + ``DATEUTIL_MAY_NOT_CHANGE_TZ_VAR`` variable to a truthy value. + """ + _guard_var_name = "DATEUTIL_MAY_NOT_CHANGE_TZ_VAR" + _guard_allows_change = False + + def get_current_tz(self): + return os.environ.get('TZ', UnsetTz) + + def set_current_tz(self, tzval): + if tzval is UnsetTz and 'TZ' in os.environ: + del os.environ['TZ'] + else: + os.environ['TZ'] = tzval + + time.tzset() + + +class TZWinContext(TZContextBase): + """ + Context manager for changing local time zone on Windows. + + Because the effect of this is system-wide and global, it may have + unintended side effect. Set the ``DATEUTIL_MAY_CHANGE_TZ`` environment + variable to a truthy value before using this context manager. + """ + def get_current_tz(self): + p = subprocess.Popen(['tzutil', '/g'], stdout=subprocess.PIPE) + + ctzname, err = p.communicate() + ctzname = ctzname.decode() # Popen returns + + if p.returncode: + raise OSError('Failed to get current time zone: ' + err) + + return ctzname + + def set_current_tz(self, tzname): + p = subprocess.Popen('tzutil /s "' + tzname + '"') + + out, err = p.communicate() + + if p.returncode: + raise OSError('Failed to set current time zone: ' + + (err or 'Unknown error.')) + + +### +# Utility classes +class NotAValueClass(object): + """ + A class analogous to NaN that has operations defined for any type. + """ + def _op(self, other): + return self # Operation with NotAValue returns NotAValue + + def _cmp(self, other): + return False + + __add__ = __radd__ = _op + __sub__ = __rsub__ = _op + __mul__ = __rmul__ = _op + __div__ = __rdiv__ = _op + __truediv__ = __rtruediv__ = _op + __floordiv__ = __rfloordiv__ = _op + + __lt__ = __rlt__ = _op + __gt__ = __rgt__ = _op + __eq__ = __req__ = _op + __le__ = __rle__ = _op + __ge__ = __rge__ = _op + + +NotAValue = NotAValueClass() + + +class ComparesEqualClass(object): + """ + A class that is always equal to whatever you compare it to. + """ + + def __eq__(self, other): | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/conftest.py ^ |
@@ -0,0 +1,41 @@ +import os +import pytest + + +# Configure pytest to ignore xfailing tests +# See: https://stackoverflow.com/a/53198349/467366 +def pytest_collection_modifyitems(items): + for item in items: + marker_getter = getattr(item, 'get_closest_marker', None) + + # Python 3.3 support + if marker_getter is None: + marker_getter = item.get_marker + + marker = marker_getter('xfail') + + # Need to query the args because conditional xfail tests still have + # the xfail mark even if they are not expected to fail + if marker and (not marker.args or marker.args[0]): + item.add_marker(pytest.mark.no_cover) + + +def set_tzpath(): + """ + Sets the TZPATH variable if it's specified in an environment variable. + """ + tzpath = os.environ.get('DATEUTIL_TZPATH', None) + + if tzpath is None: + return + + path_components = tzpath.split(':') + + print("Setting TZPATH to {}".format(path_components)) + + from dateutil import tz + tz.TZPATHS.clear() + tz.TZPATHS.extend(path_components) + + +set_tzpath() | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/property/test_isoparse_prop.py ^ |
@@ -0,0 +1,27 @@ +from hypothesis import given, assume +from hypothesis import strategies as st + +from dateutil import tz +from dateutil.parser import isoparse + +import pytest + +# Strategies +TIME_ZONE_STRATEGY = st.sampled_from([None, tz.UTC] + + [tz.gettz(zname) for zname in ('US/Eastern', 'US/Pacific', + 'Australia/Sydney', 'Europe/London')]) +ASCII_STRATEGY = st.characters(max_codepoint=127) + + +@pytest.mark.isoparser +@given(dt=st.datetimes(timezones=TIME_ZONE_STRATEGY), sep=ASCII_STRATEGY) +def test_timespec_auto(dt, sep): + if dt.tzinfo is not None: + # Assume offset has no sub-second components + assume(dt.utcoffset().total_seconds() % 60 == 0) + + sep = str(sep) # Python 2.7 requires bytes + dtstr = dt.isoformat(sep=sep) + dt_rt = isoparse(dtstr) + + assert dt_rt == dt | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/property/test_parser_prop.py ^ |
@@ -0,0 +1,22 @@ +from hypothesis.strategies import integers +from hypothesis import given + +import pytest + +from dateutil.parser import parserinfo + + +@pytest.mark.parserinfo +@given(integers(min_value=100, max_value=9999)) +def test_convertyear(n): + assert n == parserinfo().convertyear(n) + + +@pytest.mark.parserinfo +@given(integers(min_value=-50, + max_value=49)) +def test_convertyear_no_specified_century(n): + p = parserinfo() + new_year = p._year + n + result = p.convertyear(new_year % 100, century_specified=False) + assert result == new_year | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/property/test_tz_prop.py ^ |
@@ -0,0 +1,35 @@ +from datetime import datetime, timedelta + +import pytest +import six +from hypothesis import assume, given +from hypothesis import strategies as st + +from dateutil import tz as tz + +EPOCHALYPSE = datetime.fromtimestamp(2147483647) +NEGATIVE_EPOCHALYPSE = datetime.fromtimestamp(0) - timedelta(seconds=2147483648) + + +@pytest.mark.gettz +@pytest.mark.parametrize("gettz_arg", [None, ""]) +# TODO: Remove bounds when GH #590 is resolved +@given( + dt=st.datetimes( + min_value=NEGATIVE_EPOCHALYPSE, max_value=EPOCHALYPSE, timezones=st.just(tz.UTC), + ) +) +def test_gettz_returns_local(gettz_arg, dt): + act_tz = tz.gettz(gettz_arg) + if isinstance(act_tz, tz.tzlocal): + return + + dt_act = dt.astimezone(tz.gettz(gettz_arg)) + if six.PY2: + dt_exp = dt.astimezone(tz.tzlocal()) + else: + dt_exp = dt.astimezone() + + assert dt_act == dt_exp + assert dt_act.tzname() == dt_exp.tzname() + assert dt_act.utcoffset() == dt_exp.utcoffset() | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_easter.py ^ |
@@ -0,0 +1,93 @@ +from dateutil.easter import easter +from dateutil.easter import EASTER_WESTERN, EASTER_ORTHODOX, EASTER_JULIAN + +from datetime import date +import pytest + +# List of easters between 1990 and 2050 +western_easter_dates = [ + date(1990, 4, 15), date(1991, 3, 31), date(1992, 4, 19), date(1993, 4, 11), + date(1994, 4, 3), date(1995, 4, 16), date(1996, 4, 7), date(1997, 3, 30), + date(1998, 4, 12), date(1999, 4, 4), + + date(2000, 4, 23), date(2001, 4, 15), date(2002, 3, 31), date(2003, 4, 20), + date(2004, 4, 11), date(2005, 3, 27), date(2006, 4, 16), date(2007, 4, 8), + date(2008, 3, 23), date(2009, 4, 12), + + date(2010, 4, 4), date(2011, 4, 24), date(2012, 4, 8), date(2013, 3, 31), + date(2014, 4, 20), date(2015, 4, 5), date(2016, 3, 27), date(2017, 4, 16), + date(2018, 4, 1), date(2019, 4, 21), + + date(2020, 4, 12), date(2021, 4, 4), date(2022, 4, 17), date(2023, 4, 9), + date(2024, 3, 31), date(2025, 4, 20), date(2026, 4, 5), date(2027, 3, 28), + date(2028, 4, 16), date(2029, 4, 1), + + date(2030, 4, 21), date(2031, 4, 13), date(2032, 3, 28), date(2033, 4, 17), + date(2034, 4, 9), date(2035, 3, 25), date(2036, 4, 13), date(2037, 4, 5), + date(2038, 4, 25), date(2039, 4, 10), + + date(2040, 4, 1), date(2041, 4, 21), date(2042, 4, 6), date(2043, 3, 29), + date(2044, 4, 17), date(2045, 4, 9), date(2046, 3, 25), date(2047, 4, 14), + date(2048, 4, 5), date(2049, 4, 18), date(2050, 4, 10) + ] + +orthodox_easter_dates = [ + date(1990, 4, 15), date(1991, 4, 7), date(1992, 4, 26), date(1993, 4, 18), + date(1994, 5, 1), date(1995, 4, 23), date(1996, 4, 14), date(1997, 4, 27), + date(1998, 4, 19), date(1999, 4, 11), + + date(2000, 4, 30), date(2001, 4, 15), date(2002, 5, 5), date(2003, 4, 27), + date(2004, 4, 11), date(2005, 5, 1), date(2006, 4, 23), date(2007, 4, 8), + date(2008, 4, 27), date(2009, 4, 19), + + date(2010, 4, 4), date(2011, 4, 24), date(2012, 4, 15), date(2013, 5, 5), + date(2014, 4, 20), date(2015, 4, 12), date(2016, 5, 1), date(2017, 4, 16), + date(2018, 4, 8), date(2019, 4, 28), + + date(2020, 4, 19), date(2021, 5, 2), date(2022, 4, 24), date(2023, 4, 16), + date(2024, 5, 5), date(2025, 4, 20), date(2026, 4, 12), date(2027, 5, 2), + date(2028, 4, 16), date(2029, 4, 8), + + date(2030, 4, 28), date(2031, 4, 13), date(2032, 5, 2), date(2033, 4, 24), + date(2034, 4, 9), date(2035, 4, 29), date(2036, 4, 20), date(2037, 4, 5), + date(2038, 4, 25), date(2039, 4, 17), + + date(2040, 5, 6), date(2041, 4, 21), date(2042, 4, 13), date(2043, 5, 3), + date(2044, 4, 24), date(2045, 4, 9), date(2046, 4, 29), date(2047, 4, 21), + date(2048, 4, 5), date(2049, 4, 25), date(2050, 4, 17) +] + +# A random smattering of Julian dates. +# Pulled values from http://www.kevinlaughery.com/east4099.html +julian_easter_dates = [ + date( 326, 4, 3), date( 375, 4, 5), date( 492, 4, 5), date( 552, 3, 31), + date( 562, 4, 9), date( 569, 4, 21), date( 597, 4, 14), date( 621, 4, 19), + date( 636, 3, 31), date( 655, 3, 29), date( 700, 4, 11), date( 725, 4, 8), + date( 750, 3, 29), date( 782, 4, 7), date( 835, 4, 18), date( 849, 4, 14), + date( 867, 3, 30), date( 890, 4, 12), date( 922, 4, 21), date( 934, 4, 6), + date(1049, 3, 26), date(1058, 4, 19), date(1113, 4, 6), date(1119, 3, 30), + date(1242, 4, 20), date(1255, 3, 28), date(1257, 4, 8), date(1258, 3, 24), + date(1261, 4, 24), date(1278, 4, 17), date(1333, 4, 4), date(1351, 4, 17), + date(1371, 4, 6), date(1391, 3, 26), date(1402, 3, 26), date(1412, 4, 3), + date(1439, 4, 5), date(1445, 3, 28), date(1531, 4, 9), date(1555, 4, 14) +] + + +@pytest.mark.parametrize("easter_date", western_easter_dates) +def test_easter_western(easter_date): + assert easter_date == easter(easter_date.year, EASTER_WESTERN) + + +@pytest.mark.parametrize("easter_date", orthodox_easter_dates) +def test_easter_orthodox(easter_date): + assert easter_date == easter(easter_date.year, EASTER_ORTHODOX) + + +@pytest.mark.parametrize("easter_date", julian_easter_dates) +def test_easter_julian(easter_date): + assert easter_date == easter(easter_date.year, EASTER_JULIAN) + + +def test_easter_bad_method(): + with pytest.raises(ValueError): + easter(1975, 4) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_import_star.py ^ |
@@ -0,0 +1,33 @@ +"""Test for the "import *" functionality. + +As import * can be only done at module level, it has been added in a separate file +""" +import pytest + +prev_locals = list(locals()) +from dateutil import * +new_locals = {name:value for name,value in locals().items() + if name not in prev_locals} +new_locals.pop('prev_locals') + + +@pytest.mark.import_star +def test_imported_modules(): + """ Test that `from dateutil import *` adds modules in __all__ locally """ + import dateutil.easter + import dateutil.parser + import dateutil.relativedelta + import dateutil.rrule + import dateutil.tz + import dateutil.utils + import dateutil.zoneinfo + + assert dateutil.easter == new_locals.pop("easter") + assert dateutil.parser == new_locals.pop("parser") + assert dateutil.relativedelta == new_locals.pop("relativedelta") + assert dateutil.rrule == new_locals.pop("rrule") + assert dateutil.tz == new_locals.pop("tz") + assert dateutil.utils == new_locals.pop("utils") + assert dateutil.zoneinfo == new_locals.pop("zoneinfo") + + assert not new_locals | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_imports.py ^ |
@@ -0,0 +1,176 @@ +import sys +import pytest + + +HOST_IS_WINDOWS = sys.platform.startswith('win') + + +def test_import_version_str(): + """ Test that dateutil.__version__ can be imported""" + from dateutil import __version__ + + +def test_import_version_root(): + import dateutil + assert hasattr(dateutil, '__version__') + + +# Test that dateutil.easter-related imports work properly +def test_import_easter_direct(): + import dateutil.easter + + +def test_import_easter_from(): + from dateutil import easter + + +def test_import_easter_start(): + from dateutil.easter import easter + + +# Test that dateutil.parser-related imports work properly +def test_import_parser_direct(): + import dateutil.parser + + +def test_import_parser_from(): + from dateutil import parser + + +def test_import_parser_all(): + # All interface + from dateutil.parser import parse + from dateutil.parser import parserinfo + + # Other public classes + from dateutil.parser import parser + + for var in (parse, parserinfo, parser): + assert var is not None + + +# Test that dateutil.relativedelta-related imports work properly +def test_import_relative_delta_direct(): + import dateutil.relativedelta + + +def test_import_relative_delta_from(): + from dateutil import relativedelta + +def test_import_relative_delta_all(): + from dateutil.relativedelta import relativedelta + from dateutil.relativedelta import MO, TU, WE, TH, FR, SA, SU + + for var in (relativedelta, MO, TU, WE, TH, FR, SA, SU): + assert var is not None + + # In the public interface but not in all + from dateutil.relativedelta import weekday + assert weekday is not None + + +# Test that dateutil.rrule related imports work properly +def test_import_rrule_direct(): + import dateutil.rrule + + +def test_import_rrule_from(): + from dateutil import rrule + + +def test_import_rrule_all(): + from dateutil.rrule import rrule + from dateutil.rrule import rruleset + from dateutil.rrule import rrulestr + from dateutil.rrule import YEARLY, MONTHLY, WEEKLY, DAILY + from dateutil.rrule import HOURLY, MINUTELY, SECONDLY + from dateutil.rrule import MO, TU, WE, TH, FR, SA, SU + + rr_all = (rrule, rruleset, rrulestr, + YEARLY, MONTHLY, WEEKLY, DAILY, + HOURLY, MINUTELY, SECONDLY, + MO, TU, WE, TH, FR, SA, SU) + + for var in rr_all: + assert var is not None + + # In the public interface but not in all + from dateutil.rrule import weekday + assert weekday is not None + + +# Test that dateutil.tz related imports work properly +def test_import_tztest_direct(): + import dateutil.tz + + +def test_import_tz_from(): + from dateutil import tz + + +def test_import_tz_all(): + from dateutil.tz import tzutc + from dateutil.tz import tzoffset + from dateutil.tz import tzlocal + from dateutil.tz import tzfile + from dateutil.tz import tzrange + from dateutil.tz import tzstr + from dateutil.tz import tzical + from dateutil.tz import gettz + from dateutil.tz import tzwin + from dateutil.tz import tzwinlocal + from dateutil.tz import UTC + from dateutil.tz import datetime_ambiguous + from dateutil.tz import datetime_exists + from dateutil.tz import resolve_imaginary + + tz_all = ["tzutc", "tzoffset", "tzlocal", "tzfile", "tzrange", + "tzstr", "tzical", "gettz", "datetime_ambiguous", + "datetime_exists", "resolve_imaginary", "UTC"] + + tz_all += ["tzwin", "tzwinlocal"] if sys.platform.startswith("win") else [] + lvars = locals() + + for var in tz_all: + assert lvars[var] is not None + +# Test that dateutil.tzwin related imports work properly +@pytest.mark.skipif(not HOST_IS_WINDOWS, reason="Requires Windows") +def test_import_tz_windows_direct(): + import dateutil.tzwin + + +@pytest.mark.skipif(not HOST_IS_WINDOWS, reason="Requires Windows") +def test_import_tz_windows_from(): + from dateutil import tzwin + + +@pytest.mark.skipif(not HOST_IS_WINDOWS, reason="Requires Windows") +def test_import_tz_windows_star(): + from dateutil.tzwin import tzwin + from dateutil.tzwin import tzwinlocal + + tzwin_all = [tzwin, tzwinlocal] + + for var in tzwin_all: + assert var is not None + + +# Test imports of Zone Info +def test_import_zone_info_direct(): + import dateutil.zoneinfo + + +def test_import_zone_info_from(): + from dateutil import zoneinfo + + +def test_import_zone_info_star(): + from dateutil.zoneinfo import gettz + from dateutil.zoneinfo import gettz_db_metadata + from dateutil.zoneinfo import rebuild + + zi_all = (gettz, gettz_db_metadata, rebuild) + + for var in zi_all: + assert var is not None | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_internals.py ^ |
@@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +""" +Tests for implementation details, not necessarily part of the user-facing +API. + +The motivating case for these tests is #483, where we want to smoke-test +code that may be difficult to reach through the standard API calls. +""" + +import sys +import pytest + +from dateutil.parser._parser import _ymd +from dateutil import tz + +IS_PY32 = sys.version_info[0:2] == (3, 2) + + +@pytest.mark.smoke +def test_YMD_could_be_day(): + ymd = _ymd('foo bar 124 baz') + + ymd.append(2, 'M') + assert ymd.has_month + assert not ymd.has_year + assert ymd.could_be_day(4) + assert not ymd.could_be_day(-6) + assert not ymd.could_be_day(32) + + # Assumes leap year + assert ymd.could_be_day(29) + + ymd.append(1999) + assert ymd.has_year + assert not ymd.could_be_day(29) + + ymd.append(16, 'D') + assert ymd.has_day + assert not ymd.could_be_day(1) + + ymd = _ymd('foo bar 124 baz') + ymd.append(1999) + assert ymd.could_be_day(31) + + +### +# Test that private interfaces in _parser are deprecated properly +@pytest.mark.skipif(IS_PY32, reason='pytest.warns not supported on Python 3.2') +def test_parser_private_warns(): + from dateutil.parser import _timelex, _tzparser + from dateutil.parser import _parsetz + + with pytest.warns(DeprecationWarning): + _tzparser() + + with pytest.warns(DeprecationWarning): + _timelex('2014-03-03') + + with pytest.warns(DeprecationWarning): + _parsetz('+05:00') + + +@pytest.mark.skipif(IS_PY32, reason='pytest.warns not supported on Python 3.2') +def test_parser_parser_private_not_warns(): + from dateutil.parser._parser import _timelex, _tzparser + from dateutil.parser._parser import _parsetz + + with pytest.warns(None) as recorder: + _tzparser() + assert len(recorder) == 0 + + with pytest.warns(None) as recorder: + _timelex('2014-03-03') + + assert len(recorder) == 0 + + with pytest.warns(None) as recorder: + _parsetz('+05:00') + assert len(recorder) == 0 + + +@pytest.mark.tzstr +def test_tzstr_internal_timedeltas(): + with pytest.warns(tz.DeprecatedTzFormatWarning): + tz1 = tz.tzstr("EST5EDT,5,4,0,7200,11,-3,0,7200") + + with pytest.warns(tz.DeprecatedTzFormatWarning): + tz2 = tz.tzstr("EST5EDT,4,1,0,7200,10,-1,0,7200") + + assert tz1._start_delta != tz2._start_delta + assert tz1._end_delta != tz2._end_delta | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_isoparser.py ^ |
@@ -0,0 +1,509 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from datetime import datetime, timedelta, date, time +import itertools as it + +from dateutil import tz +from dateutil.tz import UTC +from dateutil.parser import isoparser, isoparse + +import pytest +import six + + +def _generate_tzoffsets(limited): + def _mkoffset(hmtuple, fmt): + h, m = hmtuple + m_td = (-1 if h < 0 else 1) * m + + tzo = tz.tzoffset(None, timedelta(hours=h, minutes=m_td)) + return tzo, fmt.format(h, m) + + out = [] + if not limited: + # The subset that's just hours + hm_out_h = [(h, 0) for h in (-23, -5, 0, 5, 23)] + out.extend([_mkoffset(hm, '{:+03d}') for hm in hm_out_h]) + + # Ones that have hours and minutes + hm_out = [] + hm_out_h + hm_out += [(-12, 15), (11, 30), (10, 2), (5, 15), (-5, 30)] + else: + hm_out = [(-5, -0)] + + fmts = ['{:+03d}:{:02d}', '{:+03d}{:02d}'] + out += [_mkoffset(hm, fmt) for hm in hm_out for fmt in fmts] + + # Also add in UTC and naive + out.append((UTC, 'Z')) + out.append((None, '')) + + return out + +FULL_TZOFFSETS = _generate_tzoffsets(False) +FULL_TZOFFSETS_AWARE = [x for x in FULL_TZOFFSETS if x[1]] +TZOFFSETS = _generate_tzoffsets(True) + +DATES = [datetime(1996, 1, 1), datetime(2017, 1, 1)] +@pytest.mark.parametrize('dt', tuple(DATES)) +def test_year_only(dt): + dtstr = dt.strftime('%Y') + + assert isoparse(dtstr) == dt + +DATES += [datetime(2000, 2, 1), datetime(2017, 4, 1)] +@pytest.mark.parametrize('dt', tuple(DATES)) +def test_year_month(dt): + fmt = '%Y-%m' + dtstr = dt.strftime(fmt) + + assert isoparse(dtstr) == dt + +DATES += [datetime(2016, 2, 29), datetime(2018, 3, 15)] +YMD_FMTS = ('%Y%m%d', '%Y-%m-%d') +@pytest.mark.parametrize('dt', tuple(DATES)) +@pytest.mark.parametrize('fmt', YMD_FMTS) +def test_year_month_day(dt, fmt): + dtstr = dt.strftime(fmt) + + assert isoparse(dtstr) == dt + +def _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset, + microsecond_precision=None): + tzi, offset_str = tzoffset + fmt = date_fmt + 'T' + time_fmt + dt = dt.replace(tzinfo=tzi) + dtstr = dt.strftime(fmt) + + if microsecond_precision is not None: + if not fmt.endswith('%f'): # pragma: nocover + raise ValueError('Time format has no microseconds!') + + if microsecond_precision != 6: + dtstr = dtstr[:-(6 - microsecond_precision)] + elif microsecond_precision > 6: # pragma: nocover + raise ValueError('Precision must be 1-6') + + dtstr += offset_str + + assert isoparse(dtstr) == dt + +DATETIMES = [datetime(1998, 4, 16, 12), + datetime(2019, 11, 18, 23), + datetime(2014, 12, 16, 4)] +@pytest.mark.parametrize('dt', tuple(DATETIMES)) +@pytest.mark.parametrize('date_fmt', YMD_FMTS) +@pytest.mark.parametrize('tzoffset', TZOFFSETS) +def test_ymd_h(dt, date_fmt, tzoffset): + _isoparse_date_and_time(dt, date_fmt, '%H', tzoffset) + +DATETIMES = [datetime(2012, 1, 6, 9, 37)] +@pytest.mark.parametrize('dt', tuple(DATETIMES)) +@pytest.mark.parametrize('date_fmt', YMD_FMTS) +@pytest.mark.parametrize('time_fmt', ('%H%M', '%H:%M')) +@pytest.mark.parametrize('tzoffset', TZOFFSETS) +def test_ymd_hm(dt, date_fmt, time_fmt, tzoffset): + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset) + +DATETIMES = [datetime(2003, 9, 2, 22, 14, 2), + datetime(2003, 8, 8, 14, 9, 14), + datetime(2003, 4, 7, 6, 14, 59)] +HMS_FMTS = ('%H%M%S', '%H:%M:%S') +@pytest.mark.parametrize('dt', tuple(DATETIMES)) +@pytest.mark.parametrize('date_fmt', YMD_FMTS) +@pytest.mark.parametrize('time_fmt', HMS_FMTS) +@pytest.mark.parametrize('tzoffset', TZOFFSETS) +def test_ymd_hms(dt, date_fmt, time_fmt, tzoffset): + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset) + +DATETIMES = [datetime(2017, 11, 27, 6, 14, 30, 123456)] +@pytest.mark.parametrize('dt', tuple(DATETIMES)) +@pytest.mark.parametrize('date_fmt', YMD_FMTS) +@pytest.mark.parametrize('time_fmt', (x + sep + '%f' for x in HMS_FMTS + for sep in '.,')) +@pytest.mark.parametrize('tzoffset', TZOFFSETS) +@pytest.mark.parametrize('precision', list(range(3, 7))) +def test_ymd_hms_micro(dt, date_fmt, time_fmt, tzoffset, precision): + # Truncate the microseconds to the desired precision for the representation + dt = dt.replace(microsecond=int(round(dt.microsecond, precision-6))) + + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset, precision) + +### +# Truncation of extra digits beyond microsecond precision +@pytest.mark.parametrize('dt_str', [ + '2018-07-03T14:07:00.123456000001', + '2018-07-03T14:07:00.123456999999', +]) +def test_extra_subsecond_digits(dt_str): + assert isoparse(dt_str) == datetime(2018, 7, 3, 14, 7, 0, 123456) + +@pytest.mark.parametrize('tzoffset', FULL_TZOFFSETS) +def test_full_tzoffsets(tzoffset): + dt = datetime(2017, 11, 27, 6, 14, 30, 123456) + date_fmt = '%Y-%m-%d' + time_fmt = '%H:%M:%S.%f' + + _isoparse_date_and_time(dt, date_fmt, time_fmt, tzoffset) + +@pytest.mark.parametrize('dt_str', [ + '2014-04-11T00', + '2014-04-10T24', + '2014-04-11T00:00', + '2014-04-10T24:00', + '2014-04-11T00:00:00', + '2014-04-10T24:00:00', + '2014-04-11T00:00:00.000', + '2014-04-10T24:00:00.000', + '2014-04-11T00:00:00.000000', + '2014-04-10T24:00:00.000000'] +) +def test_datetime_midnight(dt_str): + assert isoparse(dt_str) == datetime(2014, 4, 11, 0, 0, 0, 0) + +@pytest.mark.parametrize('datestr', [ + '2014-01-01', + '20140101', +]) +@pytest.mark.parametrize('sep', [' ', 'a', 'T', '_', '-']) +def test_isoparse_sep_none(datestr, sep): + isostr = datestr + sep + '14:33:09' + assert isoparse(isostr) == datetime(2014, 1, 1, 14, 33, 9) + +## +# Uncommon date formats +TIME_ARGS = ('time_args', + ((None, time(0), None), ) + tuple(('%H:%M:%S.%f', _t, _tz) + for _t, _tz in it.product([time(0), time(9, 30), time(14, 47)], + TZOFFSETS))) + +@pytest.mark.parametrize('isocal,dt_expected',[ + ((2017, 10), datetime(2017, 3, 6)), + ((2020, 1), datetime(2019, 12, 30)), # ISO year != Cal year + ((2004, 53), datetime(2004, 12, 27)), # Only half the week is in 2014 +]) +def test_isoweek(isocal, dt_expected): + # TODO: Figure out how to parametrize this on formats, too + for fmt in ('{:04d}-W{:02d}', '{:04d}W{:02d}'): + dtstr = fmt.format(*isocal) + assert isoparse(dtstr) == dt_expected + +@pytest.mark.parametrize('isocal,dt_expected',[ + ((2016, 13, 7), datetime(2016, 4, 3)), + ((2004, 53, 7), datetime(2005, 1, 2)), # ISO year != Cal year + ((2009, 1, 2), datetime(2008, 12, 30)), # ISO year < Cal year + ((2009, 53, 6), datetime(2010, 1, 2)) # ISO year > Cal year +]) +def test_isoweek_day(isocal, dt_expected): + # TODO: Figure out how to parametrize this on formats, too | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_parser.py ^ |
@@ -0,0 +1,964 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import itertools +from datetime import datetime, timedelta +import unittest +import sys + +from dateutil import tz +from dateutil.tz import tzoffset +from dateutil.parser import parse, parserinfo +from dateutil.parser import ParserError +from dateutil.parser import UnknownTimezoneWarning + +from ._common import TZEnvContext + +from six import assertRaisesRegex, PY2 +from io import StringIO + +import pytest + +# Platform info +IS_WIN = sys.platform.startswith('win') + +PLATFORM_HAS_DASH_D = False +try: + if datetime.now().strftime('%-d'): + PLATFORM_HAS_DASH_D = True +except ValueError: + pass + + +@pytest.fixture(params=[True, False]) +def fuzzy(request): + """Fixture to pass fuzzy=True or fuzzy=False to parse""" + return request.param + + +# Parser test cases using no keyword arguments. Format: (parsable_text, expected_datetime, assertion_message) +PARSER_TEST_CASES = [ + ("Thu Sep 25 10:36:28 2003", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("Thu Sep 25 2003", datetime(2003, 9, 25), "date command format strip"), + ("2003-09-25T10:49:41", datetime(2003, 9, 25, 10, 49, 41), "iso format strip"), + ("2003-09-25T10:49", datetime(2003, 9, 25, 10, 49), "iso format strip"), + ("2003-09-25T10", datetime(2003, 9, 25, 10), "iso format strip"), + ("2003-09-25", datetime(2003, 9, 25), "iso format strip"), + ("20030925T104941", datetime(2003, 9, 25, 10, 49, 41), "iso stripped format strip"), + ("20030925T1049", datetime(2003, 9, 25, 10, 49, 0), "iso stripped format strip"), + ("20030925T10", datetime(2003, 9, 25, 10), "iso stripped format strip"), + ("20030925", datetime(2003, 9, 25), "iso stripped format strip"), + ("2003-09-25 10:49:41,502", datetime(2003, 9, 25, 10, 49, 41, 502000), "python logger format"), + ("199709020908", datetime(1997, 9, 2, 9, 8), "no separator"), + ("19970902090807", datetime(1997, 9, 2, 9, 8, 7), "no separator"), + ("09-25-2003", datetime(2003, 9, 25), "date with dash"), + ("25-09-2003", datetime(2003, 9, 25), "date with dash"), + ("10-09-2003", datetime(2003, 10, 9), "date with dash"), + ("10-09-03", datetime(2003, 10, 9), "date with dash"), + ("2003.09.25", datetime(2003, 9, 25), "date with dot"), + ("09.25.2003", datetime(2003, 9, 25), "date with dot"), + ("25.09.2003", datetime(2003, 9, 25), "date with dot"), + ("10.09.2003", datetime(2003, 10, 9), "date with dot"), + ("10.09.03", datetime(2003, 10, 9), "date with dot"), + ("2003/09/25", datetime(2003, 9, 25), "date with slash"), + ("09/25/2003", datetime(2003, 9, 25), "date with slash"), + ("25/09/2003", datetime(2003, 9, 25), "date with slash"), + ("10/09/2003", datetime(2003, 10, 9), "date with slash"), + ("10/09/03", datetime(2003, 10, 9), "date with slash"), + ("2003 09 25", datetime(2003, 9, 25), "date with space"), + ("09 25 2003", datetime(2003, 9, 25), "date with space"), + ("25 09 2003", datetime(2003, 9, 25), "date with space"), + ("10 09 2003", datetime(2003, 10, 9), "date with space"), + ("10 09 03", datetime(2003, 10, 9), "date with space"), + ("25 09 03", datetime(2003, 9, 25), "date with space"), + ("03 25 Sep", datetime(2003, 9, 25), "strangely ordered date"), + ("25 03 Sep", datetime(2025, 9, 3), "strangely ordered date"), + (" July 4 , 1976 12:01:02 am ", datetime(1976, 7, 4, 0, 1, 2), "extra space"), + ("Wed, July 10, '96", datetime(1996, 7, 10, 0, 0), "random format"), + ("1996.July.10 AD 12:08 PM", datetime(1996, 7, 10, 12, 8), "random format"), + ("July 4, 1976", datetime(1976, 7, 4), "random format"), + ("7 4 1976", datetime(1976, 7, 4), "random format"), + ("4 jul 1976", datetime(1976, 7, 4), "random format"), + ("4 Jul 1976", datetime(1976, 7, 4), "'%-d %b %Y' format"), + ("7-4-76", datetime(1976, 7, 4), "random format"), + ("19760704", datetime(1976, 7, 4), "random format"), + ("0:01:02 on July 4, 1976", datetime(1976, 7, 4, 0, 1, 2), "random format"), + ("July 4, 1976 12:01:02 am", datetime(1976, 7, 4, 0, 1, 2), "random format"), + ("Mon Jan 2 04:24:27 1995", datetime(1995, 1, 2, 4, 24, 27), "random format"), + ("04.04.95 00:22", datetime(1995, 4, 4, 0, 22), "random format"), + ("Jan 1 1999 11:23:34.578", datetime(1999, 1, 1, 11, 23, 34, 578000), "random format"), + ("950404 122212", datetime(1995, 4, 4, 12, 22, 12), "random format"), + ("3rd of May 2001", datetime(2001, 5, 3), "random format"), + ("5th of March 2001", datetime(2001, 3, 5), "random format"), + ("1st of May 2003", datetime(2003, 5, 1), "random format"), + ('0099-01-01T00:00:00', datetime(99, 1, 1, 0, 0), "99 ad"), + ('0031-01-01T00:00:00', datetime(31, 1, 1, 0, 0), "31 ad"), + ("20080227T21:26:01.123456789", datetime(2008, 2, 27, 21, 26, 1, 123456), "high precision seconds"), + ('13NOV2017', datetime(2017, 11, 13), "dBY (See GH360)"), + ('0003-03-04', datetime(3, 3, 4), "pre 12 year same month (See GH PR #293)"), + ('December.0031.30', datetime(31, 12, 30), "BYd corner case (GH#687)"), + + # Cases with legacy h/m/s format, candidates for deprecation (GH#886) + ("2016-12-21 04.2h", datetime(2016, 12, 21, 4, 12), "Fractional Hours"), +] +# Check that we don't have any duplicates +assert len(set([x[0] for x in PARSER_TEST_CASES])) == len(PARSER_TEST_CASES) + + +@pytest.mark.parametrize("parsable_text,expected_datetime,assertion_message", PARSER_TEST_CASES) +def test_parser(parsable_text, expected_datetime, assertion_message): + assert parse(parsable_text) == expected_datetime, assertion_message + + +# Parser test cases using datetime(2003, 9, 25) as a default. +# Format: (parsable_text, expected_datetime, assertion_message) +PARSER_DEFAULT_TEST_CASES = [ + ("Thu Sep 25 10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("Thu Sep 10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("Thu 10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("Sep 10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("10:36:28", datetime(2003, 9, 25, 10, 36, 28), "date command format strip"), + ("10:36", datetime(2003, 9, 25, 10, 36), "date command format strip"), + ("Sep 2003", datetime(2003, 9, 25), "date command format strip"), + ("Sep", datetime(2003, 9, 25), "date command format strip"), + ("2003", datetime(2003, 9, 25), "date command format strip"), + ("10h36m28.5s", datetime(2003, 9, 25, 10, 36, 28, 500000), "hour with letters"), + ("10h36m28s", datetime(2003, 9, 25, 10, 36, 28), "hour with letters strip"), + ("10h36m", datetime(2003, 9, 25, 10, 36), "hour with letters strip"), + ("10h", datetime(2003, 9, 25, 10), "hour with letters strip"), + ("10 h 36", datetime(2003, 9, 25, 10, 36), "hour with letters strip"), + ("10 h 36.5", datetime(2003, 9, 25, 10, 36, 30), "hour with letter strip"), + ("36 m 5", datetime(2003, 9, 25, 0, 36, 5), "hour with letters spaces"), + ("36 m 5 s", datetime(2003, 9, 25, 0, 36, 5), "minute with letters spaces"), + ("36 m 05", datetime(2003, 9, 25, 0, 36, 5), "minute with letters spaces"), + ("36 m 05 s", datetime(2003, 9, 25, 0, 36, 5), "minutes with letters spaces"), + ("10h am", datetime(2003, 9, 25, 10), "hour am pm"), + ("10h pm", datetime(2003, 9, 25, 22), "hour am pm"), + ("10am", datetime(2003, 9, 25, 10), "hour am pm"), + ("10pm", datetime(2003, 9, 25, 22), "hour am pm"), + ("10:00 am", datetime(2003, 9, 25, 10), "hour am pm"), + ("10:00 pm", datetime(2003, 9, 25, 22), "hour am pm"), + ("10:00am", datetime(2003, 9, 25, 10), "hour am pm"), + ("10:00pm", datetime(2003, 9, 25, 22), "hour am pm"), + ("10:00a.m", datetime(2003, 9, 25, 10), "hour am pm"), + ("10:00p.m", datetime(2003, 9, 25, 22), "hour am pm"), + ("10:00a.m.", datetime(2003, 9, 25, 10), "hour am pm"), + ("10:00p.m.", datetime(2003, 9, 25, 22), "hour am pm"), + ("Wed", datetime(2003, 10, 1), "weekday alone"), + ("Wednesday", datetime(2003, 10, 1), "long weekday"), + ("October", datetime(2003, 10, 25), "long month"), + ("31-Dec-00", datetime(2000, 12, 31), "zero year"), + ("0:01:02", datetime(2003, 9, 25, 0, 1, 2), "random format"), + ("12h 01m02s am", datetime(2003, 9, 25, 0, 1, 2), "random format"), + ("12:08 PM", datetime(2003, 9, 25, 12, 8), "random format"), + ("01h02m03", datetime(2003, 9, 25, 1, 2, 3), "random format"), + ("01h02", datetime(2003, 9, 25, 1, 2), "random format"), + ("01h02s", datetime(2003, 9, 25, 1, 0, 2), "random format"), + ("01m02", datetime(2003, 9, 25, 0, 1, 2), "random format"), + ("01m02h", datetime(2003, 9, 25, 2, 1), "random format"), + ("2004 10 Apr 11h30m", datetime(2004, 4, 10, 11, 30), "random format") +] +# Check that we don't have any duplicates +assert len(set([x[0] for x in PARSER_DEFAULT_TEST_CASES])) == len(PARSER_DEFAULT_TEST_CASES) + + +@pytest.mark.parametrize("parsable_text,expected_datetime,assertion_message", PARSER_DEFAULT_TEST_CASES) +def test_parser_default(parsable_text, expected_datetime, assertion_message): + assert parse(parsable_text, default=datetime(2003, 9, 25)) == expected_datetime, assertion_message + + +@pytest.mark.parametrize('sep', ['-', '.', '/', ' ']) +def test_parse_dayfirst(sep): + expected = datetime(2003, 9, 10) + fmt = sep.join(['%d', '%m', '%Y']) + dstr = expected.strftime(fmt) + result = parse(dstr, dayfirst=True) + assert result == expected + + +@pytest.mark.parametrize('sep', ['-', '.', '/', ' ']) +def test_parse_yearfirst(sep): + expected = datetime(2010, 9, 3) + fmt = sep.join(['%Y', '%m', '%d']) + dstr = expected.strftime(fmt) + result = parse(dstr, yearfirst=True) + assert result == expected + + +@pytest.mark.parametrize('dstr,expected', [ + ("Thu Sep 25 10:36:28 BRST 2003", datetime(2003, 9, 25, 10, 36, 28)), + ("1996.07.10 AD at 15:08:56 PDT", datetime(1996, 7, 10, 15, 8, 56)), + ("Tuesday, April 12, 1952 AD 3:30:42pm PST", + datetime(1952, 4, 12, 15, 30, 42)), + ("November 5, 1994, 8:15:30 am EST", datetime(1994, 11, 5, 8, 15, 30)), + ("1994-11-05T08:15:30-05:00", datetime(1994, 11, 5, 8, 15, 30)), + ("1994-11-05T08:15:30Z", datetime(1994, 11, 5, 8, 15, 30)), + ("1976-07-04T00:01:02Z", datetime(1976, 7, 4, 0, 1, 2)), + ("1986-07-05T08:15:30z", datetime(1986, 7, 5, 8, 15, 30)), + ("Tue Apr 4 00:22:12 PDT 1995", datetime(1995, 4, 4, 0, 22, 12)), +]) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_relativedelta.py ^ |
@@ -0,0 +1,706 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from ._common import NotAValue + +import calendar +from datetime import datetime, date, timedelta +import unittest + +import pytest + +from dateutil.relativedelta import relativedelta, MO, TU, WE, FR, SU + + +class RelativeDeltaTest(unittest.TestCase): + now = datetime(2003, 9, 17, 20, 54, 47, 282310) + today = date(2003, 9, 17) + + def testInheritance(self): + # Ensure that relativedelta is inheritance-friendly. + class rdChildClass(relativedelta): + pass + + ccRD = rdChildClass(years=1, months=1, days=1, leapdays=1, weeks=1, + hours=1, minutes=1, seconds=1, microseconds=1) + + rd = relativedelta(years=1, months=1, days=1, leapdays=1, weeks=1, + hours=1, minutes=1, seconds=1, microseconds=1) + + self.assertEqual(type(ccRD + rd), type(ccRD), + msg='Addition does not inherit type.') + + self.assertEqual(type(ccRD - rd), type(ccRD), + msg='Subtraction does not inherit type.') + + self.assertEqual(type(-ccRD), type(ccRD), + msg='Negation does not inherit type.') + + self.assertEqual(type(ccRD * 5.0), type(ccRD), + msg='Multiplication does not inherit type.') + + self.assertEqual(type(ccRD / 5.0), type(ccRD), + msg='Division does not inherit type.') + + def testMonthEndMonthBeginning(self): + self.assertEqual(relativedelta(datetime(2003, 1, 31, 23, 59, 59), + datetime(2003, 3, 1, 0, 0, 0)), + relativedelta(months=-1, seconds=-1)) + + self.assertEqual(relativedelta(datetime(2003, 3, 1, 0, 0, 0), + datetime(2003, 1, 31, 23, 59, 59)), + relativedelta(months=1, seconds=1)) + + def testMonthEndMonthBeginningLeapYear(self): + self.assertEqual(relativedelta(datetime(2012, 1, 31, 23, 59, 59), + datetime(2012, 3, 1, 0, 0, 0)), + relativedelta(months=-1, seconds=-1)) + + self.assertEqual(relativedelta(datetime(2003, 3, 1, 0, 0, 0), + datetime(2003, 1, 31, 23, 59, 59)), + relativedelta(months=1, seconds=1)) + + def testNextMonth(self): + self.assertEqual(self.now+relativedelta(months=+1), + datetime(2003, 10, 17, 20, 54, 47, 282310)) + + def testNextMonthPlusOneWeek(self): + self.assertEqual(self.now+relativedelta(months=+1, weeks=+1), + datetime(2003, 10, 24, 20, 54, 47, 282310)) + + def testNextMonthPlusOneWeek10am(self): + self.assertEqual(self.today + + relativedelta(months=+1, weeks=+1, hour=10), + datetime(2003, 10, 24, 10, 0)) + + def testNextMonthPlusOneWeek10amDiff(self): + self.assertEqual(relativedelta(datetime(2003, 10, 24, 10, 0), + self.today), + relativedelta(months=+1, days=+7, hours=+10)) + + def testOneMonthBeforeOneYear(self): + self.assertEqual(self.now+relativedelta(years=+1, months=-1), + datetime(2004, 8, 17, 20, 54, 47, 282310)) + + def testMonthsOfDiffNumOfDays(self): + self.assertEqual(date(2003, 1, 27)+relativedelta(months=+1), + date(2003, 2, 27)) + self.assertEqual(date(2003, 1, 31)+relativedelta(months=+1), + date(2003, 2, 28)) + self.assertEqual(date(2003, 1, 31)+relativedelta(months=+2), + date(2003, 3, 31)) + + def testMonthsOfDiffNumOfDaysWithYears(self): + self.assertEqual(date(2000, 2, 28)+relativedelta(years=+1), + date(2001, 2, 28)) + self.assertEqual(date(2000, 2, 29)+relativedelta(years=+1), + date(2001, 2, 28)) + + self.assertEqual(date(1999, 2, 28)+relativedelta(years=+1), + date(2000, 2, 28)) + self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1), + date(2000, 3, 1)) + self.assertEqual(date(1999, 3, 1)+relativedelta(years=+1), + date(2000, 3, 1)) + + self.assertEqual(date(2001, 2, 28)+relativedelta(years=-1), + date(2000, 2, 28)) + self.assertEqual(date(2001, 3, 1)+relativedelta(years=-1), + date(2000, 3, 1)) + + def testNextFriday(self): + self.assertEqual(self.today+relativedelta(weekday=FR), + date(2003, 9, 19)) + + def testNextFridayInt(self): + self.assertEqual(self.today+relativedelta(weekday=calendar.FRIDAY), + date(2003, 9, 19)) + + def testLastFridayInThisMonth(self): + self.assertEqual(self.today+relativedelta(day=31, weekday=FR(-1)), + date(2003, 9, 26)) + + def testLastDayOfFebruary(self): + self.assertEqual(date(2021, 2, 1) + relativedelta(day=31), + date(2021, 2, 28)) + + def testLastDayOfFebruaryLeapYear(self): + self.assertEqual(date(2020, 2, 1) + relativedelta(day=31), + date(2020, 2, 29)) + + def testNextWednesdayIsToday(self): + self.assertEqual(self.today+relativedelta(weekday=WE), + date(2003, 9, 17)) + + def testNextWednesdayNotToday(self): + self.assertEqual(self.today+relativedelta(days=+1, weekday=WE), + date(2003, 9, 24)) + + def testAddMoreThan12Months(self): + self.assertEqual(date(2003, 12, 1) + relativedelta(months=+13), + date(2005, 1, 1)) + + def testAddNegativeMonths(self): + self.assertEqual(date(2003, 1, 1) + relativedelta(months=-2), + date(2002, 11, 1)) + + def test15thISOYearWeek(self): + self.assertEqual(date(2003, 1, 1) + + relativedelta(day=4, weeks=+14, weekday=MO(-1)), + date(2003, 4, 7)) + + def testMillenniumAge(self): + self.assertEqual(relativedelta(self.now, date(2001, 1, 1)), + relativedelta(years=+2, months=+8, days=+16, + hours=+20, minutes=+54, seconds=+47, + microseconds=+282310)) + + def testJohnAge(self): + self.assertEqual(relativedelta(self.now, + datetime(1978, 4, 5, 12, 0)), + relativedelta(years=+25, months=+5, days=+12, + hours=+8, minutes=+54, seconds=+47, + microseconds=+282310)) + + def testJohnAgeWithDate(self): + self.assertEqual(relativedelta(self.today, + datetime(1978, 4, 5, 12, 0)), + relativedelta(years=+25, months=+5, days=+11, + hours=+12)) + + def testYearDay(self): + self.assertEqual(date(2003, 1, 1)+relativedelta(yearday=260), + date(2003, 9, 17)) + self.assertEqual(date(2002, 1, 1)+relativedelta(yearday=260), + date(2002, 9, 17)) + self.assertEqual(date(2000, 1, 1)+relativedelta(yearday=260), + date(2000, 9, 16)) + self.assertEqual(self.today+relativedelta(yearday=261), + date(2003, 9, 18)) + + def testYearDayBug(self): + # Tests a problem reported by Adam Ryan. + self.assertEqual(date(2010, 1, 1)+relativedelta(yearday=15), + date(2010, 1, 15)) + + def testNonLeapYearDay(self): + self.assertEqual(date(2003, 1, 1)+relativedelta(nlyearday=260), + date(2003, 9, 17)) + self.assertEqual(date(2002, 1, 1)+relativedelta(nlyearday=260), + date(2002, 9, 17)) + self.assertEqual(date(2000, 1, 1)+relativedelta(nlyearday=260), + date(2000, 9, 17)) + self.assertEqual(self.today+relativedelta(yearday=261), + date(2003, 9, 18)) + + def testAddition(self): + self.assertEqual(relativedelta(days=10) + + relativedelta(years=1, months=2, days=3, hours=4, + minutes=5, microseconds=6), + relativedelta(years=1, months=2, days=13, hours=4, | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_rrule.py ^ |
@@ -0,0 +1,4914 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from datetime import datetime, date +import unittest +from six import PY2 + +from dateutil import tz +from dateutil.rrule import ( + rrule, rruleset, rrulestr, + YEARLY, MONTHLY, WEEKLY, DAILY, + HOURLY, MINUTELY, SECONDLY, + MO, TU, WE, TH, FR, SA, SU +) + +from freezegun import freeze_time + +import pytest + + +@pytest.mark.rrule +class RRuleTest(unittest.TestCase): + def _rrulestr_reverse_test(self, rule): + """ + Call with an `rrule` and it will test that `str(rrule)` generates a + string which generates the same `rrule` as the input when passed to + `rrulestr()` + """ + rr_str = str(rule) + rrulestr_rrule = rrulestr(rr_str) + + self.assertEqual(list(rule), list(rrulestr_rrule)) + + def testStrAppendRRULEToken(self): + # `_rrulestr_reverse_test` does not check if the "RRULE:" prefix + # property is appended properly, so give it a dedicated test + self.assertEqual(str(rrule(YEARLY, + count=5, + dtstart=datetime(1997, 9, 2, 9, 0))), + "DTSTART:19970902T090000\n" + "RRULE:FREQ=YEARLY;COUNT=5") + + rr_str = ( + 'DTSTART:19970105T083000\nRRULE:FREQ=YEARLY;INTERVAL=2' + ) + self.assertEqual(str(rrulestr(rr_str)), rr_str) + + def testYearly(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1998, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0)]) + + def testYearlyInterval(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + interval=2, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1999, 9, 2, 9, 0), + datetime(2001, 9, 2, 9, 0)]) + + def testYearlyIntervalLarge(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + interval=100, + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(2097, 9, 2, 9, 0), + datetime(2197, 9, 2, 9, 0)]) + + def testYearlyByMonth(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 2, 9, 0), + datetime(1998, 3, 2, 9, 0), + datetime(1999, 1, 2, 9, 0)]) + + def testYearlyByMonthDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonthday=(1, 3), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 3, 9, 0), + datetime(1997, 10, 1, 9, 0), + datetime(1997, 10, 3, 9, 0)]) + + def testYearlyByMonthAndMonthDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + bymonthday=(5, 7), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 5, 9, 0), + datetime(1998, 1, 7, 9, 0), + datetime(1998, 3, 5, 9, 0)]) + + def testYearlyByWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0)]) + + def testYearlyByNWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 25, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 12, 31, 9, 0)]) + + def testYearlyByNWeekDayLarge(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 11, 9, 0), + datetime(1998, 1, 20, 9, 0), + datetime(1998, 12, 17, 9, 0)]) + + def testYearlyByMonthAndWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 8, 9, 0)]) + + def testYearlyByMonthAndNWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(1), TH(-1)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 6, 9, 0), + datetime(1998, 1, 29, 9, 0), + datetime(1998, 3, 3, 9, 0)]) + + def testYearlyByMonthAndNWeekDayLarge(self): + # This is interesting because the TH(-3) ends up before + # the TU(3). + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + byweekday=(TU(3), TH(-3)), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 15, 9, 0), + datetime(1998, 1, 20, 9, 0), + datetime(1998, 3, 12, 9, 0)]) + + def testYearlyByMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 2, 3, 9, 0), + datetime(1998, 3, 3, 9, 0)]) + + def testYearlyByMonthAndMonthDayAndWeekDay(self): + self.assertEqual(list(rrule(YEARLY, + count=3, + bymonth=(1, 3), + bymonthday=(1, 3), + byweekday=(TU, TH), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1998, 1, 1, 9, 0), + datetime(1998, 3, 3, 9, 0), + datetime(2001, 3, 1, 9, 0)]) + + def testYearlyByYearDay(self): + self.assertEqual(list(rrule(YEARLY, + count=4, + byyearday=(1, 100, 200, 365), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), + datetime(1998, 7, 19, 9, 0)]) + + def testYearlyByYearDayNeg(self): + self.assertEqual(list(rrule(YEARLY, + count=4, + byyearday=(-365, -266, -166, -1), + dtstart=datetime(1997, 9, 2, 9, 0))), + [datetime(1997, 12, 31, 9, 0), + datetime(1998, 1, 1, 9, 0), + datetime(1998, 4, 10, 9, 0), | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_tz.py ^ |
@@ -0,0 +1,2811 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from ._common import PicklableMixin +from ._common import TZEnvContext, TZWinContext +from ._common import ComparesEqual + +from datetime import datetime, timedelta +from datetime import time as dt_time +from datetime import tzinfo +from six import PY2 +from io import BytesIO, StringIO +import unittest + +import sys +import base64 +import copy +import gc +import weakref + +from functools import partial + +IS_WIN = sys.platform.startswith('win') + +import pytest + +# dateutil imports +from dateutil.relativedelta import relativedelta, SU, TH +from dateutil.parser import parse +from dateutil import tz as tz +from dateutil import zoneinfo + +try: + from dateutil import tzwin +except ImportError as e: + if IS_WIN: + raise e + else: + pass + +MISSING_TARBALL = ("This test fails if you don't have the dateutil " + "timezone file installed. Please read the README") + +TZFILE_EST5EDT = b""" +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAADrAAAABAAAABCeph5wn7rrYKCGAHCh +ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e +S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0 +YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg +yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db +wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW +8uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b +YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g +BGD9cAVQ4GAGQN9wBzDCYAeNGXAJEKRgCa2U8ArwhmAL4IVwDNmi4A3AZ3AOuYTgD6mD8BCZZuAR +iWXwEnlI4BNpR/AUWSrgFUkp8BY5DOAXKQvwGCIpYBkI7fAaAgtgGvIKcBvh7WAc0exwHcHPYB6x +znAfobFgIHYA8CGBk2AiVeLwI2qv4CQ1xPAlSpHgJhWm8Ccqc+An/sNwKQpV4CnepXAq6jfgK76H +cCzTVGAtnmlwLrM2YC9+S3AwkxhgMWdn8DJy+mAzR0nwNFLcYDUnK/A2Mr5gNwcN8Dgb2uA45u/w +Ofu84DrG0fA7257gPK/ucD27gOA+j9BwP5ti4EBvsnBBhH9gQk+UcENkYWBEL3ZwRURDYEYPWHBH +JCVgR/h08EkEB2BJ2FbwSuPpYEu4OPBMzQXgTZga8E6s5+BPd/zwUIzJ4FFhGXBSbKvgU0D7cFRM +jeBVIN1wVixv4FcAv3BYFYxgWOChcFn1bmBawINwW9VQYFypn/BdtTJgXomB8F+VFGBgaWPwYX4w +4GJJRfBjXhLgZCkn8GU99OBmEkRwZx3W4GfyJnBo/bjgadIIcGrdmuBrsepwbMa3YG2RzHBupplg +b3GucHCGe2BxWsrwcmZdYHM6rPB0Rj9gdRqO8HYvW+B2+nDweA894HjaUvB57x/gero08HvPAeB8 +o1Fwfa7j4H6DM3B/jsXgAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU +AEVQVAAAAAABAAAAAQ== +""" + +EUROPE_HELSINKI = b""" +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAAAAAB1AAAABQAAAA2kc28Yy85RYMy/hdAV +I+uQFhPckBcDzZAX876QGOOvkBnToJAaw5GQG7y9EBysrhAdnJ8QHoyQEB98gRAgbHIQIVxjECJM +VBAjPEUQJCw2ECUcJxAmDBgQJwVDkCf1NJAo5SWQKdUWkCrFB5ArtPiQLKTpkC2U2pAuhMuQL3S8 +kDBkrZAxXdkQMnK0EDM9uxA0UpYQNR2dEDYyeBA2/X8QOBuUkDjdYRA5+3aQOr1DEDvbWJA8pl+Q +Pbs6kD6GQZA/mxyQQGYjkEGEORBCRgWQQ2QbEEQl55BFQ/0QRgXJkEcj3xBH7uYQSQPBEEnOyBBK +46MQS66qEEzMv5BNjowQTqyhkE9ubhBQjIOQUVeKkFJsZZBTN2yQVExHkFUXTpBWLCmQVvcwkFgV +RhBY1xKQWfUoEFq29JBb1QoQXKAREF207BBef/MQX5TOEGBf1RBhfeqQYj+3EGNdzJBkH5kQZT2u +kGYItZBnHZCQZ+iXkGj9cpBpyHmQat1UkGuoW5BsxnEQbYg9kG6mUxBvaB+QcIY1EHFRPBByZhcQ +czEeEHRF+RB1EQAQdi8VkHbw4hB4DveQeNDEEHnu2ZB6sKYQe867kHyZwpB9rp2QfnmkkH+Of5AC +AQIDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQD +BAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAME +AwQAABdoAAAAACowAQQAABwgAAkAACowAQQAABwgAAlITVQARUVTVABFRVQAAAAAAQEAAAABAQ== +""" + +NEW_YORK = b""" +VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAABcAAADrAAAABAAAABCeph5wn7rrYKCGAHCh +ms1gomXicKOD6eCkaq5wpTWnYKZTyvCnFYlgqDOs8Kj+peCqE47wqt6H4KvzcPCsvmngrdNS8K6e +S+CvszTwsH4t4LGcUXCyZ0pgs3wzcLRHLGC1XBVwticOYLc793C4BvBguRvZcLnm0mC7BPXwu8a0 +YLzk1/C9r9DgvsS58L+PsuDApJvwwW+U4MKEffDDT3bgxGRf8MUvWODGTXxwxw864MgtXnDI+Fdg +yg1AcMrYOWDLiPBw0iP0cNJg++DTdeTw1EDd4NVVxvDWIL/g1zWo8NgAoeDZFYrw2eCD4Nr+p3Db +wGXg3N6JcN2pgmDevmtw34lkYOCeTXDhaUZg4n4vcONJKGDkXhFw5Vcu4OZHLfDnNxDg6CcP8OkW +8uDqBvHw6vbU4Ovm0/Ds1rbg7ca18O6/02Dvr9Jw8J+1YPGPtHDyf5dg82+WcPRfeWD1T3hw9j9b +YPcvWnD4KHfg+Q88cPoIWeD6+Fjw++g74PzYOvD9yB3g/rgc8P+n/+AAl/7wAYfh4AJ34PADcP5g +BGD9cAVQ4GEGQN9yBzDCYgeNGXMJEKRjCa2U9ArwhmQL4IV1DNmi5Q3AZ3YOuYTmD6mD9xCZZucR +iWX4EnlI6BNpR/kUWSrpFUkp+RY5DOoXKQv6GCIpaxkI7fsaAgtsGvIKfBvh7Wwc0ex8HcHPbR6x +zn0fobFtIHYA/SGBk20iVeL+I2qv7iQ1xP4lSpHuJhWm/ycqc+8n/sOAKQpV8CnepYAq6jfxK76H +gSzTVHItnmmCLrM2cy9+S4MwkxhzMWdoBDJy+nQzR0oENFLcdTUnLAU2Mr51NwcOBjgb2vY45vAG +Ofu89jrG0gY72572PK/uhj27gPY+j9CGP5ti9kBvsoZBhH92Qk+UhkNkYXZEL3aHRURDd0XzqQdH +LV/3R9OLB0kNQfdJs20HSu0j90uciYdM1kB3TXxrh062IndPXE2HUJYEd1E8L4dSdeZ3UxwRh1RV +yHdU+/OHVjWqd1blEAdYHsb3WMTyB1n+qPdapNQHW96K91yEtgddvmz3XmSYB1+eTvdgTbSHYYdr +d2ItlodjZ013ZA14h2VHL3dl7VqHZycRd2fNPIdpBvN3aa0eh2rm1XdrljsHbM/x9212HQdur9P3 +b1X/B3CPtfdxNeEHcm+X93MVwwd0T3n3dP7fh3Y4lnd23sGHeBh4d3i+o4d5+Fp3ep6Fh3vYPHd8 +fmeHfbged35eSYd/mAB3AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAgMBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA +AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAB +AAEAAQABAAEAAQABAAEAAQABAAEAAf//x8ABAP//ubAABP//x8ABCP//x8ABDEVEVABFU1QARVdU +AEVQVAAEslgAAAAAAQWk7AEAAAACB4YfggAAAAMJZ1MDAAAABAtIhoQAAAAFDSsLhQAAAAYPDD8G +AAAABxDtcocAAAAIEs6mCAAAAAkVn8qJAAAACheA/goAAAALGWIxiwAAAAwdJeoMAAAADSHa5Q0A +AAAOJZ6djgAAAA8nf9EPAAAAECpQ9ZAAAAARLDIpEQAAABIuE1ySAAAAEzDnJBMAAAAUM7hIlAAA +ABU2jBAVAAAAFkO3G5YAAAAXAAAAAQAAAAE= +""" + +TZICAL_EST5EDT = """ +BEGIN:VTIMEZONE +TZID:US-Eastern +LAST-MODIFIED:19870101T000000Z +TZURL:http://zones.stds_r_us.net/tz/US-Eastern +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:EST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +TZNAME:EDT +END:DAYLIGHT +END:VTIMEZONE +""" + +TZICAL_PST8PDT = """ +BEGIN:VTIMEZONE +TZID:US-Pacific +LAST-MODIFIED:19870101T000000Z +BEGIN:STANDARD +DTSTART:19671029T020000 +RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +TZNAME:PST +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19870405T020000 +RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +TZNAME:PDT +END:DAYLIGHT +END:VTIMEZONE +""" + +EST_TUPLE = ('EST', timedelta(hours=-5), timedelta(hours=0)) +EDT_TUPLE = ('EDT', timedelta(hours=-4), timedelta(hours=1)) + +SUPPORTS_SUB_MINUTE_OFFSETS = sys.version_info >= (3, 6) + + +### +# Helper functions +def get_timezone_tuple(dt): + """Retrieve a (tzname, utcoffset, dst) tuple for a given DST""" + return dt.tzname(), dt.utcoffset(), dt.dst() + + +### +# Mix-ins +class context_passthrough(object): + def __init__(*args, **kwargs): + pass + + def __enter__(*args, **kwargs): + pass + + def __exit__(*args, **kwargs): + pass + + +class TzFoldMixin(object): + """ Mix-in class for testing ambiguous times """ + def gettz(self, tzname): + raise NotImplementedError + + def _get_tzname(self, tzname): + return tzname + + def _gettz_context(self, tzname): + return context_passthrough() + + def testFoldPositiveUTCOffset(self): + # Test that we can resolve ambiguous times + tzname = self._get_tzname('Australia/Sydney') + + with self._gettz_context(tzname): + SYD = self.gettz(tzname) + | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/test/test_utils.py ^ |
@@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from datetime import timedelta, datetime + +from dateutil import tz +from dateutil import utils +from dateutil.tz import UTC +from dateutil.utils import within_delta + +from freezegun import freeze_time + +NYC = tz.gettz("America/New_York") + + +@freeze_time(datetime(2014, 12, 15, 1, 21, 33, 4003)) +def test_utils_today(): + assert utils.today() == datetime(2014, 12, 15, 0, 0, 0) + + +@freeze_time(datetime(2014, 12, 15, 12), tz_offset=5) +def test_utils_today_tz_info(): + assert utils.today(NYC) == datetime(2014, 12, 15, 0, 0, 0, tzinfo=NYC) + + +@freeze_time(datetime(2014, 12, 15, 23), tz_offset=5) +def test_utils_today_tz_info_different_day(): + assert utils.today(UTC) == datetime(2014, 12, 16, 0, 0, 0, tzinfo=UTC) + + +def test_utils_default_tz_info_naive(): + dt = datetime(2014, 9, 14, 9, 30) + assert utils.default_tzinfo(dt, NYC).tzinfo is NYC + + +def test_utils_default_tz_info_aware(): + dt = datetime(2014, 9, 14, 9, 30, tzinfo=UTC) + assert utils.default_tzinfo(dt, NYC).tzinfo is UTC + + +def test_utils_within_delta(): + d1 = datetime(2016, 1, 1, 12, 14, 1, 9) + d2 = d1.replace(microsecond=15) + + assert within_delta(d1, d2, timedelta(seconds=1)) + assert not within_delta(d1, d2, timedelta(microseconds=1)) + + +def test_utils_within_delta_with_negative_delta(): + d1 = datetime(2016, 1, 1) + d2 = datetime(2015, 12, 31) + + assert within_delta(d2, d1, timedelta(days=-1)) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/tz/__init__.py ^ |
@@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from .tz import * +from .tz import __doc__ + +__all__ = ["tzutc", "tzoffset", "tzlocal", "tzfile", "tzrange", + "tzstr", "tzical", "tzwin", "tzwinlocal", "gettz", + "enfold", "datetime_ambiguous", "datetime_exists", + "resolve_imaginary", "UTC", "DeprecatedTzFormatWarning"] + + +class DeprecatedTzFormatWarning(Warning): + """Warning raised when time zones are parsed from deprecated formats.""" | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/tz/_common.py ^ |
@@ -0,0 +1,419 @@ +from six import PY2 + +from functools import wraps + +from datetime import datetime, timedelta, tzinfo + + +ZERO = timedelta(0) + +__all__ = ['tzname_in_python2', 'enfold'] + + +def tzname_in_python2(namefunc): + """Change unicode output into bytestrings in Python 2 + + tzname() API changed in Python 3. It used to return bytes, but was changed + to unicode strings + """ + if PY2: + @wraps(namefunc) + def adjust_encoding(*args, **kwargs): + name = namefunc(*args, **kwargs) + if name is not None: + name = name.encode() + + return name + + return adjust_encoding + else: + return namefunc + + +# The following is adapted from Alexander Belopolsky's tz library +# https://github.com/abalkin/tz +if hasattr(datetime, 'fold'): + # This is the pre-python 3.6 fold situation + def enfold(dt, fold=1): + """ + Provides a unified interface for assigning the ``fold`` attribute to + datetimes both before and after the implementation of PEP-495. + + :param fold: + The value for the ``fold`` attribute in the returned datetime. This + should be either 0 or 1. + + :return: + Returns an object for which ``getattr(dt, 'fold', 0)`` returns + ``fold`` for all versions of Python. In versions prior to + Python 3.6, this is a ``_DatetimeWithFold`` object, which is a + subclass of :py:class:`datetime.datetime` with the ``fold`` + attribute added, if ``fold`` is 1. + + .. versionadded:: 2.6.0 + """ + return dt.replace(fold=fold) + +else: + class _DatetimeWithFold(datetime): + """ + This is a class designed to provide a PEP 495-compliant interface for + Python versions before 3.6. It is used only for dates in a fold, so + the ``fold`` attribute is fixed at ``1``. + + .. versionadded:: 2.6.0 + """ + __slots__ = () + + def replace(self, *args, **kwargs): + """ + Return a datetime with the same attributes, except for those + attributes given new values by whichever keyword arguments are + specified. Note that tzinfo=None can be specified to create a naive + datetime from an aware datetime with no conversion of date and time + data. + + This is reimplemented in ``_DatetimeWithFold`` because pypy3 will + return a ``datetime.datetime`` even if ``fold`` is unchanged. + """ + argnames = ( + 'year', 'month', 'day', 'hour', 'minute', 'second', + 'microsecond', 'tzinfo' + ) + + for arg, argname in zip(args, argnames): + if argname in kwargs: + raise TypeError('Duplicate argument: {}'.format(argname)) + + kwargs[argname] = arg + + for argname in argnames: + if argname not in kwargs: + kwargs[argname] = getattr(self, argname) + + dt_class = self.__class__ if kwargs.get('fold', 1) else datetime + + return dt_class(**kwargs) + + @property + def fold(self): + return 1 + + def enfold(dt, fold=1): + """ + Provides a unified interface for assigning the ``fold`` attribute to + datetimes both before and after the implementation of PEP-495. + + :param fold: + The value for the ``fold`` attribute in the returned datetime. This + should be either 0 or 1. + + :return: + Returns an object for which ``getattr(dt, 'fold', 0)`` returns + ``fold`` for all versions of Python. In versions prior to + Python 3.6, this is a ``_DatetimeWithFold`` object, which is a + subclass of :py:class:`datetime.datetime` with the ``fold`` + attribute added, if ``fold`` is 1. + + .. versionadded:: 2.6.0 + """ + if getattr(dt, 'fold', 0) == fold: + return dt + + args = dt.timetuple()[:6] + args += (dt.microsecond, dt.tzinfo) + + if fold: + return _DatetimeWithFold(*args) + else: + return datetime(*args) + + +def _validate_fromutc_inputs(f): + """ + The CPython version of ``fromutc`` checks that the input is a ``datetime`` + object and that ``self`` is attached as its ``tzinfo``. + """ + @wraps(f) + def fromutc(self, dt): + if not isinstance(dt, datetime): + raise TypeError("fromutc() requires a datetime argument") + if dt.tzinfo is not self: + raise ValueError("dt.tzinfo is not self") + + return f(self, dt) + + return fromutc + + +class _tzinfo(tzinfo): + """ + Base class for all ``dateutil`` ``tzinfo`` objects. + """ + + def is_ambiguous(self, dt): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + + + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + + dt = dt.replace(tzinfo=self) + + wall_0 = enfold(dt, fold=0) + wall_1 = enfold(dt, fold=1) + + same_offset = wall_0.utcoffset() == wall_1.utcoffset() + same_dt = wall_0.replace(tzinfo=None) == wall_1.replace(tzinfo=None) + + return same_dt and not same_offset + + def _fold_status(self, dt_utc, dt_wall): + """ + Determine the fold status of a "wall" datetime, given a representation + of the same datetime as a (naive) UTC datetime. This is calculated based + on the assumption that ``dt.utcoffset() - dt.dst()`` is constant for all + datetimes, and that this offset is the actual number of hours separating + ``dt_utc`` and ``dt_wall``. + + :param dt_utc: + Representation of the datetime as UTC + + :param dt_wall: + Representation of the datetime as "wall time". This parameter must + either have a `fold` attribute or have a fold-naive + :class:`datetime.tzinfo` attached, otherwise the calculation may + fail. + """ + if self.is_ambiguous(dt_wall): + delta_wall = dt_wall - dt_utc + _fold = int(delta_wall == (dt_utc.utcoffset() - dt_utc.dst())) + else: | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/tz/_factories.py ^ |
@@ -0,0 +1,80 @@ +from datetime import timedelta +import weakref +from collections import OrderedDict + +from six.moves import _thread + + +class _TzSingleton(type): + def __init__(cls, *args, **kwargs): + cls.__instance = None + super(_TzSingleton, cls).__init__(*args, **kwargs) + + def __call__(cls): + if cls.__instance is None: + cls.__instance = super(_TzSingleton, cls).__call__() + return cls.__instance + + +class _TzFactory(type): + def instance(cls, *args, **kwargs): + """Alternate constructor that returns a fresh instance""" + return type.__call__(cls, *args, **kwargs) + + +class _TzOffsetFactory(_TzFactory): + def __init__(cls, *args, **kwargs): + cls.__instances = weakref.WeakValueDictionary() + cls.__strong_cache = OrderedDict() + cls.__strong_cache_size = 8 + + cls._cache_lock = _thread.allocate_lock() + + def __call__(cls, name, offset): + if isinstance(offset, timedelta): + key = (name, offset.total_seconds()) + else: + key = (name, offset) + + instance = cls.__instances.get(key, None) + if instance is None: + instance = cls.__instances.setdefault(key, + cls.instance(name, offset)) + + # This lock may not be necessary in Python 3. See GH issue #901 + with cls._cache_lock: + cls.__strong_cache[key] = cls.__strong_cache.pop(key, instance) + + # Remove an item if the strong cache is overpopulated + if len(cls.__strong_cache) > cls.__strong_cache_size: + cls.__strong_cache.popitem(last=False) + + return instance + + +class _TzStrFactory(_TzFactory): + def __init__(cls, *args, **kwargs): + cls.__instances = weakref.WeakValueDictionary() + cls.__strong_cache = OrderedDict() + cls.__strong_cache_size = 8 + + cls.__cache_lock = _thread.allocate_lock() + + def __call__(cls, s, posix_offset=False): + key = (s, posix_offset) + instance = cls.__instances.get(key, None) + + if instance is None: + instance = cls.__instances.setdefault(key, + cls.instance(s, posix_offset)) + + # This lock may not be necessary in Python 3. See GH issue #901 + with cls.__cache_lock: + cls.__strong_cache[key] = cls.__strong_cache.pop(key, instance) + + # Remove an item if the strong cache is overpopulated + if len(cls.__strong_cache) > cls.__strong_cache_size: + cls.__strong_cache.popitem(last=False) + + return instance + | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/tz/tz.py ^ |
@@ -0,0 +1,1849 @@ +# -*- coding: utf-8 -*- +""" +This module offers timezone implementations subclassing the abstract +:py:class:`datetime.tzinfo` type. There are classes to handle tzfile format +files (usually are in :file:`/etc/localtime`, :file:`/usr/share/zoneinfo`, +etc), TZ environment string (in all known formats), given ranges (with help +from relative deltas), local machine timezone, fixed offset timezone, and UTC +timezone. +""" +import datetime +import struct +import time +import sys +import os +import bisect +import weakref +from collections import OrderedDict + +import six +from six import string_types +from six.moves import _thread +from ._common import tzname_in_python2, _tzinfo +from ._common import tzrangebase, enfold +from ._common import _validate_fromutc_inputs + +from ._factories import _TzSingleton, _TzOffsetFactory +from ._factories import _TzStrFactory +try: + from .win import tzwin, tzwinlocal +except ImportError: + tzwin = tzwinlocal = None + +# For warning about rounding tzinfo +from warnings import warn + +ZERO = datetime.timedelta(0) +EPOCH = datetime.datetime.utcfromtimestamp(0) +EPOCHORDINAL = EPOCH.toordinal() + + +@six.add_metaclass(_TzSingleton) +class tzutc(datetime.tzinfo): + """ + This is a tzinfo object that represents the UTC time zone. + + **Examples:** + + .. doctest:: + + >>> from datetime import * + >>> from dateutil.tz import * + + >>> datetime.now() + datetime.datetime(2003, 9, 27, 9, 40, 1, 521290) + + >>> datetime.now(tzutc()) + datetime.datetime(2003, 9, 27, 12, 40, 12, 156379, tzinfo=tzutc()) + + >>> datetime.now(tzutc()).tzname() + 'UTC' + + .. versionchanged:: 2.7.0 + ``tzutc()`` is now a singleton, so the result of ``tzutc()`` will + always return the same object. + + .. doctest:: + + >>> from dateutil.tz import tzutc, UTC + >>> tzutc() is tzutc() + True + >>> tzutc() is UTC + True + """ + def utcoffset(self, dt): + return ZERO + + def dst(self, dt): + return ZERO + + @tzname_in_python2 + def tzname(self, dt): + return "UTC" + + def is_ambiguous(self, dt): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + + + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + return False + + @_validate_fromutc_inputs + def fromutc(self, dt): + """ + Fast track version of fromutc() returns the original ``dt`` object for + any valid :py:class:`datetime.datetime` object. + """ + return dt + + def __eq__(self, other): + if not isinstance(other, (tzutc, tzoffset)): + return NotImplemented + + return (isinstance(other, tzutc) or + (isinstance(other, tzoffset) and other._offset == ZERO)) + + __hash__ = None + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + return "%s()" % self.__class__.__name__ + + __reduce__ = object.__reduce__ + + +#: Convenience constant providing a :class:`tzutc()` instance +#: +#: .. versionadded:: 2.7.0 +UTC = tzutc() + + +@six.add_metaclass(_TzOffsetFactory) +class tzoffset(datetime.tzinfo): + """ + A simple class for representing a fixed offset from UTC. + + :param name: + The timezone name, to be returned when ``tzname()`` is called. + :param offset: + The time zone offset in seconds, or (since version 2.6.0, represented + as a :py:class:`datetime.timedelta` object). + """ + def __init__(self, name, offset): + self._name = name + + try: + # Allow a timedelta + offset = offset.total_seconds() + except (TypeError, AttributeError): + pass + + self._offset = datetime.timedelta(seconds=_get_supported_offset(offset)) + + def utcoffset(self, dt): + return self._offset + + def dst(self, dt): + return ZERO + + @tzname_in_python2 + def tzname(self, dt): + return self._name + + @_validate_fromutc_inputs + def fromutc(self, dt): + return dt + self._offset + + def is_ambiguous(self, dt): + """ + Whether or not the "wall time" of a given datetime is ambiguous in this + zone. + + :param dt: + A :py:class:`datetime.datetime`, naive or time zone aware. + :return: + Returns ``True`` if ambiguous, ``False`` otherwise. + + .. versionadded:: 2.6.0 + """ + return False + + def __eq__(self, other): + if not isinstance(other, tzoffset): + return NotImplemented + + return self._offset == other._offset + + __hash__ = None + + def __ne__(self, other): + return not (self == other) + + def __repr__(self): + return "%s(%s, %s)" % (self.__class__.__name__, + repr(self._name), + int(self._offset.total_seconds())) + + __reduce__ = object.__reduce__ + | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/tz/win.py ^ |
@@ -0,0 +1,370 @@ +# -*- coding: utf-8 -*- +""" +This module provides an interface to the native time zone data on Windows, +including :py:class:`datetime.tzinfo` implementations. + +Attempting to import this module on a non-Windows platform will raise an +:py:obj:`ImportError`. +""" +# This code was originally contributed by Jeffrey Harris. +import datetime +import struct + +from six.moves import winreg +from six import text_type + +try: + import ctypes + from ctypes import wintypes +except ValueError: + # ValueError is raised on non-Windows systems for some horrible reason. + raise ImportError("Running tzwin on non-Windows system") + +from ._common import tzrangebase + +__all__ = ["tzwin", "tzwinlocal", "tzres"] + +ONEWEEK = datetime.timedelta(7) + +TZKEYNAMENT = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones" +TZKEYNAME9X = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones" +TZLOCALKEYNAME = r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation" + + +def _settzkeyname(): + handle = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) + try: + winreg.OpenKey(handle, TZKEYNAMENT).Close() + TZKEYNAME = TZKEYNAMENT + except WindowsError: + TZKEYNAME = TZKEYNAME9X + handle.Close() + return TZKEYNAME + + +TZKEYNAME = _settzkeyname() + + +class tzres(object): + """ + Class for accessing ``tzres.dll``, which contains timezone name related + resources. + + .. versionadded:: 2.5.0 + """ + p_wchar = ctypes.POINTER(wintypes.WCHAR) # Pointer to a wide char + + def __init__(self, tzres_loc='tzres.dll'): + # Load the user32 DLL so we can load strings from tzres + user32 = ctypes.WinDLL('user32') + + # Specify the LoadStringW function + user32.LoadStringW.argtypes = (wintypes.HINSTANCE, + wintypes.UINT, + wintypes.LPWSTR, + ctypes.c_int) + + self.LoadStringW = user32.LoadStringW + self._tzres = ctypes.WinDLL(tzres_loc) + self.tzres_loc = tzres_loc + + def load_name(self, offset): + """ + Load a timezone name from a DLL offset (integer). + + >>> from dateutil.tzwin import tzres + >>> tzr = tzres() + >>> print(tzr.load_name(112)) + 'Eastern Standard Time' + + :param offset: + A positive integer value referring to a string from the tzres dll. + + .. note:: + + Offsets found in the registry are generally of the form + ``@tzres.dll,-114``. The offset in this case is 114, not -114. + + """ + resource = self.p_wchar() + lpBuffer = ctypes.cast(ctypes.byref(resource), wintypes.LPWSTR) + nchar = self.LoadStringW(self._tzres._handle, offset, lpBuffer, 0) + return resource[:nchar] + + def name_from_string(self, tzname_str): + """ + Parse strings as returned from the Windows registry into the time zone + name as defined in the registry. + + >>> from dateutil.tzwin import tzres + >>> tzr = tzres() + >>> print(tzr.name_from_string('@tzres.dll,-251')) + 'Dateline Daylight Time' + >>> print(tzr.name_from_string('Eastern Standard Time')) + 'Eastern Standard Time' + + :param tzname_str: + A timezone name string as returned from a Windows registry key. + + :return: + Returns the localized timezone string from tzres.dll if the string + is of the form `@tzres.dll,-offset`, else returns the input string. + """ + if not tzname_str.startswith('@'): + return tzname_str + + name_splt = tzname_str.split(',-') + try: + offset = int(name_splt[1]) + except: + raise ValueError("Malformed timezone string.") + + return self.load_name(offset) + + +class tzwinbase(tzrangebase): + """tzinfo class based on win32's timezones available in the registry.""" + def __init__(self): + raise NotImplementedError('tzwinbase is an abstract base class') + + def __eq__(self, other): + # Compare on all relevant dimensions, including name. + if not isinstance(other, tzwinbase): + return NotImplemented + + return (self._std_offset == other._std_offset and + self._dst_offset == other._dst_offset and + self._stddayofweek == other._stddayofweek and + self._dstdayofweek == other._dstdayofweek and + self._stdweeknumber == other._stdweeknumber and + self._dstweeknumber == other._dstweeknumber and + self._stdhour == other._stdhour and + self._dsthour == other._dsthour and + self._stdminute == other._stdminute and + self._dstminute == other._dstminute and + self._std_abbr == other._std_abbr and + self._dst_abbr == other._dst_abbr) + + @staticmethod + def list(): + """Return a list of all time zones known to the system.""" + with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: + with winreg.OpenKey(handle, TZKEYNAME) as tzkey: + result = [winreg.EnumKey(tzkey, i) + for i in range(winreg.QueryInfoKey(tzkey)[0])] + return result + + def display(self): + """ + Return the display name of the time zone. + """ + return self._display + + def transitions(self, year): + """ + For a given year, get the DST on and off transition times, expressed + always on the standard time side. For zones with no transitions, this + function returns ``None``. + + :param year: + The year whose transitions you would like to query. + + :return: + Returns a :class:`tuple` of :class:`datetime.datetime` objects, + ``(dston, dstoff)`` for zones with an annual DST transition, or + ``None`` for fixed offset zones. + """ + + if not self.hasdst: + return None + + dston = picknthweekday(year, self._dstmonth, self._dstdayofweek, + self._dsthour, self._dstminute, + self._dstweeknumber) + + dstoff = picknthweekday(year, self._stdmonth, self._stddayofweek, + self._stdhour, self._stdminute, + self._stdweeknumber) + + # Ambiguous dates default to the STD side + dstoff -= self._dst_base_offset + + return dston, dstoff + + def _get_hasdst(self): + return self._dstmonth != 0 + + @property + def _dst_base_offset(self): + return self._dst_base_offset_ | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/tzwin.py ^ |
@@ -0,0 +1,2 @@ +# tzwin has moved to dateutil.tz.win +from .tz.win import * | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/utils.py ^ |
@@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +""" +This module offers general convenience and utility functions for dealing with +datetimes. + +.. versionadded:: 2.7.0 +""" +from __future__ import unicode_literals + +from datetime import datetime, time + + +def today(tzinfo=None): + """ + Returns a :py:class:`datetime` representing the current day at midnight + + :param tzinfo: + The time zone to attach (also used to determine the current day). + + :return: + A :py:class:`datetime.datetime` object representing the current day + at midnight. + """ + + dt = datetime.now(tzinfo) + return datetime.combine(dt.date(), time(0, tzinfo=tzinfo)) + + +def default_tzinfo(dt, tzinfo): + """ + Sets the ``tzinfo`` parameter on naive datetimes only + + This is useful for example when you are provided a datetime that may have + either an implicit or explicit time zone, such as when parsing a time zone + string. + + .. doctest:: + + >>> from dateutil.tz import tzoffset + >>> from dateutil.parser import parse + >>> from dateutil.utils import default_tzinfo + >>> dflt_tz = tzoffset("EST", -18000) + >>> print(default_tzinfo(parse('2014-01-01 12:30 UTC'), dflt_tz)) + 2014-01-01 12:30:00+00:00 + >>> print(default_tzinfo(parse('2014-01-01 12:30'), dflt_tz)) + 2014-01-01 12:30:00-05:00 + + :param dt: + The datetime on which to replace the time zone + + :param tzinfo: + The :py:class:`datetime.tzinfo` subclass instance to assign to + ``dt`` if (and only if) it is naive. + + :return: + Returns an aware :py:class:`datetime.datetime`. + """ + if dt.tzinfo is not None: + return dt + else: + return dt.replace(tzinfo=tzinfo) + + +def within_delta(dt1, dt2, delta): + """ + Useful for comparing two datetimes that may have a negligible difference + to be considered equal. + """ + delta = abs(delta) + difference = dt1 - dt2 + return -delta <= difference <= delta | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/zoneinfo/__init__.py ^ |
@@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- +import warnings +import json + +from tarfile import TarFile +from pkgutil import get_data +from io import BytesIO + +from dateutil.tz import tzfile as _tzfile + +__all__ = ["get_zonefile_instance", "gettz", "gettz_db_metadata"] + +ZONEFILENAME = "dateutil-zoneinfo.tar.gz" +METADATA_FN = 'METADATA' + + +class tzfile(_tzfile): + def __reduce__(self): + return (gettz, (self._filename,)) + + +def getzoneinfofile_stream(): + try: + return BytesIO(get_data(__name__, ZONEFILENAME)) + except IOError as e: # TODO switch to FileNotFoundError? + warnings.warn("I/O error({0}): {1}".format(e.errno, e.strerror)) + return None + + +class ZoneInfoFile(object): + def __init__(self, zonefile_stream=None): + if zonefile_stream is not None: + with TarFile.open(fileobj=zonefile_stream) as tf: + self.zones = {zf.name: tzfile(tf.extractfile(zf), filename=zf.name) + for zf in tf.getmembers() + if zf.isfile() and zf.name != METADATA_FN} + # deal with links: They'll point to their parent object. Less + # waste of memory + links = {zl.name: self.zones[zl.linkname] + for zl in tf.getmembers() if + zl.islnk() or zl.issym()} + self.zones.update(links) + try: + metadata_json = tf.extractfile(tf.getmember(METADATA_FN)) + metadata_str = metadata_json.read().decode('UTF-8') + self.metadata = json.loads(metadata_str) + except KeyError: + # no metadata in tar file + self.metadata = None + else: + self.zones = {} + self.metadata = None + + def get(self, name, default=None): + """ + Wrapper for :func:`ZoneInfoFile.zones.get`. This is a convenience method + for retrieving zones from the zone dictionary. + + :param name: + The name of the zone to retrieve. (Generally IANA zone names) + + :param default: + The value to return in the event of a missing key. + + .. versionadded:: 2.6.0 + + """ + return self.zones.get(name, default) + + +# The current API has gettz as a module function, although in fact it taps into +# a stateful class. So as a workaround for now, without changing the API, we +# will create a new "global" class instance the first time a user requests a +# timezone. Ugly, but adheres to the api. +# +# TODO: Remove after deprecation period. +_CLASS_ZONE_INSTANCE = [] + + +def get_zonefile_instance(new_instance=False): + """ + This is a convenience function which provides a :class:`ZoneInfoFile` + instance using the data provided by the ``dateutil`` package. By default, it + caches a single instance of the ZoneInfoFile object and returns that. + + :param new_instance: + If ``True``, a new instance of :class:`ZoneInfoFile` is instantiated and + used as the cached instance for the next call. Otherwise, new instances + are created only as necessary. + + :return: + Returns a :class:`ZoneInfoFile` object. + + .. versionadded:: 2.6 + """ + if new_instance: + zif = None + else: + zif = getattr(get_zonefile_instance, '_cached_instance', None) + + if zif is None: + zif = ZoneInfoFile(getzoneinfofile_stream()) + + get_zonefile_instance._cached_instance = zif + + return zif + + +def gettz(name): + """ + This retrieves a time zone from the local zoneinfo tarball that is packaged + with dateutil. + + :param name: + An IANA-style time zone name, as found in the zoneinfo file. + + :return: + Returns a :class:`dateutil.tz.tzfile` time zone object. + + .. warning:: + It is generally inadvisable to use this function, and it is only + provided for API compatibility with earlier versions. This is *not* + equivalent to ``dateutil.tz.gettz()``, which selects an appropriate + time zone based on the inputs, favoring system zoneinfo. This is ONLY + for accessing the dateutil-specific zoneinfo (which may be out of + date compared to the system zoneinfo). + + .. deprecated:: 2.6 + If you need to use a specific zoneinfofile over the system zoneinfo, + instantiate a :class:`dateutil.zoneinfo.ZoneInfoFile` object and call + :func:`dateutil.zoneinfo.ZoneInfoFile.get(name)` instead. + + Use :func:`get_zonefile_instance` to retrieve an instance of the + dateutil-provided zoneinfo. + """ + warnings.warn("zoneinfo.gettz() will be removed in future versions, " + "to use the dateutil-provided zoneinfo files, instantiate a " + "ZoneInfoFile object and use ZoneInfoFile.zones.get() " + "instead. See the documentation for details.", + DeprecationWarning) + + if len(_CLASS_ZONE_INSTANCE) == 0: + _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream())) + return _CLASS_ZONE_INSTANCE[0].zones.get(name) + + +def gettz_db_metadata(): + """ Get the zonefile metadata + + See `zonefile_metadata`_ + + :returns: + A dictionary with the database metadata + + .. deprecated:: 2.6 + See deprecation warning in :func:`zoneinfo.gettz`. To get metadata, + query the attribute ``zoneinfo.ZoneInfoFile.metadata``. + """ + warnings.warn("zoneinfo.gettz_db_metadata() will be removed in future " + "versions, to use the dateutil-provided zoneinfo files, " + "ZoneInfoFile object and query the 'metadata' attribute " + "instead. See the documentation for details.", + DeprecationWarning) + + if len(_CLASS_ZONE_INSTANCE) == 0: + _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream())) + return _CLASS_ZONE_INSTANCE[0].metadata | ||
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz ^ | |
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dateutil/zoneinfo/rebuild.py ^ |
@@ -0,0 +1,75 @@ +import logging +import os +import tempfile +import shutil +import json +from subprocess import check_call, check_output +from tarfile import TarFile + +from dateutil.zoneinfo import METADATA_FN, ZONEFILENAME + + +def rebuild(filename, tag=None, format="gz", zonegroups=[], metadata=None): + """Rebuild the internal timezone info in dateutil/zoneinfo/zoneinfo*tar* + + filename is the timezone tarball from ``ftp.iana.org/tz``. + + """ + tmpdir = tempfile.mkdtemp() + zonedir = os.path.join(tmpdir, "zoneinfo") + moduledir = os.path.dirname(__file__) + try: + with TarFile.open(filename) as tf: + for name in zonegroups: + tf.extract(name, tmpdir) + filepaths = [os.path.join(tmpdir, n) for n in zonegroups] + + _run_zic(zonedir, filepaths) + + # write metadata file + with open(os.path.join(zonedir, METADATA_FN), 'w') as f: + json.dump(metadata, f, indent=4, sort_keys=True) + target = os.path.join(moduledir, ZONEFILENAME) + with TarFile.open(target, "w:%s" % format) as tf: + for entry in os.listdir(zonedir): + entrypath = os.path.join(zonedir, entry) + tf.add(entrypath, entry) + finally: + shutil.rmtree(tmpdir) + + +def _run_zic(zonedir, filepaths): + """Calls the ``zic`` compiler in a compatible way to get a "fat" binary. + + Recent versions of ``zic`` default to ``-b slim``, while older versions + don't even have the ``-b`` option (but default to "fat" binaries). The + current version of dateutil does not support Version 2+ TZif files, which + causes problems when used in conjunction with "slim" binaries, so this + function is used to ensure that we always get a "fat" binary. + """ + + try: + help_text = check_output(["zic", "--help"]) + except OSError as e: + _print_on_nosuchfile(e) + raise + + if b"-b " in help_text: + bloat_args = ["-b", "fat"] + else: + bloat_args = [] + + check_call(["zic"] + bloat_args + ["-d", zonedir] + filepaths) + + +def _print_on_nosuchfile(e): + """Print helpful troubleshooting message + + e is an exception raised by subprocess.check_call() + + """ + if e.errno == 2: + logging.error( + "Could not find zic. Perhaps you need to install " + "libc-bin or some other package that provides it, " + "or it's not in your PATH?") | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/dep_info.txt ^ |
@@ -0,0 +1,4 @@ +used versions: +pytz: pytz-2021.03 +dateutil: dateutil-2.8.2 + | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/micro-regions_names/de.json ^ |
@@ -0,0 +1,501 @@ +{ + "AD" : "Andorra", + "AT" : "Österreich", + "AT-02" : "Kärnten", + "AT-02-01" : "Glocknergruppe", + "AT-02-02" : "Schobergruppe", + "AT-02-03" : "Ankogelgruppe", + "AT-02-04" : "Nockberge", + "AT-02-05" : "Gurktaler Alpen", + "AT-02-06" : "Saualpe", + "AT-02-07" : "Packalpe", + "AT-02-08" : "Koralpe", + "AT-02-09" : "Kreuzeckgruppe", + "AT-02-10" : "Lienzer Dolomiten", + "AT-02-11" : "Gailtaler Alpen West", + "AT-02-12" : "Gailtaler Alpen Mitte", + "AT-02-13" : "Villacher Alpe", + "AT-02-14" : "Karnische Alpen West", + "AT-02-15" : "Karnische Alpen Mitte", + "AT-02-16" : "Karnische Alpen Ost", + "AT-02-17" : "Karawanken West", + "AT-02-18" : "Karawanken Mitte", + "AT-02-19" : "Karawanken Ost", + "AT-03" : "Niederösterreich", + "AT-03-01" : "Ybbstaler Alpen", + "AT-03-02" : "Türnitzer Alpen", + "AT-03-03" : "Gutensteiner Alpen", + "AT-03-04" : "Rax - Schneeberggebiet", + "AT-03-05" : "Semmering - Wechselgebiet", + "AT-03-06" : "Gippel - Göllergebiet", + "AT-04" : "Oberösterreich", + "AT-04-01" : "Dachstein, Gosaukamm", + "AT-04-02" : "Kalmberg, Katergebirge", + "AT-04-03" : "Totes Gebirge", + "AT-04-04" : "Phyrgas, Haller Mauern", + "AT-04-05" : "Zimnitzmassiv, Höllengbirge", + "AT-04-06" : "Traunstein, Eibenberg", + "AT-04-07" : "Kasbergblock", + "AT-04-08" : "Sengsengebirge", + "AT-04-09" : "Ennstaler Voralpen", + "AT-05" : "Salzburg", + "AT-05-01" : "Nockberge", + "AT-05-02" : "Niedere Tauern Süd", + "AT-05-03" : "Ankogelgruppe, Muhr", + "AT-05-04" : "Niedere Tauern Alpenhauptkamm", + "AT-05-05" : "Goldberggruppe Alpenhauptkamm", + "AT-05-06" : "Glocknergruppe Alpenhauptkamm", + "AT-05-07" : "Großvenedigergruppe Alpenhauptkamm", + "AT-05-08" : "Niedere Tauern Nord", + "AT-05-09" : "Goldberggruppe Nord", + "AT-05-10" : "Glocknergruppe Nord", + "AT-05-11" : "Großvenedigergruppe Nord", + "AT-05-12" : "Pongauer Grasberge", + "AT-05-13" : "Dientner Grasberge", + "AT-05-14" : "Kitzbüheler Alpen, Glemmtal", + "AT-05-15" : "Oberpinzgauer Grasberge", + "AT-05-16" : "Tennengebirge, Gosaukamm", + "AT-05-17" : "Steinernes Meer, Hochkönig, Hagengebirge, Göllstock", + "AT-05-18" : "Loferer und Leoganger Steinberge", + "AT-05-19" : "Osterhorngruppe, Gamsfeldgruppe", + "AT-05-20" : "Untersbergstock", + "AT-05-21" : "Chiemgauer Alpen, Heutal, Reiteralpe", + "AT-06" : "Steiermark", + "AT-06-01" : "Dachsteingebiet", + "AT-06-02" : "Totes Gebirge", + "AT-06-03" : "Ennstaler Alpen", + "AT-06-04" : "Schladminger Tauern", + "AT-06-05" : "Nördliche Wölzer Tauern", + "AT-06-06" : "Rottenmanner Tauern", + "AT-06-07" : "Südliche Wölzer Tauern", + "AT-06-08" : "Seckauer Tauern", + "AT-06-09" : "Eisenerzer Alpen", + "AT-06-10" : "Hochschwabgebiet", + "AT-06-11" : "Mürzsteger Alpen", + "AT-06-12" : "Mürztaler Alpen", + "AT-06-13" : "Östliche Fischbacher Alpen und Wechselgebiet", + "AT-06-14" : "Westliche Fischbacher Alpen und Grazer Bergland", + "AT-06-15" : "Stub- und Gleinalpe", + "AT-06-16" : "Koralpe", + "AT-06-17" : "Seetaler Alpen", + "AT-06-18" : "Gurktaler Alpen", + "AT-07" : "Tirol", + "AT-07-01" : "Allgäuer Alpen", + "AT-07-02" : "Östliche Lechtaler Alpen - Ammergauer Alpen", + "AT-07-03" : "Mieminger Gebirge", + "AT-07-04" : "Karwendel", + "AT-07-05" : "Brandenberger Alpen", + "AT-07-06" : "Wilder Kaiser - Waidringer Alpen", + "AT-07-07" : "Westliche Lechtaler Alpen", + "AT-07-08" : "Zentrale Lechtaler Alpen", + "AT-07-09" : "Grieskogelgruppe", + "AT-07-10" : "Westliche Verwallgruppe", + "AT-07-11" : "Östliche Verwallgruppe", + "AT-07-12" : "Silvretta", + "AT-07-13" : "Samnaungruppe", + "AT-07-14" : "Nördliche Ötztaler- und Stubaier Alpen", + "AT-07-15" : "Westliche Tuxer Alpen", + "AT-07-16" : "Östliche Tuxer Alpen", + "AT-07-17" : "Westliche Kitzbüheler Alpen", + "AT-07-18" : "Östliche Kitzbüheler Alpen", + "AT-07-19" : "Glockturmgruppe", + "AT-07-20" : "Weißkugelgruppe", + "AT-07-21" : "Gurgler Gruppe", + "AT-07-22" : "Zentrale Stubaier Alpen", + "AT-07-23" : "Nördliche Zillertaler Alpen", + "AT-07-24" : "Venedigergruppe", + "AT-07-25" : "Östliche Rieserfernergruppe", + "AT-07-26" : "Glocknergruppe", + "AT-07-27" : "Östliche Deferegger Alpen", + "AT-07-28" : "Schobergruppe", + "AT-07-29" : "Lienzer Dolomiten", + "AT-08" : "Vorarlberg", + "CH" : "Schweiz", + "CH-1111" : "Waadtländer Voralpen", + "CH-1112" : "Pays d'Enhaut", + "CH-1113" : "Aigle-Leysin", + "CH-1114" : "Bex-Villars", + "CH-1121" : "Jaun", + "CH-1122" : "Gruyère", + "CH-1211" : "Westliche Berner Voralpen", + "CH-1212" : "Östliche Berner Voralpen", + "CH-1213" : "Hohgant", + "CH-1221" : "Niedersimmental", + "CH-1222" : "Gstaad", + "CH-1223" : "Wildhorn", + "CH-1224" : "Lenk", + "CH-1225" : "Iffigen", + "CH-1226" : "Adelboden", + "CH-1227" : "Engstligen", + "CH-1228" : "Obersimmental", + "CH-1231" : "Kandersteg", + "CH-1232" : "Blüemlisalp", + "CH-1233" : "Lauterbrunnen", + "CH-1234" : "Jungfrau - Schilthorn", + "CH-1241" : "Brienz-Interlaken", + "CH-1242" : "Grindelwald", + "CH-1243" : "Schreckhorn", + "CH-1244" : "Hasliberg - Rosenlaui", + "CH-1245" : "Guttannen", + "CH-1246" : "Gadmertal", + "CH-1247" : "Grimselpass", + "CH-1311" : "Vouvry", + "CH-1312" : "Monthey-Val d'Illiez", + "CH-2111" : "Pilatus", + "CH-2112" : "Schwarzenberg", + "CH-2121" : "Glaubenberg", + "CH-2122" : "Engelberg", + "CH-2123" : "Melchtal", + "CH-2124" : "Gersau", + "CH-2131" : "Rothenthurm", + "CH-2132" : "Ybrig", + "CH-2133" : "Stoos", + "CH-2134" : "Bisistal", + "CH-2211" : "Schächental", + "CH-2212" : "Uri Rot Stock", + "CH-2221" : "Meiental", + "CH-2222" : "Maderanertal", + "CH-2223" : "Nördliches Urseren", + "CH-2224" : "Südliches Urseren", + "CH-3111" : "Glarus Nord", + "CH-3112" : "Glarus Süd-Grosstal", + "CH-3113" : "Glarus Süd-Sernftal", + "CH-3114" : "Glarus Mitte", + "CH-3211" : "Appenzeller Alpen", + "CH-3221" : "Toggenburg", + "CH-3222" : "Alpstein - Alvier", + "CH-3223" : "Flumserberg", + "CH-3224" : "Sarganserland", + "CH-3311" : "Liechtenstein", + "CH-4111" : "Emosson", + "CH-4112" : "Génépi", + "CH-4113" : "Val d'Entremont-Val Ferret", + "CH-4114" : "Conthey-Fully", + "CH-4115" : "Martigny-Verbier", + "CH-4116" : "Haut Val de Bagnes", + "CH-4121" : "Montana", + "CH-4122" : "Val d'Hérens", + "CH-4123" : "Arolla", + "CH-4124" : "Val d'Anniviers", + "CH-4125" : "Mountet", + "CH-4211" : "Leukerbad - Lötschental", + "CH-4212" : "Turtmanntal", + "CH-4213" : "Konkordia Gebiet", + "CH-4214" : "Riederalp", + "CH-4215" : "Leuk", + "CH-4221" : "Untere Vispertäler", + "CH-4222" : "Zermatt", + "CH-4223" : "Saas Fee", + "CH-4224" : "Monte Rosa", + "CH-4225" : "Mattmark", + "CH-4231" : "Nördliches Simplon Gebiet", + "CH-4232" : "Südliches Simplon Gebiet", + "CH-4241" : "Reckingen", + "CH-4242" : "Binntal", + "CH-4243" : "Nördliches Obergoms", + "CH-4244" : "Südliches Obergoms", + "CH-5111" : "Nördliches Prättigau", + "CH-5112" : "Südliches Prättigau", + "CH-5113" : "Westliche Silvretta", | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/micro-regions_names/en.json ^ |
@@ -0,0 +1,507 @@ +{ + "AD" : "Andorra", + "AT" : "Austria", + "AT-02" : "Carinthia", + "AT-02-01" : "Glocknergruppe", + "AT-02-02" : "Schobergruppe", + "AT-02-03" : "Ankogelgruppe", + "AT-02-04" : "Nockberge", + "AT-02-05" : "Gurktaler Alpen", + "AT-02-06" : "Saualpe", + "AT-02-07" : "Packalpe", + "AT-02-08" : "Koralpe", + "AT-02-09" : "Kreuzeckgruppe", + "AT-02-10" : "Lienzer Dolomiten", + "AT-02-11" : "Gailtaler Alpen West", + "AT-02-12" : "Gailtaler Alpen Mitte", + "AT-02-13" : "Villacher Alpe", + "AT-02-14" : "Karnische Alpen West", + "AT-02-15" : "Karnische Alpen Mitte", + "AT-02-16" : "Karnische Alpen Ost", + "AT-02-17" : "Karawanken West", + "AT-02-18" : "Karawanken Mitte", + "AT-02-19" : "Karawanken Ost", + "AT-03" : "Lower Austria", + "AT-03-01" : "Ybbstaler Alpen", + "AT-03-02" : "Türnitzer Alpen", + "AT-03-03" : "Gutensteiner Alpen", + "AT-03-04" : "Rax - Schneeberggebiet", + "AT-03-05" : "Semmering - Wechselgebiet", + "AT-03-06" : "Gippel - Göllergebiet", + "AT-04" : "Upper Austria", + "AT-04-01" : "Dachstein, Gosaukamm", + "AT-04-02" : "Kalmberg, Katergebirge", + "AT-04-03" : "Totes Gebirge", + "AT-04-04" : "Phyrgas, Haller Mauern", + "AT-04-05" : "Zimnitzmassiv, Höllengbirge", + "AT-04-06" : "Traunstein, Eibenberg", + "AT-04-07" : "Kasbergblock", + "AT-04-08" : "Sengsengebirge", + "AT-04-09" : "Ennstaler Voralpen", + "AT-05" : "Salzburg", + "AT-05-01" : "Nockberge", + "AT-05-02" : "Niedere Tauern Süd", + "AT-05-03" : "Ankogelgruppe, Muhr", + "AT-05-04" : "Niedere Tauern Alpenhauptkamm", + "AT-05-05" : "Goldberggruppe Alpenhauptkamm", + "AT-05-06" : "Glocknergruppe Alpenhauptkamm", + "AT-05-07" : "Großvenedigergruppe Alpenhauptkamm", + "AT-05-08" : "Niedere Tauern Nord", + "AT-05-09" : "Goldberggruppe Nord", + "AT-05-10" : "Glocknergruppe Nord", + "AT-05-11" : "Großvenedigergruppe Nord", + "AT-05-12" : "Pongauer Grasberge", + "AT-05-13" : "Dientner Grasberge", + "AT-05-14" : "Kitzbüheler Alpen, Glemmtal", + "AT-05-15" : "Oberpinzgauer Grasberge", + "AT-05-16" : "Tennengebirge, Gosaukamm", + "AT-05-17" : "Steinernes Meer, Hochkönig, Hagengebirge, Göllstock", + "AT-05-18" : "Loferer und Leoganger Steinberge", + "AT-05-19" : "Osterhorngruppe, Gamsfeldgruppe", + "AT-05-20" : "Untersbergstock", + "AT-05-21" : "Chiemgauer Alpen, Heutal, Reiteralpe", + "AT-06" : "Styria", + "AT-06-01" : "Dachsteingebiet", + "AT-06-02" : "Totes Gebirge", + "AT-06-03" : "Ennstaler Alpen", + "AT-06-04" : "Schladminger Tauern", + "AT-06-05" : "Nördliche Wölzer Tauern", + "AT-06-06" : "Rottenmanner Tauern", + "AT-06-07" : "Südliche Wölzer Tauern", + "AT-06-08" : "Seckauer Tauern", + "AT-06-09" : "Eisenerzer Alpen", + "AT-06-10" : "Hochschwabgebiet", + "AT-06-11" : "Mürzsteger Alpen", + "AT-06-12" : "Mürztaler Alpen", + "AT-06-13" : "Östliche Fischbacher Alpen und Wechselgebiet", + "AT-06-14" : "Westliche Fischbacher Alpen und Grazer Bergland", + "AT-06-15" : "Stub- und Gleinalpe", + "AT-06-16" : "Koralpe", + "AT-06-17" : "Seetaler Alpen", + "AT-06-18" : "Gurktaler Alpen", + "AT-07" : "Tyrol", + "AT-07-01" : "Allgäu Alps", + "AT-07-02" : "Eastern Lechtal Alps - Ammergau Alps", + "AT-07-03" : "Mieming Mountains", + "AT-07-04" : "Karwendel Mountains", + "AT-07-05" : "Brandenberg Alps", + "AT-07-06" : "Wilder Kaiser Mountains - Waidring Alps", + "AT-07-07" : "Western Lechtal Alps", + "AT-07-08" : "Central Lechtal Alps", + "AT-07-09" : "Grieskogel Mountains", + "AT-07-10" : "Western Verwall Mountains", + "AT-07-11" : "Eastern Verwall Mountains", + "AT-07-12" : "Silvretta", + "AT-07-13" : "Samnaun Mountains", + "AT-07-14" : "Northern Oetz and Stubai Alps", + "AT-07-15" : "Western Tuxer Alps", + "AT-07-16" : "Eastern Tuxer Alps", + "AT-07-17" : "Western Kitzbühel Alps", + "AT-07-18" : "Eastern Kitzbühel Alps", + "AT-07-19" : "Glockturm Range", + "AT-07-20" : "Weißkugel Range", + "AT-07-21" : "Gurgler Range", + "AT-07-22" : "Central Stubai Alps", + "AT-07-23" : "Northern Zillertal Alps", + "AT-07-24" : "Venediger Range", + "AT-07-25" : "Eastern Rieserferner Mountains", + "AT-07-26" : "Glockner Range", + "AT-07-27" : "Eastern Deferegger Alps", + "AT-07-28" : "Schober Mountains", + "AT-07-29" : "Lienzer Dolomites", + "AT-08" : "Vorarlberg", + "AT-08-01" : "", + "AT-08-02" : "", + "AT-08-03" : "", + "AT-08-04" : "", + "AT-08-05" : "", + "AT-08-06" : "", + "CH" : "Switzerland", + "CH-1111" : "Waadtländer Voralpen", + "CH-1112" : "Pays d'Enhaut", + "CH-1113" : "Aigle-Leysin", + "CH-1114" : "Bex-Villars", + "CH-1121" : "Jaun", + "CH-1122" : "Gruyère", + "CH-1211" : "westliche Berner Voralpen", + "CH-1212" : "östliche Berner Voralpen", + "CH-1213" : "Hohgant", + "CH-1221" : "Niedersimmental", + "CH-1222" : "Gstaad", + "CH-1223" : "Wildhorn", + "CH-1224" : "Lenk", + "CH-1225" : "Iffigen", + "CH-1226" : "Adelboden", + "CH-1227" : "Engstligen", + "CH-1228" : "Obersimmental", + "CH-1231" : "Kandersteg", + "CH-1232" : "Blüemlisalp", + "CH-1233" : "Lauterbrunnen", + "CH-1234" : "Jungfrau - Schilthorn", + "CH-1241" : "Brienz-Interlaken", + "CH-1242" : "Grindelwald", + "CH-1243" : "Schreckhorn", + "CH-1244" : "Hasliberg - Rosenlaui", + "CH-1245" : "Guttannen", + "CH-1246" : "Gadmertal", + "CH-1247" : "Grimselpass", + "CH-1311" : "Vouvry", + "CH-1312" : "Monthey-Val d'Illiez", + "CH-2111" : "Pilatus", + "CH-2112" : "Schwarzenberg", + "CH-2121" : "Glaubenberg", + "CH-2122" : "Engelberg", + "CH-2123" : "Melchtal", + "CH-2124" : "Gersau", + "CH-2131" : "Rothenthurm", + "CH-2132" : "Ybrig", + "CH-2133" : "Stoos", + "CH-2134" : "Bisistal", + "CH-2211" : "Schächental", + "CH-2212" : "Uri Rot Stock", + "CH-2221" : "Meiental", + "CH-2222" : "Maderanertal", + "CH-2223" : "nördliches Urseren", + "CH-2224" : "südliches Urseren", + "CH-3111" : "Glarus Nord", + "CH-3112" : "Glarus Süd-Grosstal", + "CH-3113" : "Glarus Süd-Sernftal", + "CH-3114" : "Glarus Mitte", + "CH-3211" : "Appenzeller Alpen", + "CH-3221" : "Toggenburg", + "CH-3222" : "Alpstein - Alvier", + "CH-3223" : "Flumserberg", + "CH-3224" : "Sarganserland", + "CH-3311" : "Liechtenstein", + "CH-4111" : "Emosson", + "CH-4112" : "Génépi", + "CH-4113" : "Val d'Entremont-Val Ferret", + "CH-4114" : "Conthey-Fully", + "CH-4115" : "Martigny-Verbier", + "CH-4116" : "Haut Val de Bagnes", + "CH-4121" : "Montana", + "CH-4122" : "Val d'Hérens", + "CH-4123" : "Arolla", + "CH-4124" : "Val d'Anniviers", + "CH-4125" : "Mountet", + "CH-4211" : "Leukerbad - Lötschental", + "CH-4212" : "Turtmanntal", + "CH-4213" : "Konkordia Gebiet", + "CH-4214" : "Riederalp", + "CH-4215" : "Leuk", + "CH-4221" : "untere Vispertäler", + "CH-4222" : "Zermatt", + "CH-4223" : "Saas Fee", + "CH-4224" : "Monte Rosa", + "CH-4225" : "Mattmark", + "CH-4231" : "nördliches Simplon Gebiet", + "CH-4232" : "südliches Simplon Gebiet", + "CH-4241" : "Reckingen", | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/micro-regions_names/fr.json ^ |
@@ -0,0 +1,501 @@ +{ + "AD" : "Andorra", + "AT" : "Austria", + "AT-02" : "Carinthia", + "AT-02-01" : "Glocknergruppe", + "AT-02-02" : "Schobergruppe", + "AT-02-03" : "Ankogelgruppe", + "AT-02-04" : "Nockberge", + "AT-02-05" : "Gurktaler Alpen", + "AT-02-06" : "Saualpe", + "AT-02-07" : "Packalpe", + "AT-02-08" : "Koralpe", + "AT-02-09" : "Kreuzeckgruppe", + "AT-02-10" : "Lienzer Dolomiten", + "AT-02-11" : "Gailtaler Alpen West", + "AT-02-12" : "Gailtaler Alpen Mitte", + "AT-02-13" : "Villacher Alpe", + "AT-02-14" : "Karnische Alpen West", + "AT-02-15" : "Karnische Alpen Mitte", + "AT-02-16" : "Karnische Alpen Ost", + "AT-02-17" : "Karawanken West", + "AT-02-18" : "Karawanken Mitte", + "AT-02-19" : "Karawanken Ost", + "AT-03" : "Lower Austria", + "AT-03-01" : "Ybbstaler Alpen", + "AT-03-02" : "Türnitzer Alpen", + "AT-03-03" : "Gutensteiner Alpen", + "AT-03-04" : "Rax - Schneeberggebiet", + "AT-03-05" : "Semmering - Wechselgebiet", + "AT-03-06" : "Gippel - Göllergebiet", + "AT-04" : "Upper Austria", + "AT-04-01" : "Dachstein, Gosaukamm", + "AT-04-02" : "Kalmberg, Katergebirge", + "AT-04-03" : "Totes Gebirge", + "AT-04-04" : "Phyrgas, Haller Mauern", + "AT-04-05" : "Zimnitzmassiv, Höllengbirge", + "AT-04-06" : "Traunstein, Eibenberg", + "AT-04-07" : "Kasbergblock", + "AT-04-08" : "Sengsengebirge", + "AT-04-09" : "Ennstaler Voralpen", + "AT-05" : "Salzburg", + "AT-05-01" : "Nockberge", + "AT-05-02" : "Niedere Tauern Süd", + "AT-05-03" : "Ankogelgruppe, Muhr", + "AT-05-04" : "Niedere Tauern Alpenhauptkamm", + "AT-05-05" : "Goldberggruppe Alpenhauptkamm", + "AT-05-06" : "Glocknergruppe Alpenhauptkamm", + "AT-05-07" : "Großvenedigergruppe Alpenhauptkamm", + "AT-05-08" : "Niedere Tauern Nord", + "AT-05-09" : "Goldberggruppe Nord", + "AT-05-10" : "Glocknergruppe Nord", + "AT-05-11" : "Großvenedigergruppe Nord", + "AT-05-12" : "Pongauer Grasberge", + "AT-05-13" : "Dientner Grasberge", + "AT-05-14" : "Kitzbüheler Alpen, Glemmtal", + "AT-05-15" : "Oberpinzgauer Grasberge", + "AT-05-16" : "Tennengebirge, Gosaukamm", + "AT-05-17" : "Steinernes Meer, Hochkönig, Hagengebirge, Göllstock", + "AT-05-18" : "Loferer und Leoganger Steinberge", + "AT-05-19" : "Osterhorngruppe, Gamsfeldgruppe", + "AT-05-20" : "Untersbergstock", + "AT-05-21" : "Chiemgauer Alpen, Heutal, Reiteralpe", + "AT-06" : "Styria", + "AT-06-01" : "Dachsteingebiet", + "AT-06-02" : "Totes Gebirge", + "AT-06-03" : "Ennstaler Alpen", + "AT-06-04" : "Schladminger Tauern", + "AT-06-05" : "Nördliche Wölzer Tauern", + "AT-06-06" : "Rottenmanner Tauern", + "AT-06-07" : "Südliche Wölzer Tauern", + "AT-06-08" : "Seckauer Tauern", + "AT-06-09" : "Eisenerzer Alpen", + "AT-06-10" : "Hochschwabgebiet", + "AT-06-11" : "Mürzsteger Alpen", + "AT-06-12" : "Mürztaler Alpen", + "AT-06-13" : "Östliche Fischbacher Alpen und Wechselgebiet", + "AT-06-14" : "Westliche Fischbacher Alpen und Grazer Bergland", + "AT-06-15" : "Stub- und Gleinalpe", + "AT-06-16" : "Koralpe", + "AT-06-17" : "Seetaler Alpen", + "AT-06-18" : "Gurktaler Alpen", + "AT-07" : "Tyrol", + "AT-07-01" : "Allgäu Alps", + "AT-07-02" : "Eastern Lechtal Alps - Ammergau Alps", + "AT-07-03" : "Mieming Mountains", + "AT-07-04" : "Karwendel Mountains", + "AT-07-05" : "Brandenberg Alps", + "AT-07-06" : "Wilder Kaiser Mountains - Waidring Alps", + "AT-07-07" : "Western Lechtal Alps", + "AT-07-08" : "Central Lechtal Alps", + "AT-07-09" : "Grieskogel Mountains", + "AT-07-10" : "Western Verwall Mountains", + "AT-07-11" : "Eastern Verwall Mountains", + "AT-07-12" : "Silvretta", + "AT-07-13" : "Samnaun Mountains", + "AT-07-14" : "Northern Oetz and Stubai Alps", + "AT-07-15" : "Western Tuxer Alps", + "AT-07-16" : "Eastern Tuxer Alps", + "AT-07-17" : "Western Kitzbühel Alps", + "AT-07-18" : "Eastern Kitzbühel Alps", + "AT-07-19" : "Glockturm Range", + "AT-07-20" : "Weißkugel Range", + "AT-07-21" : "Gurgler Range", + "AT-07-22" : "Central Stubai Alps", + "AT-07-23" : "Northern Zillertal Alps", + "AT-07-24" : "Venediger Range", + "AT-07-25" : "Eastern Rieserferner Mountains", + "AT-07-26" : "Glockner Range", + "AT-07-27" : "Eastern Deferegger Alps", + "AT-07-28" : "Schober Mountains", + "AT-07-29" : "Lienzer Dolomites", + "AT-08" : "Vorarlberg", + "CH" : "Switzerland", + "CH-1111" : "Waadtländer Voralpen", + "CH-1112" : "Pays d'Enhaut", + "CH-1113" : "Aigle-Leysin", + "CH-1114" : "Bex-Villars", + "CH-1121" : "Jaun", + "CH-1122" : "Gruyère", + "CH-1211" : "westliche Berner Voralpen", + "CH-1212" : "östliche Berner Voralpen", + "CH-1213" : "Hohgant", + "CH-1221" : "Niedersimmental", + "CH-1222" : "Gstaad", + "CH-1223" : "Wildhorn", + "CH-1224" : "Lenk", + "CH-1225" : "Iffigen", + "CH-1226" : "Adelboden", + "CH-1227" : "Engstligen", + "CH-1228" : "Obersimmental", + "CH-1231" : "Kandersteg", + "CH-1232" : "Blüemlisalp", + "CH-1233" : "Lauterbrunnen", + "CH-1234" : "Jungfrau - Schilthorn", + "CH-1241" : "Brienz-Interlaken", + "CH-1242" : "Grindelwald", + "CH-1243" : "Schreckhorn", + "CH-1244" : "Hasliberg - Rosenlaui", + "CH-1245" : "Guttannen", + "CH-1246" : "Gadmertal", + "CH-1247" : "Grimselpass", + "CH-1311" : "Vouvry", + "CH-1312" : "Monthey-Val d'Illiez", + "CH-2111" : "Pilatus", + "CH-2112" : "Schwarzenberg", + "CH-2121" : "Glaubenberg", + "CH-2122" : "Engelberg", + "CH-2123" : "Melchtal", + "CH-2124" : "Gersau", + "CH-2131" : "Rothenthurm", + "CH-2132" : "Ybrig", + "CH-2133" : "Stoos", + "CH-2134" : "Bisistal", + "CH-2211" : "Schächental", + "CH-2212" : "Uri Rot Stock", + "CH-2221" : "Meiental", + "CH-2222" : "Maderanertal", + "CH-2223" : "nördliches Urseren", + "CH-2224" : "südliches Urseren", + "CH-3111" : "Glarus Nord", + "CH-3112" : "Glarus Süd-Grosstal", + "CH-3113" : "Glarus Süd-Sernftal", + "CH-3114" : "Glarus Mitte", + "CH-3211" : "Appenzeller Alpen", + "CH-3221" : "Toggenburg", + "CH-3222" : "Alpstein - Alvier", + "CH-3223" : "Flumserberg", + "CH-3224" : "Sarganserland", + "CH-3311" : "Liechtenstein", + "CH-4111" : "Emosson", + "CH-4112" : "Génépi", + "CH-4113" : "Val d'Entremont-Val Ferret", + "CH-4114" : "Conthey-Fully", + "CH-4115" : "Martigny-Verbier", + "CH-4116" : "Haut Val de Bagnes", + "CH-4121" : "Montana", + "CH-4122" : "Val d'Hérens", + "CH-4123" : "Arolla", + "CH-4124" : "Val d'Anniviers", + "CH-4125" : "Mountet", + "CH-4211" : "Leukerbad - Lötschental", + "CH-4212" : "Turtmanntal", + "CH-4213" : "Konkordia Gebiet", + "CH-4214" : "Riederalp", + "CH-4215" : "Leuk", + "CH-4221" : "untere Vispertäler", + "CH-4222" : "Zermatt", + "CH-4223" : "Saas Fee", + "CH-4224" : "Monte Rosa", + "CH-4225" : "Mattmark", + "CH-4231" : "nördliches Simplon Gebiet", + "CH-4232" : "südliches Simplon Gebiet", + "CH-4241" : "Reckingen", + "CH-4242" : "Binntal", + "CH-4243" : "nördliches Obergoms", + "CH-4244" : "südliches Obergoms", + "CH-5111" : "nördliches Prättigau", + "CH-5112" : "südliches Prättigau", + "CH-5113" : "westliche Silvretta", | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pyCore.py ^ |
@@ -65,8 +65,55 @@ # else: # url, provider = pyAvaCore.get_report_url(region_id, local) + region_id_short = region_id + if "AT-07" in region_id: + region_id_short = 'AT-07' + + if "IT-32-BZ" in region_id: + region_id_short = 'IT-32-BZ' + + if "IT-32-TN" in region_id: + region_id_short = 'IT-32-TN' + # Kärnten + if region_id.startswith("AT-02"): + region_id_short = 'AT-02' + + # Salzburg + if region_id.startswith("AT-05"): + region_id_short = 'AT-05' + + # Steiermark + if region_id.startswith("AT-06"): + region_id_short = 'AT-06' + + # Oberösterreich + if region_id.startswith("AT-04"): + region_id_short = 'AT-04' + + # Niederösterreich + if region_id.startswith("AT-03"): + region_id_short = 'AT-03' + + #Vorarlberg Neu + if region_id.startswith("AT-08"): + region_id_short = 'AT-08' + + #Bavaria - neu + if region_id.startswith("DE-BY"): + region_id_short = 'DE-BY' + + #Val d'Aran + if region_id.startswith("ES-CT-L"): + region_id_short = 'ES-CT-L' + + if region_id.startswith("SI"): + region_id_short = 'SI' + + if region_id.startswith("CH"): + region_id_short = 'CH' + try: - reports_r, provider, url = pyAvaCore.get_reports(region_id, local=local.lower()[0:2], cache_path=path) + reports_r, provider, url = pyAvaCore.get_reports(region_id_short, local=local.lower()[0:2], cache_path=path) reports.extend(reports_r) pyotherside.send('error', 'local :' +local.lower()) except Exception as e: @@ -77,7 +124,7 @@ Path(path + "/reports/").mkdir(parents=True, exist_ok=True) for report in reports: - for current_region_id in report.valid_regions: + for current_region_id in report.get_region_list(): pm_marker = '' if hasattr(report, 'predecessor_id'): pm_marker = '_pm' @@ -89,7 +136,7 @@ cached = False for report in reports: if hasattr(report, 'predecessor_id'): - if matching_report.report_id in report.predecessor_id: + if matching_report.bulletinID in report.predecessor_id: matching_report_pm = report else: | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/__init__.py ^ |
@@ -0,0 +1,1559 @@ +''' +datetime.tzinfo timezone definitions generated from the +Olson timezone database: + + ftp://elsie.nci.nih.gov/pub/tz*.tar.gz + +See the datetime section of the Python Library Reference for information +on how to use these modules. +''' + +import sys +import datetime +import os.path + +from pytz.exceptions import AmbiguousTimeError +from pytz.exceptions import InvalidTimeError +from pytz.exceptions import NonExistentTimeError +from pytz.exceptions import UnknownTimeZoneError +from pytz.lazy import LazyDict, LazyList, LazySet # noqa +from pytz.tzinfo import unpickler, BaseTzInfo +from pytz.tzfile import build_tzinfo + + +# The IANA (nee Olson) database is updated several times a year. +OLSON_VERSION = '2021c' +VERSION = '2021.3' # pip compatible version number. +__version__ = VERSION + +OLSEN_VERSION = OLSON_VERSION # Old releases had this misspelling + +__all__ = [ + 'timezone', 'utc', 'country_timezones', 'country_names', + 'AmbiguousTimeError', 'InvalidTimeError', + 'NonExistentTimeError', 'UnknownTimeZoneError', + 'all_timezones', 'all_timezones_set', + 'common_timezones', 'common_timezones_set', + 'BaseTzInfo', 'FixedOffset', +] + + +if sys.version_info[0] > 2: # Python 3.x + + # Python 3.x doesn't have unicode(), making writing code + # for Python 2.3 and Python 3.x a pain. + unicode = str + + def ascii(s): + r""" + >>> ascii('Hello') + 'Hello' + >>> ascii('\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL + Traceback (most recent call last): + ... + UnicodeEncodeError: ... + """ + if type(s) == bytes: + s = s.decode('ASCII') + else: + s.encode('ASCII') # Raise an exception if not ASCII + return s # But the string - not a byte string. + +else: # Python 2.x + + def ascii(s): + r""" + >>> ascii('Hello') + 'Hello' + >>> ascii(u'Hello') + 'Hello' + >>> ascii(u'\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL + Traceback (most recent call last): + ... + UnicodeEncodeError: ... + """ + return s.encode('ASCII') + + +def open_resource(name): + """Open a resource from the zoneinfo subdir for reading. + + Uses the pkg_resources module if available and no standard file + found at the calculated location. + + It is possible to specify different location for zoneinfo + subdir by using the PYTZ_TZDATADIR environment variable. + """ + name_parts = name.lstrip('/').split('/') + for part in name_parts: + if part == os.path.pardir or os.path.sep in part: + raise ValueError('Bad path segment: %r' % part) + zoneinfo_dir = os.environ.get('PYTZ_TZDATADIR', None) + if zoneinfo_dir is not None: + filename = os.path.join(zoneinfo_dir, *name_parts) + else: + filename = os.path.join(os.path.dirname(__file__), + 'zoneinfo', *name_parts) + if not os.path.exists(filename): + # http://bugs.launchpad.net/bugs/383171 - we avoid using this + # unless absolutely necessary to help when a broken version of + # pkg_resources is installed. + try: + from pkg_resources import resource_stream + except ImportError: + resource_stream = None + + if resource_stream is not None: + return resource_stream(__name__, 'zoneinfo/' + name) + return open(filename, 'rb') + + +def resource_exists(name): + """Return true if the given resource exists""" + try: + if os.environ.get('PYTZ_SKIPEXISTSCHECK', ''): + # In "standard" distributions, we can assume that + # all the listed timezones are present. As an + # import-speed optimization, you can set the + # PYTZ_SKIPEXISTSCHECK flag to skip checking + # for the presence of the resource file on disk. + return True + open_resource(name).close() + return True + except IOError: + return False + + +_tzinfo_cache = {} + + +def timezone(zone): + r''' Return a datetime.tzinfo implementation for the given timezone + + >>> from datetime import datetime, timedelta + >>> utc = timezone('UTC') + >>> eastern = timezone('US/Eastern') + >>> eastern.zone + 'US/Eastern' + >>> timezone(unicode('US/Eastern')) is eastern + True + >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc) + >>> loc_dt = utc_dt.astimezone(eastern) + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + >>> loc_dt.strftime(fmt) + '2002-10-27 01:00:00 EST (-0500)' + >>> (loc_dt - timedelta(minutes=10)).strftime(fmt) + '2002-10-27 00:50:00 EST (-0500)' + >>> eastern.normalize(loc_dt - timedelta(minutes=10)).strftime(fmt) + '2002-10-27 01:50:00 EDT (-0400)' + >>> (loc_dt + timedelta(minutes=10)).strftime(fmt) + '2002-10-27 01:10:00 EST (-0500)' + + Raises UnknownTimeZoneError if passed an unknown zone. + + >>> try: + ... timezone('Asia/Shangri-La') + ... except UnknownTimeZoneError: + ... print('Unknown') + Unknown + + >>> try: + ... timezone(unicode('\N{TRADE MARK SIGN}')) + ... except UnknownTimeZoneError: + ... print('Unknown') + Unknown + + ''' + if zone is None: + raise UnknownTimeZoneError(None) + + if zone.upper() == 'UTC': + return utc + + try: + zone = ascii(zone) + except UnicodeEncodeError: + # All valid timezones are ASCII + raise UnknownTimeZoneError(zone) + + zone = _case_insensitive_zone_lookup(_unmunge_zone(zone)) + if zone not in _tzinfo_cache: + if zone in all_timezones_set: # noqa + fp = open_resource(zone) + try: + _tzinfo_cache[zone] = build_tzinfo(zone, fp) + finally: + fp.close() + else: + raise UnknownTimeZoneError(zone) + + return _tzinfo_cache[zone] + + +def _unmunge_zone(zone): + """Undo the time zone name munging done by older versions of pytz.""" + return zone.replace('_plus_', '+').replace('_minus_', '-') + + +_all_timezones_lower_to_standard = None + | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/exceptions.py ^ |
@@ -0,0 +1,59 @@ +''' +Custom exceptions raised by pytz. +''' + +__all__ = [ + 'UnknownTimeZoneError', 'InvalidTimeError', 'AmbiguousTimeError', + 'NonExistentTimeError', +] + + +class Error(Exception): + '''Base class for all exceptions raised by the pytz library''' + + +class UnknownTimeZoneError(KeyError, Error): + '''Exception raised when pytz is passed an unknown timezone. + + >>> isinstance(UnknownTimeZoneError(), LookupError) + True + + This class is actually a subclass of KeyError to provide backwards + compatibility with code relying on the undocumented behavior of earlier + pytz releases. + + >>> isinstance(UnknownTimeZoneError(), KeyError) + True + + And also a subclass of pytz.exceptions.Error, as are other pytz + exceptions. + + >>> isinstance(UnknownTimeZoneError(), Error) + True + + ''' + pass + + +class InvalidTimeError(Error): + '''Base class for invalid time exceptions.''' + + +class AmbiguousTimeError(InvalidTimeError): + '''Exception raised when attempting to create an ambiguous wallclock time. + + At the end of a DST transition period, a particular wallclock time will + occur twice (once before the clocks are set back, once after). Both + possibilities may be correct, unless further information is supplied. + + See DstTzInfo.normalize() for more info + ''' + + +class NonExistentTimeError(InvalidTimeError): + '''Exception raised when attempting to create a wallclock time that + cannot exist. + + At the start of a DST transition period, the wallclock time jumps forward. + The instants jumped over never occur. + ''' | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/lazy.py ^ |
@@ -0,0 +1,172 @@ +from threading import RLock +try: + from collections.abc import Mapping as DictMixin +except ImportError: # Python < 3.3 + try: + from UserDict import DictMixin # Python 2 + except ImportError: # Python 3.0-3.3 + from collections import Mapping as DictMixin + + +# With lazy loading, we might end up with multiple threads triggering +# it at the same time. We need a lock. +_fill_lock = RLock() + + +class LazyDict(DictMixin): + """Dictionary populated on first use.""" + data = None + + def __getitem__(self, key): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return self.data[key.upper()] + + def __contains__(self, key): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return key in self.data + + def __iter__(self): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return iter(self.data) + + def __len__(self): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return len(self.data) + + def keys(self): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return self.data.keys() + + +class LazyList(list): + """List populated on first use.""" + + _props = [ + '__str__', '__repr__', '__unicode__', + '__hash__', '__sizeof__', '__cmp__', + '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', + 'append', 'count', 'index', 'extend', 'insert', 'pop', 'remove', + 'reverse', 'sort', '__add__', '__radd__', '__iadd__', '__mul__', + '__rmul__', '__imul__', '__contains__', '__len__', '__nonzero__', + '__getitem__', '__setitem__', '__delitem__', '__iter__', + '__reversed__', '__getslice__', '__setslice__', '__delslice__'] + + def __new__(cls, fill_iter=None): + + if fill_iter is None: + return list() + + # We need a new class as we will be dynamically messing with its + # methods. + class LazyList(list): + pass + + fill_iter = [fill_iter] + + def lazy(name): + def _lazy(self, *args, **kw): + _fill_lock.acquire() + try: + if len(fill_iter) > 0: + list.extend(self, fill_iter.pop()) + for method_name in cls._props: + delattr(LazyList, method_name) + finally: + _fill_lock.release() + return getattr(list, name)(self, *args, **kw) + return _lazy + + for name in cls._props: + setattr(LazyList, name, lazy(name)) + + new_list = LazyList() + return new_list + +# Not all versions of Python declare the same magic methods. +# Filter out properties that don't exist in this version of Python +# from the list. +LazyList._props = [prop for prop in LazyList._props if hasattr(list, prop)] + + +class LazySet(set): + """Set populated on first use.""" + + _props = ( + '__str__', '__repr__', '__unicode__', + '__hash__', '__sizeof__', '__cmp__', + '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', + '__contains__', '__len__', '__nonzero__', + '__getitem__', '__setitem__', '__delitem__', '__iter__', + '__sub__', '__and__', '__xor__', '__or__', + '__rsub__', '__rand__', '__rxor__', '__ror__', + '__isub__', '__iand__', '__ixor__', '__ior__', + 'add', 'clear', 'copy', 'difference', 'difference_update', + 'discard', 'intersection', 'intersection_update', 'isdisjoint', + 'issubset', 'issuperset', 'pop', 'remove', + 'symmetric_difference', 'symmetric_difference_update', + 'union', 'update') + + def __new__(cls, fill_iter=None): + + if fill_iter is None: + return set() + + class LazySet(set): + pass + + fill_iter = [fill_iter] + + def lazy(name): + def _lazy(self, *args, **kw): + _fill_lock.acquire() + try: + if len(fill_iter) > 0: + for i in fill_iter.pop(): + set.add(self, i) + for method_name in cls._props: + delattr(LazySet, method_name) + finally: + _fill_lock.release() + return getattr(set, name)(self, *args, **kw) + return _lazy + + for name in cls._props: + setattr(LazySet, name, lazy(name)) + + new_set = LazySet() + return new_set + +# Not all versions of Python declare the same magic methods. +# Filter out properties that don't exist in this version of Python +# from the list. +LazySet._props = [prop for prop in LazySet._props if hasattr(set, prop)] | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/reference.py ^ |
@@ -0,0 +1,140 @@ +''' +Reference tzinfo implementations from the Python docs. +Used for testing against as they are only correct for the years +1987 to 2006. Do not use these for real code. +''' + +from datetime import tzinfo, timedelta, datetime +from pytz import HOUR, ZERO, UTC + +__all__ = [ + 'FixedOffset', + 'LocalTimezone', + 'USTimeZone', + 'Eastern', + 'Central', + 'Mountain', + 'Pacific', + 'UTC' +] + + +# A class building tzinfo objects for fixed-offset time zones. +# Note that FixedOffset(0, "UTC") is a different way to build a +# UTC tzinfo object. +class FixedOffset(tzinfo): + """Fixed offset in minutes east from UTC.""" + + def __init__(self, offset, name): + self.__offset = timedelta(minutes=offset) + self.__name = name + + def utcoffset(self, dt): + return self.__offset + + def tzname(self, dt): + return self.__name + + def dst(self, dt): + return ZERO + + +import time as _time + +STDOFFSET = timedelta(seconds=-_time.timezone) +if _time.daylight: + DSTOFFSET = timedelta(seconds=-_time.altzone) +else: + DSTOFFSET = STDOFFSET + +DSTDIFF = DSTOFFSET - STDOFFSET + + +# A class capturing the platform's idea of local time. +class LocalTimezone(tzinfo): + + def utcoffset(self, dt): + if self._isdst(dt): + return DSTOFFSET + else: + return STDOFFSET + + def dst(self, dt): + if self._isdst(dt): + return DSTDIFF + else: + return ZERO + + def tzname(self, dt): + return _time.tzname[self._isdst(dt)] + + def _isdst(self, dt): + tt = (dt.year, dt.month, dt.day, + dt.hour, dt.minute, dt.second, + dt.weekday(), 0, -1) + stamp = _time.mktime(tt) + tt = _time.localtime(stamp) + return tt.tm_isdst > 0 + +Local = LocalTimezone() + + +def first_sunday_on_or_after(dt): + days_to_go = 6 - dt.weekday() + if days_to_go: + dt += timedelta(days_to_go) + return dt + + +# In the US, DST starts at 2am (standard time) on the first Sunday in April. +DSTSTART = datetime(1, 4, 1, 2) +# and ends at 2am (DST time; 1am standard time) on the last Sunday of Oct. +# which is the first Sunday on or after Oct 25. +DSTEND = datetime(1, 10, 25, 1) + + +# A complete implementation of current DST rules for major US time zones. +class USTimeZone(tzinfo): + + def __init__(self, hours, reprname, stdname, dstname): + self.stdoffset = timedelta(hours=hours) + self.reprname = reprname + self.stdname = stdname + self.dstname = dstname + + def __repr__(self): + return self.reprname + + def tzname(self, dt): + if self.dst(dt): + return self.dstname + else: + return self.stdname + + def utcoffset(self, dt): + return self.stdoffset + self.dst(dt) + + def dst(self, dt): + if dt is None or dt.tzinfo is None: + # An exception may be sensible here, in one or both cases. + # It depends on how you want to treat them. The default + # fromutc() implementation (called by the default astimezone() + # implementation) passes a datetime with dt.tzinfo is self. + return ZERO + assert dt.tzinfo is self + + # Find first Sunday in April & the last in October. + start = first_sunday_on_or_after(DSTSTART.replace(year=dt.year)) + end = first_sunday_on_or_after(DSTEND.replace(year=dt.year)) + + # Can't compare naive to aware objects, so strip the timezone from + # dt first. + if start <= dt.replace(tzinfo=None) < end: + return HOUR + else: + return ZERO + +Eastern = USTimeZone(-5, "Eastern", "EST", "EDT") +Central = USTimeZone(-6, "Central", "CST", "CDT") +Mountain = USTimeZone(-7, "Mountain", "MST", "MDT") +Pacific = USTimeZone(-8, "Pacific", "PST", "PDT") | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/tests/test_docs.py ^ |
@@ -0,0 +1,34 @@ +# -*- coding: ascii -*- + +from doctest import DocFileSuite +import unittest +import os.path +import sys + +THIS_DIR = os.path.dirname(__file__) + +README = os.path.join(THIS_DIR, os.pardir, os.pardir, 'README.rst') + + +class DocumentationTestCase(unittest.TestCase): + def test_readme_encoding(self): + '''Confirm the README.rst is ASCII.''' + f = open(README, 'rb') + try: + f.read().decode('ASCII') + finally: + f.close() + + +def test_suite(): + "For the Z3 test runner" + return unittest.TestSuite(( + DocumentationTestCase('test_readme_encoding'), + DocFileSuite(os.path.join(os.pardir, os.pardir, 'README.rst')))) + + +if __name__ == '__main__': + sys.path.insert( + 0, os.path.abspath(os.path.join(THIS_DIR, os.pardir, os.pardir)) + ) + unittest.main(defaultTest='test_suite') | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/tests/test_lazy.py ^ |
@@ -0,0 +1,315 @@ +from operator import ( + eq, ge, gt, le, lt, ne, add, concat, not_, sub, and_, or_, xor +) +import os.path +import sys +import unittest +import warnings + + +if __name__ == '__main__': + # Only munge path if invoked as a script. Testrunners should have setup + # the paths already + sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, os.pardir))) + + +from pytz.lazy import LazyList, LazySet + + +class LazyListTestCase(unittest.TestCase): + initial_data = [3, 2, 1] + + def setUp(self): + self.base = [3, 2, 1] + self.lesser = [2, 1, 0] + self.greater = [4, 3, 2] + + self.lazy = LazyList(iter(list(self.base))) + + def test_unary_ops(self): + unary_ops = [str, repr, len, bool, not_] + try: + unary_ops.append(unicode) + except NameError: + pass # unicode no longer exists in Python 3. + + for op in unary_ops: + self.assertEqual( + op(self.lazy), + op(self.base), str(op)) + + def test_binary_ops(self): + binary_ops = [eq, ge, gt, le, lt, ne, add, concat] + try: + binary_ops.append(cmp) + except NameError: + pass # cmp no longer exists in Python 3. + + for op in binary_ops: + self.assertEqual( + op(self.lazy, self.lazy), + op(self.base, self.base), str(op)) + for other in [self.base, self.lesser, self.greater]: + self.assertEqual( + op(self.lazy, other), + op(self.base, other), '%s %s' % (op, other)) + self.assertEqual( + op(other, self.lazy), + op(other, self.base), '%s %s' % (op, other)) + + # Multiplication + self.assertEqual(self.lazy * 3, self.base * 3) + self.assertEqual(3 * self.lazy, 3 * self.base) + + # Contains + self.assertTrue(2 in self.lazy) + self.assertFalse(42 in self.lazy) + + def test_iadd(self): + self.lazy += [1] + self.base += [1] + self.assertEqual(self.lazy, self.base) + + def test_bool(self): + self.assertTrue(bool(self.lazy)) + self.assertFalse(bool(LazyList())) + self.assertFalse(bool(LazyList(iter([])))) + + def test_hash(self): + self.assertRaises(TypeError, hash, self.lazy) + + def test_isinstance(self): + self.assertTrue(isinstance(self.lazy, list)) + self.assertFalse(isinstance(self.lazy, tuple)) + + def test_callable(self): + try: + callable + except NameError: + return # No longer exists with Python 3. + self.assertFalse(callable(self.lazy)) + + def test_append(self): + self.base.append('extra') + self.lazy.append('extra') + self.assertEqual(self.lazy, self.base) + + def test_count(self): + self.assertEqual(self.lazy.count(2), 1) + + def test_index(self): + self.assertEqual(self.lazy.index(2), 1) + + def test_extend(self): + self.base.extend([6, 7]) + self.lazy.extend([6, 7]) + self.assertEqual(self.lazy, self.base) + + def test_insert(self): + self.base.insert(0, 'ping') + self.lazy.insert(0, 'ping') + self.assertEqual(self.lazy, self.base) + + def test_pop(self): + self.assertEqual(self.lazy.pop(), self.base.pop()) + self.assertEqual(self.lazy, self.base) + + def test_remove(self): + self.base.remove(2) + self.lazy.remove(2) + self.assertEqual(self.lazy, self.base) + + def test_reverse(self): + self.base.reverse() + self.lazy.reverse() + self.assertEqual(self.lazy, self.base) + + def test_reversed(self): + self.assertEqual(list(reversed(self.lazy)), list(reversed(self.base))) + + def test_sort(self): + self.base.sort() + self.assertNotEqual(self.lazy, self.base, 'Test data already sorted') + self.lazy.sort() + self.assertEqual(self.lazy, self.base) + + def test_sorted(self): + self.assertEqual(sorted(self.lazy), sorted(self.base)) + + def test_getitem(self): + for idx in range(-len(self.base), len(self.base)): + self.assertEqual(self.lazy[idx], self.base[idx]) + + def test_setitem(self): + for idx in range(-len(self.base), len(self.base)): + self.base[idx] = idx + 1000 + self.assertNotEqual(self.lazy, self.base) + self.lazy[idx] = idx + 1000 + self.assertEqual(self.lazy, self.base) + + def test_delitem(self): + del self.base[0] + self.assertNotEqual(self.lazy, self.base) + del self.lazy[0] + self.assertEqual(self.lazy, self.base) + + del self.base[-2] + self.assertNotEqual(self.lazy, self.base) + del self.lazy[-2] + self.assertEqual(self.lazy, self.base) + + def test_iter(self): + self.assertEqual(list(iter(self.lazy)), list(iter(self.base))) + + def test_getslice(self): + for i in range(-len(self.base), len(self.base)): + for j in range(-len(self.base), len(self.base)): + for step in [-1, 1]: + self.assertEqual(self.lazy[i:j:step], self.base[i:j:step]) + + def test_setslice(self): + for i in range(-len(self.base), len(self.base)): + for j in range(-len(self.base), len(self.base)): + for step in [-1, 1]: + replacement = range(0, len(self.base[i:j:step])) + self.base[i:j:step] = replacement + self.lazy[i:j:step] = replacement + self.assertEqual(self.lazy, self.base) + + def test_delslice(self): + del self.base[0:1] + del self.lazy[0:1] + self.assertEqual(self.lazy, self.base) + + del self.base[-1:1:-1] + del self.lazy[-1:1:-1] + self.assertEqual(self.lazy, self.base) + + +class LazySetTestCase(unittest.TestCase): + initial_data = set([3, 2, 1]) + + def setUp(self): + self.base = set([3, 2, 1]) + self.lazy = LazySet(iter(set(self.base))) + + def test_unary_ops(self): + # These ops just need to work. + unary_ops = [str, repr] + try: | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/tests/test_tzinfo.py ^ |
@@ -0,0 +1,870 @@ +# -*- coding: ascii -*- + +import doctest +import sys +import os +import os.path +import unittest +try: + import cPickle as pickle +except ImportError: + import pickle +from datetime import ( + datetime, + timedelta +) +import warnings + +if __name__ == '__main__': + # Only munge path if invoked as a script. Testrunners should have setup + # the paths already + sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, os.pardir))) + +import pytz # noqa +from pytz import reference # noqa +from pytz.tzfile import _byte_string # noqa +from pytz.tzinfo import DstTzInfo, StaticTzInfo # noqa + +# I test for expected version to ensure the correct version of pytz is +# actually being tested. +EXPECTED_VERSION = '2021.3' +EXPECTED_OLSON_VERSION = '2021c' + +fmt = '%Y-%m-%d %H:%M:%S %Z%z' + +NOTIME = timedelta(0) + +# GMT is a tzinfo.StaticTzInfo--the class we primarily want to test--while +# UTC is reference implementation. They both have the same timezone meaning. +UTC = pytz.timezone('UTC') +GMT = pytz.timezone('GMT') +assert isinstance(GMT, StaticTzInfo), 'GMT is no longer a StaticTzInfo' + + +def prettydt(dt): + """datetime as a string using a known format. + + We don't use strftime as it doesn't handle years earlier than 1900 + per http://bugs.python.org/issue1777412 + """ + if dt.utcoffset() >= timedelta(0): + offset = '+%s' % (dt.utcoffset(),) + else: + offset = '-%s' % (-1 * dt.utcoffset(),) + return '%04d-%02d-%02d %02d:%02d:%02d %s %s' % ( + dt.year, dt.month, dt.day, + dt.hour, dt.minute, dt.second, + dt.tzname(), offset) + + +if sys.version_info[0] > 2: + # Python 3.x doesn't have unicode(), making writing code + # for Python 2.3 and Python 3.x a pain. + unicode = str + + +class BasicTest(unittest.TestCase): + + def testVersion(self): + # Ensuring the correct version of pytz has been loaded + self.assertEqual( + EXPECTED_VERSION, pytz.__version__, + 'Incorrect pytz version loaded. Import path is stuffed ' + 'or this test needs updating. (Wanted %s, got %s)' + % (EXPECTED_VERSION, pytz.__version__) + ) + + self.assertEqual( + EXPECTED_OLSON_VERSION, pytz.OLSON_VERSION, + 'Incorrect pytz version loaded. Import path is stuffed ' + 'or this test needs updating. (Wanted %s, got %s)' + % (EXPECTED_OLSON_VERSION, pytz.OLSON_VERSION) + ) + + def testGMT(self): + now = datetime.now(tz=GMT) + self.assertTrue(now.utcoffset() == NOTIME) + self.assertTrue(now.dst() == NOTIME) + self.assertTrue(now.timetuple() == now.utctimetuple()) + self.assertTrue(now == now.replace(tzinfo=UTC)) + + def testReferenceUTC(self): + now = datetime.now(tz=UTC) + self.assertTrue(now.utcoffset() == NOTIME) + self.assertTrue(now.dst() == NOTIME) + self.assertTrue(now.timetuple() == now.utctimetuple()) + + def testUnknownOffsets(self): + # This tzinfo behavior is required to make + # datetime.time.{utcoffset, dst, tzname} work as documented. + + dst_tz = pytz.timezone('US/Eastern') + + # This information is not known when we don't have a date, + # so return None per API. + self.assertTrue(dst_tz.utcoffset(None) is None) + self.assertTrue(dst_tz.dst(None) is None) + # We don't know the abbreviation, but this is still a valid + # tzname per the Python documentation. + self.assertEqual(dst_tz.tzname(None), 'US/Eastern') + + def clearCache(self): + pytz._tzinfo_cache.clear() + + def testUnicodeTimezone(self): + # We need to ensure that cold lookups work for both Unicode + # and traditional strings, and that the desired singleton is + # returned. + self.clearCache() + eastern = pytz.timezone(unicode('US/Eastern')) + self.assertTrue(eastern is pytz.timezone('US/Eastern')) + + self.clearCache() + eastern = pytz.timezone('US/Eastern') + self.assertTrue(eastern is pytz.timezone(unicode('US/Eastern'))) + + def testStaticTzInfo(self): + # Ensure that static timezones are correctly detected, + # per lp:1602807 + static = pytz.timezone('Etc/GMT-4') + self.assertTrue(isinstance(static, StaticTzInfo)) + + +class PicklingTest(unittest.TestCase): + + def _roundtrip_tzinfo(self, tz): + p = pickle.dumps(tz) + unpickled_tz = pickle.loads(p) + self.assertTrue(tz is unpickled_tz, '%s did not roundtrip' % tz.zone) + + def _roundtrip_datetime(self, dt): + # Ensure that the tzinfo attached to a datetime instance + # is identical to the one returned. This is important for + # DST timezones, as some state is stored in the tzinfo. + tz = dt.tzinfo + p = pickle.dumps(dt) + unpickled_dt = pickle.loads(p) + unpickled_tz = unpickled_dt.tzinfo + self.assertTrue(tz is unpickled_tz, '%s did not roundtrip' % tz.zone) + + def testDst(self): + tz = pytz.timezone('Europe/Amsterdam') + dt = datetime(2004, 2, 1, 0, 0, 0) + + for localized_tz in tz._tzinfos.values(): + self._roundtrip_tzinfo(localized_tz) + self._roundtrip_datetime(dt.replace(tzinfo=localized_tz)) + + def testRoundtrip(self): + for zone in pytz.all_timezones: + tz = pytz.timezone(zone) + self._roundtrip_tzinfo(tz) + + def testDatabaseFixes(self): + # Hack the pickle to make it refer to a timezone abbreviation + # that does not match anything. The unpickler should be able + # to repair this case + tz = pytz.timezone('Australia/Melbourne') + p = pickle.dumps(tz) + tzname = tz._tzname + hacked_p = p.replace( + _byte_string(tzname), + _byte_string('?' * len(tzname)) + ) + self.assertNotEqual(p, hacked_p) + unpickled_tz = pickle.loads(hacked_p) + self.assertTrue(tz is unpickled_tz) + + # Simulate a database correction. In this case, the incorrect + # data will continue to be used. + p = pickle.dumps(tz) + new_utcoffset = tz._utcoffset.seconds + 42 + + # Python 3 introduced a new pickle protocol where numbers are stored in + # hexadecimal representation. Here we extract the pickle + # representation of the number for the current Python version. + # + # Test protocol 3 on Python 3 and protocol 0 on Python 2. + if sys.version_info >= (3,): + protocol = 3 + else: + protocol = 0 + old_pickle_pattern = pickle.dumps(tz._utcoffset.seconds, protocol)[3:-1] + new_pickle_pattern = pickle.dumps(new_utcoffset, protocol)[3:-1] + hacked_p = p.replace(old_pickle_pattern, new_pickle_pattern) + + self.assertNotEqual(p, hacked_p) + unpickled_tz = pickle.loads(hacked_p) + self.assertEqual(unpickled_tz._utcoffset.seconds, new_utcoffset) + self.assertTrue(tz is not unpickled_tz) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/tzfile.py ^ |
@@ -0,0 +1,133 @@ +''' +$Id: tzfile.py,v 1.8 2004/06/03 00:15:24 zenzen Exp $ +''' + +from datetime import datetime +from struct import unpack, calcsize + +from pytz.tzinfo import StaticTzInfo, DstTzInfo, memorized_ttinfo +from pytz.tzinfo import memorized_datetime, memorized_timedelta + + +def _byte_string(s): + """Cast a string or byte string to an ASCII byte string.""" + return s.encode('ASCII') + +_NULL = _byte_string('\0') + + +def _std_string(s): + """Cast a string or byte string to an ASCII string.""" + return str(s.decode('ASCII')) + + +def build_tzinfo(zone, fp): + head_fmt = '>4s c 15x 6l' + head_size = calcsize(head_fmt) + (magic, format, ttisgmtcnt, ttisstdcnt, leapcnt, timecnt, + typecnt, charcnt) = unpack(head_fmt, fp.read(head_size)) + + # Make sure it is a tzfile(5) file + assert magic == _byte_string('TZif'), 'Got magic %s' % repr(magic) + + # Read out the transition times, localtime indices and ttinfo structures. + data_fmt = '>%(timecnt)dl %(timecnt)dB %(ttinfo)s %(charcnt)ds' % dict( + timecnt=timecnt, ttinfo='lBB' * typecnt, charcnt=charcnt) + data_size = calcsize(data_fmt) + data = unpack(data_fmt, fp.read(data_size)) + + # make sure we unpacked the right number of values + assert len(data) == 2 * timecnt + 3 * typecnt + 1 + transitions = [memorized_datetime(trans) + for trans in data[:timecnt]] + lindexes = list(data[timecnt:2 * timecnt]) + ttinfo_raw = data[2 * timecnt:-1] + tznames_raw = data[-1] + del data + + # Process ttinfo into separate structs + ttinfo = [] + tznames = {} + i = 0 + while i < len(ttinfo_raw): + # have we looked up this timezone name yet? + tzname_offset = ttinfo_raw[i + 2] + if tzname_offset not in tznames: + nul = tznames_raw.find(_NULL, tzname_offset) + if nul < 0: + nul = len(tznames_raw) + tznames[tzname_offset] = _std_string( + tznames_raw[tzname_offset:nul]) + ttinfo.append((ttinfo_raw[i], + bool(ttinfo_raw[i + 1]), + tznames[tzname_offset])) + i += 3 + + # Now build the timezone object + if len(ttinfo) == 1 or len(transitions) == 0: + ttinfo[0][0], ttinfo[0][2] + cls = type(zone, (StaticTzInfo,), dict( + zone=zone, + _utcoffset=memorized_timedelta(ttinfo[0][0]), + _tzname=ttinfo[0][2])) + else: + # Early dates use the first standard time ttinfo + i = 0 + while ttinfo[i][1]: + i += 1 + if ttinfo[i] == ttinfo[lindexes[0]]: + transitions[0] = datetime.min + else: + transitions.insert(0, datetime.min) + lindexes.insert(0, i) + + # calculate transition info + transition_info = [] + for i in range(len(transitions)): + inf = ttinfo[lindexes[i]] + utcoffset = inf[0] + if not inf[1]: + dst = 0 + else: + for j in range(i - 1, -1, -1): + prev_inf = ttinfo[lindexes[j]] + if not prev_inf[1]: + break + dst = inf[0] - prev_inf[0] # dst offset + + # Bad dst? Look further. DST > 24 hours happens when + # a timzone has moved across the international dateline. + if dst <= 0 or dst > 3600 * 3: + for j in range(i + 1, len(transitions)): + stdinf = ttinfo[lindexes[j]] + if not stdinf[1]: + dst = inf[0] - stdinf[0] + if dst > 0: + break # Found a useful std time. + + tzname = inf[2] + + # Round utcoffset and dst to the nearest minute or the + # datetime library will complain. Conversions to these timezones + # might be up to plus or minus 30 seconds out, but it is + # the best we can do. + utcoffset = int((utcoffset + 30) // 60) * 60 + dst = int((dst + 30) // 60) * 60 + transition_info.append(memorized_ttinfo(utcoffset, dst, tzname)) + + cls = type(zone, (DstTzInfo,), dict( + zone=zone, + _utc_transition_times=transitions, + _transition_info=transition_info)) + + return cls() + +if __name__ == '__main__': + import os.path + from pprint import pprint + base = os.path.join(os.path.dirname(__file__), 'zoneinfo') + tz = build_tzinfo('Australia/Melbourne', + open(os.path.join(base, 'Australia', 'Melbourne'), 'rb')) + tz = build_tzinfo('US/Eastern', + open(os.path.join(base, 'US', 'Eastern'), 'rb')) + pprint(tz._utc_transition_times) | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/tzinfo.py ^ |
@@ -0,0 +1,577 @@ +'''Base classes and helpers for building zone specific tzinfo classes''' + +from datetime import datetime, timedelta, tzinfo +from bisect import bisect_right +try: + set +except NameError: + from sets import Set as set + +import pytz +from pytz.exceptions import AmbiguousTimeError, NonExistentTimeError + +__all__ = [] + +_timedelta_cache = {} + + +def memorized_timedelta(seconds): + '''Create only one instance of each distinct timedelta''' + try: + return _timedelta_cache[seconds] + except KeyError: + delta = timedelta(seconds=seconds) + _timedelta_cache[seconds] = delta + return delta + +_epoch = datetime.utcfromtimestamp(0) +_datetime_cache = {0: _epoch} + + +def memorized_datetime(seconds): + '''Create only one instance of each distinct datetime''' + try: + return _datetime_cache[seconds] + except KeyError: + # NB. We can't just do datetime.utcfromtimestamp(seconds) as this + # fails with negative values under Windows (Bug #90096) + dt = _epoch + timedelta(seconds=seconds) + _datetime_cache[seconds] = dt + return dt + +_ttinfo_cache = {} + + +def memorized_ttinfo(*args): + '''Create only one instance of each distinct tuple''' + try: + return _ttinfo_cache[args] + except KeyError: + ttinfo = ( + memorized_timedelta(args[0]), + memorized_timedelta(args[1]), + args[2] + ) + _ttinfo_cache[args] = ttinfo + return ttinfo + +_notime = memorized_timedelta(0) + + +def _to_seconds(td): + '''Convert a timedelta to seconds''' + return td.seconds + td.days * 24 * 60 * 60 + + +class BaseTzInfo(tzinfo): + # Overridden in subclass + _utcoffset = None + _tzname = None + zone = None + + def __str__(self): + return self.zone + + +class StaticTzInfo(BaseTzInfo): + '''A timezone that has a constant offset from UTC + + These timezones are rare, as most locations have changed their + offset at some point in their history + ''' + def fromutc(self, dt): + '''See datetime.tzinfo.fromutc''' + if dt.tzinfo is not None and dt.tzinfo is not self: + raise ValueError('fromutc: dt.tzinfo is not self') + return (dt + self._utcoffset).replace(tzinfo=self) + + def utcoffset(self, dt, is_dst=None): + '''See datetime.tzinfo.utcoffset + + is_dst is ignored for StaticTzInfo, and exists only to + retain compatibility with DstTzInfo. + ''' + return self._utcoffset + + def dst(self, dt, is_dst=None): + '''See datetime.tzinfo.dst + + is_dst is ignored for StaticTzInfo, and exists only to + retain compatibility with DstTzInfo. + ''' + return _notime + + def tzname(self, dt, is_dst=None): + '''See datetime.tzinfo.tzname + + is_dst is ignored for StaticTzInfo, and exists only to + retain compatibility with DstTzInfo. + ''' + return self._tzname + + def localize(self, dt, is_dst=False): + '''Convert naive time to local time''' + if dt.tzinfo is not None: + raise ValueError('Not naive datetime (tzinfo is already set)') + return dt.replace(tzinfo=self) + + def normalize(self, dt, is_dst=False): + '''Correct the timezone information on the given datetime. + + This is normally a no-op, as StaticTzInfo timezones never have + ambiguous cases to correct: + + >>> from pytz import timezone + >>> gmt = timezone('GMT') + >>> isinstance(gmt, StaticTzInfo) + True + >>> dt = datetime(2011, 5, 8, 1, 2, 3, tzinfo=gmt) + >>> gmt.normalize(dt) is dt + True + + The supported method of converting between timezones is to use + datetime.astimezone(). Currently normalize() also works: + + >>> la = timezone('America/Los_Angeles') + >>> dt = la.localize(datetime(2011, 5, 7, 1, 2, 3)) + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + >>> gmt.normalize(dt).strftime(fmt) + '2011-05-07 08:02:03 GMT (+0000)' + ''' + if dt.tzinfo is self: + return dt + if dt.tzinfo is None: + raise ValueError('Naive time - no tzinfo set') + return dt.astimezone(self) + + def __repr__(self): + return '<StaticTzInfo %r>' % (self.zone,) + + def __reduce__(self): + # Special pickle to zone remains a singleton and to cope with + # database changes. + return pytz._p, (self.zone,) + + +class DstTzInfo(BaseTzInfo): + '''A timezone that has a variable offset from UTC + + The offset might change if daylight saving time comes into effect, + or at a point in history when the region decides to change their + timezone definition. + ''' + # Overridden in subclass + + # Sorted list of DST transition times, UTC + _utc_transition_times = None + + # [(utcoffset, dstoffset, tzname)] corresponding to + # _utc_transition_times entries + _transition_info = None + + zone = None + + # Set in __init__ + + _tzinfos = None + _dst = None # DST offset + + def __init__(self, _inf=None, _tzinfos=None): + if _inf: + self._tzinfos = _tzinfos + self._utcoffset, self._dst, self._tzname = _inf + else: + _tzinfos = {} + self._tzinfos = _tzinfos + self._utcoffset, self._dst, self._tzname = ( + self._transition_info[0]) + _tzinfos[self._transition_info[0]] = self + for inf in self._transition_info[1:]: + if inf not in _tzinfos: + _tzinfos[inf] = self.__class__(inf, _tzinfos) + + def fromutc(self, dt): + '''See datetime.tzinfo.fromutc''' + if (dt.tzinfo is not None and + getattr(dt.tzinfo, '_tzinfos', None) is not self._tzinfos): + raise ValueError('fromutc: dt.tzinfo is not self') + dt = dt.replace(tzinfo=None) + idx = max(0, bisect_right(self._utc_transition_times, dt) - 1) | ||
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Abidjan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Accra ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Addis_Ababa ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Algiers ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Asmara ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Asmera ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Bamako ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Bangui ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Banjul ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Bissau ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Blantyre ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Brazzaville ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Bujumbura ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Cairo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Casablanca ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Ceuta ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Conakry ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Dakar ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Dar_es_Salaam ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Djibouti ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Douala ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/El_Aaiun ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Freetown ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Gaborone ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Harare ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Johannesburg ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Juba ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Kampala ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Khartoum ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Kigali ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Kinshasa ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Lagos ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Libreville ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Lome ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Luanda ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Lubumbashi ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Lusaka ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Malabo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Maputo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Maseru ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Mbabane ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Mogadishu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Monrovia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Nairobi ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Ndjamena ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Niamey ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Nouakchott ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Ouagadougou ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Porto-Novo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Sao_Tome ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Timbuktu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Tripoli ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Tunis ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Africa/Windhoek ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Adak ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Anchorage ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Anguilla ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Antigua ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Araguaina ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Buenos_Aires ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Catamarca ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/ComodRivadavia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Cordoba ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Jujuy ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/La_Rioja ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Mendoza ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Rio_Gallegos ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Salta ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/San_Juan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/San_Luis ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Tucuman ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Argentina/Ushuaia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Aruba ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Asuncion ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Atikokan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Atka ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Bahia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Bahia_Banderas ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Barbados ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Belem ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Belize ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Blanc-Sablon ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Boa_Vista ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Bogota ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Boise ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Buenos_Aires ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Cambridge_Bay ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Campo_Grande ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Cancun ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Caracas ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Catamarca ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Cayenne ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Cayman ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Chicago ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Chihuahua ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Coral_Harbour ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Cordoba ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Costa_Rica ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Creston ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Cuiaba ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Curacao ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Danmarkshavn ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Dawson ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Dawson_Creek ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Denver ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Detroit ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Dominica ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Edmonton ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Eirunepe ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/El_Salvador ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Ensenada ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Fort_Nelson ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Fort_Wayne ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Fortaleza ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Glace_Bay ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Godthab ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Goose_Bay ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Grand_Turk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Grenada ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Guadeloupe ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Guatemala ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Guayaquil ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Guyana ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Halifax ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Havana ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Hermosillo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indiana/Indianapolis ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indiana/Knox ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indiana/Marengo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indiana/Petersburg ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indiana/Tell_City ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indiana/Vevay ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indiana/Vincennes ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indiana/Winamac ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Indianapolis ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Inuvik ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Iqaluit ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Jamaica ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Jujuy ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Juneau ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Kentucky/Louisville ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Kentucky/Monticello ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Knox_IN ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Kralendijk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/La_Paz ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Lima ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Los_Angeles ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Louisville ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Lower_Princes ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Maceio ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Managua ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Manaus ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Marigot ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Martinique ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Matamoros ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Mazatlan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Mendoza ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Menominee ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Merida ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Metlakatla ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Mexico_City ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Miquelon ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Moncton ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Monterrey ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Montevideo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Montreal ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Montserrat ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Nassau ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/New_York ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Nipigon ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Nome ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Noronha ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/North_Dakota/Beulah ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/North_Dakota/Center ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/North_Dakota/New_Salem ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Nuuk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Ojinaga ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Panama ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Pangnirtung ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Paramaribo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Phoenix ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Port-au-Prince ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Port_of_Spain ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Porto_Acre ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Porto_Velho ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Puerto_Rico ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Punta_Arenas ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Rainy_River ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Rankin_Inlet ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Recife ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Regina ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Resolute ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Rio_Branco ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Rosario ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Santa_Isabel ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Santarem ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Santiago ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Santo_Domingo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Sao_Paulo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Scoresbysund ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Shiprock ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Sitka ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/St_Barthelemy ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/St_Johns ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/St_Kitts ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/St_Lucia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/St_Thomas ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/St_Vincent ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Swift_Current ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Tegucigalpa ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Thule ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Thunder_Bay ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Tijuana ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Toronto ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Tortola ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Vancouver ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Virgin ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Whitehorse ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Winnipeg ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Yakutat ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/America/Yellowknife ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Casey ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Davis ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/DumontDUrville ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Macquarie ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Mawson ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/McMurdo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Palmer ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Rothera ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/South_Pole ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Syowa ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Troll ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Antarctica/Vostok ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Arctic/Longyearbyen ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Aden ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Almaty ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Amman ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Anadyr ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Aqtau ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Aqtobe ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Ashgabat ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Ashkhabad ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Atyrau ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Baghdad ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Bahrain ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Baku ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Bangkok ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Barnaul ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Beirut ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Bishkek ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Brunei ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Calcutta ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Chita ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Choibalsan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Chongqing ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Chungking ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Colombo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Dacca ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Damascus ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Dhaka ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Dili ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Dubai ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Dushanbe ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Famagusta ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Gaza ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Harbin ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Hebron ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Ho_Chi_Minh ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Hong_Kong ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Hovd ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Irkutsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Istanbul ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Jakarta ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Jayapura ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Jerusalem ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Kabul ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Kamchatka ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Karachi ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Kashgar ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Kathmandu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Katmandu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Khandyga ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Kolkata ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Krasnoyarsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Kuala_Lumpur ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Kuching ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Kuwait ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Macao ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Macau ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Magadan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Makassar ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Manila ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Muscat ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Nicosia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Novokuznetsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Novosibirsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Omsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Oral ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Phnom_Penh ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Pontianak ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Pyongyang ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Qatar ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Qostanay ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Qyzylorda ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Rangoon ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Riyadh ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Saigon ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Sakhalin ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Samarkand ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Seoul ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Shanghai ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Singapore ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Srednekolymsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Taipei ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Tashkent ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Tbilisi ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Tehran ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Tel_Aviv ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Thimbu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Thimphu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Tokyo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Tomsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Ujung_Pandang ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Ulaanbaatar ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Ulan_Bator ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Urumqi ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Ust-Nera ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Vientiane ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Vladivostok ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Yakutsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Yangon ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Yekaterinburg ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Asia/Yerevan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Azores ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Bermuda ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Canary ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Cape_Verde ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Faeroe ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Faroe ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Jan_Mayen ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Madeira ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Reykjavik ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/South_Georgia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/St_Helena ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Atlantic/Stanley ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/ACT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Adelaide ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Brisbane ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Broken_Hill ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Canberra ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Currie ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Darwin ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Eucla ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Hobart ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/LHI ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Lindeman ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Lord_Howe ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Melbourne ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/NSW ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/North ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Perth ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Queensland ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/South ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Sydney ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Tasmania ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Victoria ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/West ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Australia/Yancowinna ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Brazil/Acre ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Brazil/DeNoronha ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Brazil/East ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Brazil/West ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/CET ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/CST6CDT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Canada/Atlantic ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Canada/Central ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Canada/Eastern ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Canada/Mountain ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Canada/Newfoundland ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Canada/Pacific ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Canada/Saskatchewan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Canada/Yukon ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Chile/Continental ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Chile/EasterIsland ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Cuba ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/EET ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/EST ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/EST5EDT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Egypt ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Eire ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+0 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+1 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+10 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+11 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+12 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+2 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+3 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+4 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+5 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+6 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+7 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+8 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT+9 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-0 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-1 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-10 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-11 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-12 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-13 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-14 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-2 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-3 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-4 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-5 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-6 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-7 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-8 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT-9 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/GMT0 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/Greenwich ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/UCT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/UTC ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/Universal ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Etc/Zulu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Amsterdam ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Andorra ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Astrakhan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Athens ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Belfast ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Belgrade ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Berlin ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Bratislava ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Brussels ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Bucharest ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Budapest ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Busingen ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Chisinau ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Copenhagen ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Dublin ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Gibraltar ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Guernsey ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Helsinki ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Isle_of_Man ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Istanbul ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Jersey ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Kaliningrad ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Kiev ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Kirov ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Lisbon ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Ljubljana ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/London ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Luxembourg ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Madrid ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Malta ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Mariehamn ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Minsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Monaco ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Moscow ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Nicosia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Oslo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Paris ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Podgorica ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Prague ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Riga ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Rome ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Samara ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/San_Marino ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Sarajevo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Saratov ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Simferopol ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Skopje ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Sofia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Stockholm ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Tallinn ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Tirane ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Tiraspol ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Ulyanovsk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Uzhgorod ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Vaduz ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Vatican ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Vienna ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Vilnius ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Volgograd ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Warsaw ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Zagreb ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Zaporozhye ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Europe/Zurich ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Factory ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/GB ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/GB-Eire ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/GMT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/GMT+0 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/GMT-0 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/GMT0 ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Greenwich ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/HST ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Hongkong ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Iceland ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Antananarivo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Chagos ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Christmas ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Cocos ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Comoro ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Kerguelen ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Mahe ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Maldives ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Mauritius ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Mayotte ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Indian/Reunion ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Iran ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Israel ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Jamaica ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Japan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Kwajalein ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Libya ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/MET ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/MST ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/MST7MDT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Mexico/BajaNorte ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Mexico/BajaSur ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Mexico/General ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/NZ ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/NZ-CHAT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Navajo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/PRC ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/PST8PDT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Apia ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Auckland ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Bougainville ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Chatham ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Chuuk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Easter ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Efate ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Enderbury ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Fakaofo ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Fiji ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Funafuti ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Galapagos ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Gambier ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Guadalcanal ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Guam ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Honolulu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Johnston ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Kanton ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Kiritimati ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Kosrae ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Kwajalein ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Majuro ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Marquesas ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Midway ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Nauru ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Niue ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Norfolk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Noumea ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Pago_Pago ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Palau ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Pitcairn ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Pohnpei ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Ponape ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Port_Moresby ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Rarotonga ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Saipan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Samoa ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Tahiti ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Tarawa ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Tongatapu ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Truk ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Wake ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Wallis ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Pacific/Yap ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Poland ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Portugal ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/ROC ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/ROK ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Singapore ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Turkey ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/UCT ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Alaska ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Aleutian ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Arizona ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Central ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/East-Indiana ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Eastern ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Hawaii ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Indiana-Starke ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Michigan ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Mountain ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Pacific ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/US/Samoa ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/UTC ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Universal ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/W-SU ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/WET ^ | |
Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/Zulu ^ | |
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/iso3166.tab ^ |
@@ -0,0 +1,274 @@ +# ISO 3166 alpha-2 country codes +# +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. +# +# From Paul Eggert (2015-05-02): +# This file contains a table of two-letter country codes. Columns are +# separated by a single tab. Lines beginning with '#' are comments. +# All text uses UTF-8 encoding. The columns of the table are as follows: +# +# 1. ISO 3166-1 alpha-2 country code, current as of +# ISO 3166-1 N976 (2018-11-06). See: Updates on ISO 3166-1 +# https://isotc.iso.org/livelink/livelink/Open/16944257 +# 2. The usual English name for the coded region, +# chosen so that alphabetic sorting of subsets produces helpful lists. +# This is not the same as the English name in the ISO 3166 tables. +# +# The table is sorted by country code. +# +# This table is intended as an aid for users, to help them select time +# zone data appropriate for their practical needs. It is not intended +# to take or endorse any position on legal or territorial claims. +# +#country- +#code name of country, territory, area, or subdivision +AD Andorra +AE United Arab Emirates +AF Afghanistan +AG Antigua & Barbuda +AI Anguilla +AL Albania +AM Armenia +AO Angola +AQ Antarctica +AR Argentina +AS Samoa (American) +AT Austria +AU Australia +AW Aruba +AX Åland Islands +AZ Azerbaijan +BA Bosnia & Herzegovina +BB Barbados +BD Bangladesh +BE Belgium +BF Burkina Faso +BG Bulgaria +BH Bahrain +BI Burundi +BJ Benin +BL St Barthelemy +BM Bermuda +BN Brunei +BO Bolivia +BQ Caribbean NL +BR Brazil +BS Bahamas +BT Bhutan +BV Bouvet Island +BW Botswana +BY Belarus +BZ Belize +CA Canada +CC Cocos (Keeling) Islands +CD Congo (Dem. Rep.) +CF Central African Rep. +CG Congo (Rep.) +CH Switzerland +CI Côte d'Ivoire +CK Cook Islands +CL Chile +CM Cameroon +CN China +CO Colombia +CR Costa Rica +CU Cuba +CV Cape Verde +CW Curaçao +CX Christmas Island +CY Cyprus +CZ Czech Republic +DE Germany +DJ Djibouti +DK Denmark +DM Dominica +DO Dominican Republic +DZ Algeria +EC Ecuador +EE Estonia +EG Egypt +EH Western Sahara +ER Eritrea +ES Spain +ET Ethiopia +FI Finland +FJ Fiji +FK Falkland Islands +FM Micronesia +FO Faroe Islands +FR France +GA Gabon +GB Britain (UK) +GD Grenada +GE Georgia +GF French Guiana +GG Guernsey +GH Ghana +GI Gibraltar +GL Greenland +GM Gambia +GN Guinea +GP Guadeloupe +GQ Equatorial Guinea +GR Greece +GS South Georgia & the South Sandwich Islands +GT Guatemala +GU Guam +GW Guinea-Bissau +GY Guyana +HK Hong Kong +HM Heard Island & McDonald Islands +HN Honduras +HR Croatia +HT Haiti +HU Hungary +ID Indonesia +IE Ireland +IL Israel +IM Isle of Man +IN India +IO British Indian Ocean Territory +IQ Iraq +IR Iran +IS Iceland +IT Italy +JE Jersey +JM Jamaica +JO Jordan +JP Japan +KE Kenya +KG Kyrgyzstan +KH Cambodia +KI Kiribati +KM Comoros +KN St Kitts & Nevis +KP Korea (North) +KR Korea (South) +KW Kuwait +KY Cayman Islands +KZ Kazakhstan +LA Laos +LB Lebanon +LC St Lucia +LI Liechtenstein +LK Sri Lanka +LR Liberia +LS Lesotho +LT Lithuania +LU Luxembourg +LV Latvia +LY Libya +MA Morocco +MC Monaco +MD Moldova +ME Montenegro +MF St Martin (French) +MG Madagascar +MH Marshall Islands +MK North Macedonia +ML Mali +MM Myanmar (Burma) +MN Mongolia +MO Macau +MP Northern Mariana Islands +MQ Martinique +MR Mauritania +MS Montserrat +MT Malta +MU Mauritius +MV Maldives +MW Malawi +MX Mexico +MY Malaysia +MZ Mozambique +NA Namibia +NC New Caledonia +NE Niger +NF Norfolk Island +NG Nigeria +NI Nicaragua +NL Netherlands +NO Norway +NP Nepal +NR Nauru +NU Niue +NZ New Zealand +OM Oman +PA Panama +PE Peru | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/leapseconds ^ |
@@ -0,0 +1,82 @@ +# Allowance for leap seconds added to each time zone file. + +# This file is in the public domain. + +# This file is generated automatically from the data in the public-domain +# NIST format leap-seconds.list file, which can be copied from +# <ftp://ftp.nist.gov/pub/time/leap-seconds.list> +# or <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>. +# The NIST file is used instead of its IERS upstream counterpart +# <https://hpiers.obspm.fr/iers/bul/bulc/ntp/leap-seconds.list> +# because under US law the NIST file is public domain +# whereas the IERS file's copyright and license status is unclear. +# For more about leap-seconds.list, please see +# The NTP Timescale and Leap Seconds +# <https://www.eecis.udel.edu/~mills/leap.html>. + +# The rules for leap seconds are specified in Annex 1 (Time scales) of: +# Standard-frequency and time-signal emissions. +# International Telecommunication Union - Radiocommunication Sector +# (ITU-R) Recommendation TF.460-6 (02/2002) +# <https://www.itu.int/rec/R-REC-TF.460-6-200202-I/>. +# The International Earth Rotation and Reference Systems Service (IERS) +# periodically uses leap seconds to keep UTC to within 0.9 s of UT1 +# (a proxy for Earth's angle in space as measured by astronomers) +# and publishes leap second data in a copyrighted file +# <https://hpiers.obspm.fr/iers/bul/bulc/Leap_Second.dat>. +# See: Levine J. Coordinated Universal Time and the leap second. +# URSI Radio Sci Bull. 2016;89(4):30-6. doi:10.23919/URSIRSB.2016.7909995 +# <https://ieeexplore.ieee.org/document/7909995>. + +# There were no leap seconds before 1972, as no official mechanism +# accounted for the discrepancy between atomic time (TAI) and the earth's +# rotation. The first ("1 Jan 1972") data line in leap-seconds.list +# does not denote a leap second; it denotes the start of the current definition +# of UTC. + +# All leap-seconds are Stationary (S) at the given UTC time. +# The correction (+ or -) is made at the given time, so in the unlikely +# event of a negative leap second, a line would look like this: +# Leap YEAR MON DAY 23:59:59 - S +# Typical lines look like this: +# Leap YEAR MON DAY 23:59:60 + S +Leap 1972 Jun 30 23:59:60 + S +Leap 1972 Dec 31 23:59:60 + S +Leap 1973 Dec 31 23:59:60 + S +Leap 1974 Dec 31 23:59:60 + S +Leap 1975 Dec 31 23:59:60 + S +Leap 1976 Dec 31 23:59:60 + S +Leap 1977 Dec 31 23:59:60 + S +Leap 1978 Dec 31 23:59:60 + S +Leap 1979 Dec 31 23:59:60 + S +Leap 1981 Jun 30 23:59:60 + S +Leap 1982 Jun 30 23:59:60 + S +Leap 1983 Jun 30 23:59:60 + S +Leap 1985 Jun 30 23:59:60 + S +Leap 1987 Dec 31 23:59:60 + S +Leap 1989 Dec 31 23:59:60 + S +Leap 1990 Dec 31 23:59:60 + S +Leap 1992 Jun 30 23:59:60 + S +Leap 1993 Jun 30 23:59:60 + S +Leap 1994 Jun 30 23:59:60 + S +Leap 1995 Dec 31 23:59:60 + S +Leap 1997 Jun 30 23:59:60 + S +Leap 1998 Dec 31 23:59:60 + S +Leap 2005 Dec 31 23:59:60 + S +Leap 2008 Dec 31 23:59:60 + S +Leap 2012 Jun 30 23:59:60 + S +Leap 2015 Jun 30 23:59:60 + S +Leap 2016 Dec 31 23:59:60 + S + +# UTC timestamp when this leap second list expires. +# Any additional leap seconds will come after this. +# This Expires line is commented out for now, +# so that pre-2020a zic implementations do not reject this file. +#Expires 2022 Jun 28 00:00:00 + +# POSIX timestamps for the data in this file: +#updated 1467936000 (2016-07-08 00:00:00 UTC) +#expires 1656374400 (2022-06-28 00:00:00 UTC) + +# Updated through IERS Bulletin C62 +# File expires on: 28 June 2022 | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/tzdata.zi ^ |
@@ -0,0 +1,4433 @@ +# version unknown-dirty +# This zic input file is in the public domain. +R d 1916 o - Jun 14 23s 1 S +R d 1916 1919 - O Su>=1 23s 0 - +R d 1917 o - Mar 24 23s 1 S +R d 1918 o - Mar 9 23s 1 S +R d 1919 o - Mar 1 23s 1 S +R d 1920 o - F 14 23s 1 S +R d 1920 o - O 23 23s 0 - +R d 1921 o - Mar 14 23s 1 S +R d 1921 o - Jun 21 23s 0 - +R d 1939 o - S 11 23s 1 S +R d 1939 o - N 19 1 0 - +R d 1944 1945 - Ap M>=1 2 1 S +R d 1944 o - O 8 2 0 - +R d 1945 o - S 16 1 0 - +R d 1971 o - Ap 25 23s 1 S +R d 1971 o - S 26 23s 0 - +R d 1977 o - May 6 0 1 S +R d 1977 o - O 21 0 0 - +R d 1978 o - Mar 24 1 1 S +R d 1978 o - S 22 3 0 - +R d 1980 o - Ap 25 0 1 S +R d 1980 o - O 31 2 0 - +Z Africa/Algiers 0:12:12 - LMT 1891 Mar 16 +0:9:21 - PMT 1911 Mar 11 +0 d WE%sT 1940 F 25 2 +1 d CE%sT 1946 O 7 +0 - WET 1956 Ja 29 +1 - CET 1963 Ap 14 +0 d WE%sT 1977 O 21 +1 d CE%sT 1979 O 26 +0 d WE%sT 1981 May +1 - CET +Z Atlantic/Cape_Verde -1:34:4 - LMT 1912 Ja 1 2u +-2 - -02 1942 S +-2 1 -01 1945 O 15 +-2 - -02 1975 N 25 2 +-1 - -01 +Z Africa/Ndjamena 1:0:12 - LMT 1912 +1 - WAT 1979 O 14 +1 1 WAST 1980 Mar 8 +1 - WAT +Z Africa/Abidjan -0:16:8 - LMT 1912 +0 - GMT +L Africa/Abidjan Africa/Accra +L Africa/Abidjan Africa/Bamako +L Africa/Abidjan Africa/Banjul +L Africa/Abidjan Africa/Conakry +L Africa/Abidjan Africa/Dakar +L Africa/Abidjan Africa/Freetown +L Africa/Abidjan Africa/Lome +L Africa/Abidjan Africa/Nouakchott +L Africa/Abidjan Africa/Ouagadougou +L Africa/Abidjan Atlantic/St_Helena +R K 1940 o - Jul 15 0 1 S +R K 1940 o - O 1 0 0 - +R K 1941 o - Ap 15 0 1 S +R K 1941 o - S 16 0 0 - +R K 1942 1944 - Ap 1 0 1 S +R K 1942 o - O 27 0 0 - +R K 1943 1945 - N 1 0 0 - +R K 1945 o - Ap 16 0 1 S +R K 1957 o - May 10 0 1 S +R K 1957 1958 - O 1 0 0 - +R K 1958 o - May 1 0 1 S +R K 1959 1981 - May 1 1 1 S +R K 1959 1965 - S 30 3 0 - +R K 1966 1994 - O 1 3 0 - +R K 1982 o - Jul 25 1 1 S +R K 1983 o - Jul 12 1 1 S +R K 1984 1988 - May 1 1 1 S +R K 1989 o - May 6 1 1 S +R K 1990 1994 - May 1 1 1 S +R K 1995 2010 - Ap lastF 0s 1 S +R K 1995 2005 - S lastTh 24 0 - +R K 2006 o - S 21 24 0 - +R K 2007 o - S Th>=1 24 0 - +R K 2008 o - Au lastTh 24 0 - +R K 2009 o - Au 20 24 0 - +R K 2010 o - Au 10 24 0 - +R K 2010 o - S 9 24 1 S +R K 2010 o - S lastTh 24 0 - +R K 2014 o - May 15 24 1 S +R K 2014 o - Jun 26 24 0 - +R K 2014 o - Jul 31 24 1 S +R K 2014 o - S lastTh 24 0 - +Z Africa/Cairo 2:5:9 - LMT 1900 O +2 K EE%sT +Z Africa/Bissau -1:2:20 - LMT 1912 Ja 1 1u +-1 - -01 1975 +0 - GMT +Z Africa/Nairobi 2:27:16 - LMT 1908 May +2:30 - +0230 1928 Jun 30 24 +3 - EAT 1930 Ja 4 24 +2:30 - +0230 1936 D 31 24 +2:45 - +0245 1942 Jul 31 24 +3 - EAT +L Africa/Nairobi Africa/Addis_Ababa +L Africa/Nairobi Africa/Asmara +L Africa/Nairobi Africa/Dar_es_Salaam +L Africa/Nairobi Africa/Djibouti +L Africa/Nairobi Africa/Kampala +L Africa/Nairobi Africa/Mogadishu +L Africa/Nairobi Indian/Antananarivo +L Africa/Nairobi Indian/Comoro +L Africa/Nairobi Indian/Mayotte +Z Africa/Monrovia -0:43:8 - LMT 1882 +-0:43:8 - MMT 1919 Mar +-0:44:30 - MMT 1972 Ja 7 +0 - GMT +R L 1951 o - O 14 2 1 S +R L 1952 o - Ja 1 0 0 - +R L 1953 o - O 9 2 1 S +R L 1954 o - Ja 1 0 0 - +R L 1955 o - S 30 0 1 S +R L 1956 o - Ja 1 0 0 - +R L 1982 1984 - Ap 1 0 1 S +R L 1982 1985 - O 1 0 0 - +R L 1985 o - Ap 6 0 1 S +R L 1986 o - Ap 4 0 1 S +R L 1986 o - O 3 0 0 - +R L 1987 1989 - Ap 1 0 1 S +R L 1987 1989 - O 1 0 0 - +R L 1997 o - Ap 4 0 1 S +R L 1997 o - O 4 0 0 - +R L 2013 o - Mar lastF 1 1 S +R L 2013 o - O lastF 2 0 - +Z Africa/Tripoli 0:52:44 - LMT 1920 +1 L CE%sT 1959 +2 - EET 1982 +1 L CE%sT 1990 May 4 +2 - EET 1996 S 30 +1 L CE%sT 1997 O 4 +2 - EET 2012 N 10 2 +1 L CE%sT 2013 O 25 2 +2 - EET +R MU 1982 o - O 10 0 1 - +R MU 1983 o - Mar 21 0 0 - +R MU 2008 o - O lastSu 2 1 - +R MU 2009 o - Mar lastSu 2 0 - +Z Indian/Mauritius 3:50 - LMT 1907 +4 MU +04/+05 +R M 1939 o - S 12 0 1 - +R M 1939 o - N 19 0 0 - +R M 1940 o - F 25 0 1 - +R M 1945 o - N 18 0 0 - +R M 1950 o - Jun 11 0 1 - +R M 1950 o - O 29 0 0 - +R M 1967 o - Jun 3 12 1 - +R M 1967 o - O 1 0 0 - +R M 1974 o - Jun 24 0 1 - +R M 1974 o - S 1 0 0 - +R M 1976 1977 - May 1 0 1 - +R M 1976 o - Au 1 0 0 - +R M 1977 o - S 28 0 0 - +R M 1978 o - Jun 1 0 1 - +R M 1978 o - Au 4 0 0 - +R M 2008 o - Jun 1 0 1 - +R M 2008 o - S 1 0 0 - +R M 2009 o - Jun 1 0 1 - +R M 2009 o - Au 21 0 0 - +R M 2010 o - May 2 0 1 - +R M 2010 o - Au 8 0 0 - +R M 2011 o - Ap 3 0 1 - +R M 2011 o - Jul 31 0 0 - +R M 2012 2013 - Ap lastSu 2 1 - +R M 2012 o - Jul 20 3 0 - +R M 2012 o - Au 20 2 1 - +R M 2012 o - S 30 3 0 - +R M 2013 o - Jul 7 3 0 - +R M 2013 o - Au 10 2 1 - +R M 2013 2018 - O lastSu 3 0 - +R M 2014 2018 - Mar lastSu 2 1 - +R M 2014 o - Jun 28 3 0 - +R M 2014 o - Au 2 2 1 - +R M 2015 o - Jun 14 3 0 - +R M 2015 o - Jul 19 2 1 - +R M 2016 o - Jun 5 3 0 - +R M 2016 o - Jul 10 2 1 - +R M 2017 o - May 21 3 0 - +R M 2017 o - Jul 2 2 1 - +R M 2018 o - May 13 3 0 - +R M 2018 o - Jun 17 2 1 - +R M 2019 o - May 5 3 -1 - +R M 2019 o - Jun 9 2 0 - +R M 2020 o - Ap 19 3 -1 - +R M 2020 o - May 31 2 0 - +R M 2021 o - Ap 11 3 -1 - +R M 2021 o - May 16 2 0 - +R M 2022 o - Mar 27 3 -1 - +R M 2022 o - May 8 2 0 - +R M 2023 o - Mar 19 3 -1 - +R M 2023 o - Ap 30 2 0 - +R M 2024 o - Mar 10 3 -1 - +R M 2024 o - Ap 14 2 0 - +R M 2025 o - F 23 3 -1 - +R M 2025 o - Ap 6 2 0 - +R M 2026 o - F 15 3 -1 - | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/zone.tab ^ |
@@ -0,0 +1,454 @@ +# tzdb timezone descriptions (deprecated version) +# +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. +# +# From Paul Eggert (2021-09-20): +# This file is intended as a backward-compatibility aid for older programs. +# New programs should use zone1970.tab. This file is like zone1970.tab (see +# zone1970.tab's comments), but with the following additional restrictions: +# +# 1. This file contains only ASCII characters. +# 2. The first data column contains exactly one country code. +# +# Because of (2), each row stands for an area that is the intersection +# of a region identified by a country code and of a timezone where civil +# clocks have agreed since 1970; this is a narrower definition than +# that of zone1970.tab. +# +# Unlike zone1970.tab, a row's third column can be a Link from +# 'backward' instead of a Zone. +# +# This table is intended as an aid for users, to help them select timezones +# appropriate for their practical needs. It is not intended to take or +# endorse any position on legal or territorial claims. +# +#country- +#code coordinates TZ comments +AD +4230+00131 Europe/Andorra +AE +2518+05518 Asia/Dubai +AF +3431+06912 Asia/Kabul +AG +1703-06148 America/Antigua +AI +1812-06304 America/Anguilla +AL +4120+01950 Europe/Tirane +AM +4011+04430 Asia/Yerevan +AO -0848+01314 Africa/Luanda +AQ -7750+16636 Antarctica/McMurdo New Zealand time - McMurdo, South Pole +AQ -6617+11031 Antarctica/Casey Casey +AQ -6835+07758 Antarctica/Davis Davis +AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville +AQ -6736+06253 Antarctica/Mawson Mawson +AQ -6448-06406 Antarctica/Palmer Palmer +AQ -6734-06808 Antarctica/Rothera Rothera +AQ -690022+0393524 Antarctica/Syowa Syowa +AQ -720041+0023206 Antarctica/Troll Troll +AQ -7824+10654 Antarctica/Vostok Vostok +AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF) +AR -3124-06411 America/Argentina/Cordoba Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF) +AR -2447-06525 America/Argentina/Salta Salta (SA, LP, NQ, RN) +AR -2411-06518 America/Argentina/Jujuy Jujuy (JY) +AR -2649-06513 America/Argentina/Tucuman Tucuman (TM) +AR -2828-06547 America/Argentina/Catamarca Catamarca (CT); Chubut (CH) +AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR) +AR -3132-06831 America/Argentina/San_Juan San Juan (SJ) +AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ) +AR -3319-06621 America/Argentina/San_Luis San Luis (SL) +AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC) +AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF) +AS -1416-17042 Pacific/Pago_Pago +AT +4813+01620 Europe/Vienna +AU -3133+15905 Australia/Lord_Howe Lord Howe Island +AU -5430+15857 Antarctica/Macquarie Macquarie Island +AU -4253+14719 Australia/Hobart Tasmania +AU -3749+14458 Australia/Melbourne Victoria +AU -3352+15113 Australia/Sydney New South Wales (most areas) +AU -3157+14127 Australia/Broken_Hill New South Wales (Yancowinna) +AU -2728+15302 Australia/Brisbane Queensland (most areas) +AU -2016+14900 Australia/Lindeman Queensland (Whitsunday Islands) +AU -3455+13835 Australia/Adelaide South Australia +AU -1228+13050 Australia/Darwin Northern Territory +AU -3157+11551 Australia/Perth Western Australia (most areas) +AU -3143+12852 Australia/Eucla Western Australia (Eucla) +AW +1230-06958 America/Aruba +AX +6006+01957 Europe/Mariehamn +AZ +4023+04951 Asia/Baku +BA +4352+01825 Europe/Sarajevo +BB +1306-05937 America/Barbados +BD +2343+09025 Asia/Dhaka +BE +5050+00420 Europe/Brussels +BF +1222-00131 Africa/Ouagadougou +BG +4241+02319 Europe/Sofia +BH +2623+05035 Asia/Bahrain +BI -0323+02922 Africa/Bujumbura +BJ +0629+00237 Africa/Porto-Novo +BL +1753-06251 America/St_Barthelemy +BM +3217-06446 Atlantic/Bermuda +BN +0456+11455 Asia/Brunei +BO -1630-06809 America/La_Paz +BQ +120903-0681636 America/Kralendijk +BR -0351-03225 America/Noronha Atlantic islands +BR -0127-04829 America/Belem Para (east); Amapa +BR -0343-03830 America/Fortaleza Brazil (northeast: MA, PI, CE, RN, PB) +BR -0803-03454 America/Recife Pernambuco +BR -0712-04812 America/Araguaina Tocantins +BR -0940-03543 America/Maceio Alagoas, Sergipe +BR -1259-03831 America/Bahia Bahia +BR -2332-04637 America/Sao_Paulo Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS) +BR -2027-05437 America/Campo_Grande Mato Grosso do Sul +BR -1535-05605 America/Cuiaba Mato Grosso +BR -0226-05452 America/Santarem Para (west) +BR -0846-06354 America/Porto_Velho Rondonia +BR +0249-06040 America/Boa_Vista Roraima +BR -0308-06001 America/Manaus Amazonas (east) +BR -0640-06952 America/Eirunepe Amazonas (west) +BR -0958-06748 America/Rio_Branco Acre +BS +2505-07721 America/Nassau +BT +2728+08939 Asia/Thimphu +BW -2439+02555 Africa/Gaborone +BY +5354+02734 Europe/Minsk +BZ +1730-08812 America/Belize +CA +4734-05243 America/St_Johns Newfoundland; Labrador (southeast) +CA +4439-06336 America/Halifax Atlantic - NS (most areas); PE +CA +4612-05957 America/Glace_Bay Atlantic - NS (Cape Breton) +CA +4606-06447 America/Moncton Atlantic - New Brunswick +CA +5320-06025 America/Goose_Bay Atlantic - Labrador (most areas) +CA +5125-05707 America/Blanc-Sablon AST - QC (Lower North Shore) +CA +4339-07923 America/Toronto Eastern - ON, QC (most areas) +CA +4901-08816 America/Nipigon Eastern - ON, QC (no DST 1967-73) +CA +4823-08915 America/Thunder_Bay Eastern - ON (Thunder Bay) +CA +6344-06828 America/Iqaluit Eastern - NU (most east areas) +CA +6608-06544 America/Pangnirtung Eastern - NU (Pangnirtung) +CA +484531-0913718 America/Atikokan EST - ON (Atikokan); NU (Coral H) +CA +4953-09709 America/Winnipeg Central - ON (west); Manitoba +CA +4843-09434 America/Rainy_River Central - ON (Rainy R, Ft Frances) +CA +744144-0944945 America/Resolute Central - NU (Resolute) +CA +624900-0920459 America/Rankin_Inlet Central - NU (central) +CA +5024-10439 America/Regina CST - SK (most areas) +CA +5017-10750 America/Swift_Current CST - SK (midwest) +CA +5333-11328 America/Edmonton Mountain - AB; BC (E); SK (W) +CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west) +CA +6227-11421 America/Yellowknife Mountain - NT (central) +CA +682059-1334300 America/Inuvik Mountain - NT (west) +CA +4906-11631 America/Creston MST - BC (Creston) +CA +5946-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John) +CA +5848-12242 America/Fort_Nelson MST - BC (Ft Nelson) +CA +6043-13503 America/Whitehorse MST - Yukon (east) +CA +6404-13925 America/Dawson MST - Yukon (west) +CA +4916-12307 America/Vancouver Pacific - BC (most areas) +CC -1210+09655 Indian/Cocos +CD -0418+01518 Africa/Kinshasa Dem. Rep. of Congo (west) +CD -1140+02728 Africa/Lubumbashi Dem. Rep. of Congo (east) +CF +0422+01835 Africa/Bangui +CG -0416+01517 Africa/Brazzaville +CH +4723+00832 Europe/Zurich +CI +0519-00402 Africa/Abidjan +CK -2114-15946 Pacific/Rarotonga +CL -3327-07040 America/Santiago Chile (most areas) +CL -5309-07055 America/Punta_Arenas Region of Magallanes +CL -2709-10926 Pacific/Easter Easter Island +CM +0403+00942 Africa/Douala +CN +3114+12128 Asia/Shanghai Beijing Time +CN +4348+08735 Asia/Urumqi Xinjiang Time +CO +0436-07405 America/Bogota +CR +0956-08405 America/Costa_Rica +CU +2308-08222 America/Havana +CV +1455-02331 Atlantic/Cape_Verde +CW +1211-06900 America/Curacao +CX -1025+10543 Indian/Christmas +CY +3510+03322 Asia/Nicosia Cyprus (most areas) +CY +3507+03357 Asia/Famagusta Northern Cyprus +CZ +5005+01426 Europe/Prague +DE +5230+01322 Europe/Berlin Germany (most areas) +DE +4742+00841 Europe/Busingen Busingen +DJ +1136+04309 Africa/Djibouti +DK +5540+01235 Europe/Copenhagen +DM +1518-06124 America/Dominica +DO +1828-06954 America/Santo_Domingo +DZ +3647+00303 Africa/Algiers +EC -0210-07950 America/Guayaquil Ecuador (mainland) +EC -0054-08936 Pacific/Galapagos Galapagos Islands +EE +5925+02445 Europe/Tallinn +EG +3003+03115 Africa/Cairo +EH +2709-01312 Africa/El_Aaiun +ER +1520+03853 Africa/Asmara +ES +4024-00341 Europe/Madrid Spain (mainland) +ES +3553-00519 Africa/Ceuta Ceuta, Melilla +ES +2806-01524 Atlantic/Canary Canary Islands +ET +0902+03842 Africa/Addis_Ababa +FI +6010+02458 Europe/Helsinki +FJ -1808+17825 Pacific/Fiji +FK -5142-05751 Atlantic/Stanley +FM +0725+15147 Pacific/Chuuk Chuuk/Truk, Yap +FM +0658+15813 Pacific/Pohnpei Pohnpei/Ponape +FM +0519+16259 Pacific/Kosrae Kosrae +FO +6201-00646 Atlantic/Faroe +FR +4852+00220 Europe/Paris +GA +0023+00927 Africa/Libreville +GB +513030-0000731 Europe/London +GD +1203-06145 America/Grenada +GE +4143+04449 Asia/Tbilisi +GF +0456-05220 America/Cayenne +GG +492717-0023210 Europe/Guernsey +GH +0533-00013 Africa/Accra +GI +3608-00521 Europe/Gibraltar +GL +6411-05144 America/Nuuk Greenland (most areas) +GL +7646-01840 America/Danmarkshavn National Park (east coast) +GL +7029-02158 America/Scoresbysund Scoresbysund/Ittoqqortoormiit +GL +7634-06847 America/Thule Thule/Pituffik +GM +1328-01639 Africa/Banjul +GN +0931-01343 Africa/Conakry | ||
[-] [+] | Added | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/qml/pages/pytz/zoneinfo/zone1970.tab ^ |
@@ -0,0 +1,374 @@ +# tzdb timezone descriptions +# +# This file is in the public domain. +# +# From Paul Eggert (2018-06-27): +# This file contains a table where each row stands for a timezone where +# civil timestamps have agreed since 1970. Columns are separated by +# a single tab. Lines beginning with '#' are comments. All text uses +# UTF-8 encoding. The columns of the table are as follows: +# +# 1. The countries that overlap the timezone, as a comma-separated list +# of ISO 3166 2-character country codes. See the file 'iso3166.tab'. +# 2. Latitude and longitude of the timezone's principal location +# in ISO 6709 sign-degrees-minutes-seconds format, +# either ±DDMM±DDDMM or ±DDMMSS±DDDMMSS, +# first latitude (+ is north), then longitude (+ is east). +# 3. Timezone name used in value of TZ environment variable. +# Please see the theory.html file for how these names are chosen. +# If multiple timezones overlap a country, each has a row in the +# table, with each column 1 containing the country code. +# 4. Comments; present if and only if a country has multiple timezones. +# +# If a timezone covers multiple countries, the most-populous city is used, +# and that country is listed first in column 1; any other countries +# are listed alphabetically by country code. The table is sorted +# first by country code, then (if possible) by an order within the +# country that (1) makes some geographical sense, and (2) puts the +# most populous timezones first, where that does not contradict (1). +# +# This table is intended as an aid for users, to help them select timezones +# appropriate for their practical needs. It is not intended to take or +# endorse any position on legal or territorial claims. +# +#country- +#codes coordinates TZ comments +AD +4230+00131 Europe/Andorra +AE,OM +2518+05518 Asia/Dubai +AF +3431+06912 Asia/Kabul +AL +4120+01950 Europe/Tirane +AM +4011+04430 Asia/Yerevan +AQ -6617+11031 Antarctica/Casey Casey +AQ -6835+07758 Antarctica/Davis Davis +AQ -6736+06253 Antarctica/Mawson Mawson +AQ -6448-06406 Antarctica/Palmer Palmer +AQ -6734-06808 Antarctica/Rothera Rothera +AQ -720041+0023206 Antarctica/Troll Troll +AQ -7824+10654 Antarctica/Vostok Vostok +AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF) +AR -3124-06411 America/Argentina/Cordoba Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF) +AR -2447-06525 America/Argentina/Salta Salta (SA, LP, NQ, RN) +AR -2411-06518 America/Argentina/Jujuy Jujuy (JY) +AR -2649-06513 America/Argentina/Tucuman Tucumán (TM) +AR -2828-06547 America/Argentina/Catamarca Catamarca (CT); Chubut (CH) +AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR) +AR -3132-06831 America/Argentina/San_Juan San Juan (SJ) +AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ) +AR -3319-06621 America/Argentina/San_Luis San Luis (SL) +AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC) +AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF) +AS,UM -1416-17042 Pacific/Pago_Pago Samoa, Midway +AT +4813+01620 Europe/Vienna +AU -3133+15905 Australia/Lord_Howe Lord Howe Island +AU -5430+15857 Antarctica/Macquarie Macquarie Island +AU -4253+14719 Australia/Hobart Tasmania +AU -3749+14458 Australia/Melbourne Victoria +AU -3352+15113 Australia/Sydney New South Wales (most areas) +AU -3157+14127 Australia/Broken_Hill New South Wales (Yancowinna) +AU -2728+15302 Australia/Brisbane Queensland (most areas) +AU -2016+14900 Australia/Lindeman Queensland (Whitsunday Islands) +AU -3455+13835 Australia/Adelaide South Australia +AU -1228+13050 Australia/Darwin Northern Territory +AU -3157+11551 Australia/Perth Western Australia (most areas) +AU -3143+12852 Australia/Eucla Western Australia (Eucla) +AZ +4023+04951 Asia/Baku +BB +1306-05937 America/Barbados +BD +2343+09025 Asia/Dhaka +BE +5050+00420 Europe/Brussels +BG +4241+02319 Europe/Sofia +BM +3217-06446 Atlantic/Bermuda +BN +0456+11455 Asia/Brunei +BO -1630-06809 America/La_Paz +BR -0351-03225 America/Noronha Atlantic islands +BR -0127-04829 America/Belem Pará (east); Amapá +BR -0343-03830 America/Fortaleza Brazil (northeast: MA, PI, CE, RN, PB) +BR -0803-03454 America/Recife Pernambuco +BR -0712-04812 America/Araguaina Tocantins +BR -0940-03543 America/Maceio Alagoas, Sergipe +BR -1259-03831 America/Bahia Bahia +BR -2332-04637 America/Sao_Paulo Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS) +BR -2027-05437 America/Campo_Grande Mato Grosso do Sul +BR -1535-05605 America/Cuiaba Mato Grosso +BR -0226-05452 America/Santarem Pará (west) +BR -0846-06354 America/Porto_Velho Rondônia +BR +0249-06040 America/Boa_Vista Roraima +BR -0308-06001 America/Manaus Amazonas (east) +BR -0640-06952 America/Eirunepe Amazonas (west) +BR -0958-06748 America/Rio_Branco Acre +BT +2728+08939 Asia/Thimphu +BY +5354+02734 Europe/Minsk +BZ +1730-08812 America/Belize +CA +4734-05243 America/St_Johns Newfoundland; Labrador (southeast) +CA +4439-06336 America/Halifax Atlantic - NS (most areas); PE +CA +4612-05957 America/Glace_Bay Atlantic - NS (Cape Breton) +CA +4606-06447 America/Moncton Atlantic - New Brunswick +CA +5320-06025 America/Goose_Bay Atlantic - Labrador (most areas) +CA,BS +4339-07923 America/Toronto Eastern - ON, QC (most areas), Bahamas +CA +4901-08816 America/Nipigon Eastern - ON, QC (no DST 1967-73) +CA +4823-08915 America/Thunder_Bay Eastern - ON (Thunder Bay) +CA +6344-06828 America/Iqaluit Eastern - NU (most east areas) +CA +6608-06544 America/Pangnirtung Eastern - NU (Pangnirtung) +CA +4953-09709 America/Winnipeg Central - ON (west); Manitoba +CA +4843-09434 America/Rainy_River Central - ON (Rainy R, Ft Frances) +CA +744144-0944945 America/Resolute Central - NU (Resolute) +CA +624900-0920459 America/Rankin_Inlet Central - NU (central) +CA +5024-10439 America/Regina CST - SK (most areas) +CA +5017-10750 America/Swift_Current CST - SK (midwest) +CA +5333-11328 America/Edmonton Mountain - AB; BC (E); SK (W) +CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west) +CA +6227-11421 America/Yellowknife Mountain - NT (central) +CA +682059-1334300 America/Inuvik Mountain - NT (west) +CA +5946-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John) +CA +5848-12242 America/Fort_Nelson MST - BC (Ft Nelson) +CA +6043-13503 America/Whitehorse MST - Yukon (east) +CA +6404-13925 America/Dawson MST - Yukon (west) +CA +4916-12307 America/Vancouver Pacific - BC (most areas) +CC -1210+09655 Indian/Cocos +CH,DE,LI +4723+00832 Europe/Zurich Swiss time +CI,BF,GH,GM,GN,ML,MR,SH,SL,SN,TG +0519-00402 Africa/Abidjan +CK -2114-15946 Pacific/Rarotonga +CL -3327-07040 America/Santiago Chile (most areas) +CL -5309-07055 America/Punta_Arenas Region of Magallanes +CL -2709-10926 Pacific/Easter Easter Island +CN +3114+12128 Asia/Shanghai Beijing Time +CN +4348+08735 Asia/Urumqi Xinjiang Time +CO +0436-07405 America/Bogota +CR +0956-08405 America/Costa_Rica +CU +2308-08222 America/Havana +CV +1455-02331 Atlantic/Cape_Verde +CX -1025+10543 Indian/Christmas +CY +3510+03322 Asia/Nicosia Cyprus (most areas) +CY +3507+03357 Asia/Famagusta Northern Cyprus +CZ,SK +5005+01426 Europe/Prague +DE +5230+01322 Europe/Berlin Germany (most areas) +DK +5540+01235 Europe/Copenhagen +DO +1828-06954 America/Santo_Domingo +DZ +3647+00303 Africa/Algiers +EC -0210-07950 America/Guayaquil Ecuador (mainland) +EC -0054-08936 Pacific/Galapagos Galápagos Islands +EE +5925+02445 Europe/Tallinn +EG +3003+03115 Africa/Cairo +EH +2709-01312 Africa/El_Aaiun +ES +4024-00341 Europe/Madrid Spain (mainland) +ES +3553-00519 Africa/Ceuta Ceuta, Melilla +ES +2806-01524 Atlantic/Canary Canary Islands +FI,AX +6010+02458 Europe/Helsinki +FJ -1808+17825 Pacific/Fiji +FK -5142-05751 Atlantic/Stanley +FM +0725+15147 Pacific/Chuuk Chuuk/Truk, Yap +FM +0658+15813 Pacific/Pohnpei Pohnpei/Ponape +FM +0519+16259 Pacific/Kosrae Kosrae +FO +6201-00646 Atlantic/Faroe +FR +4852+00220 Europe/Paris +GB,GG,IM,JE +513030-0000731 Europe/London +GE +4143+04449 Asia/Tbilisi +GF +0456-05220 America/Cayenne +GI +3608-00521 Europe/Gibraltar +GL +6411-05144 America/Nuuk Greenland (most areas) +GL +7646-01840 America/Danmarkshavn National Park (east coast) +GL +7029-02158 America/Scoresbysund Scoresbysund/Ittoqqortoormiit +GL +7634-06847 America/Thule Thule/Pituffik +GR +3758+02343 Europe/Athens +GS -5416-03632 Atlantic/South_Georgia +GT +1438-09031 America/Guatemala +GU,MP +1328+14445 Pacific/Guam +GW +1151-01535 Africa/Bissau +GY +0648-05810 America/Guyana +HK +2217+11409 Asia/Hong_Kong +HN +1406-08713 America/Tegucigalpa +HT +1832-07220 America/Port-au-Prince +HU +4730+01905 Europe/Budapest +ID -0610+10648 Asia/Jakarta Java, Sumatra +ID -0002+10920 Asia/Pontianak Borneo (west, central) +ID -0507+11924 Asia/Makassar Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west) +ID -0232+14042 Asia/Jayapura New Guinea (West Papua / Irian Jaya); Malukus/Moluccas +IE +5320-00615 Europe/Dublin +IL +314650+0351326 Asia/Jerusalem +IN +2232+08822 Asia/Kolkata +IO -0720+07225 Indian/Chagos +IQ +3321+04425 Asia/Baghdad +IR +3540+05126 Asia/Tehran +IS +6409-02151 Atlantic/Reykjavik +IT,SM,VA +4154+01229 Europe/Rome +JM +175805-0764736 America/Jamaica +JO +3157+03556 Asia/Amman +JP +353916+1394441 Asia/Tokyo +KE,DJ,ER,ET,KM,MG,SO,TZ,UG,YT -0117+03649 Africa/Nairobi +KG +4254+07436 Asia/Bishkek +KI +0125+17300 Pacific/Tarawa Gilbert Islands +KI -0247-17143 Pacific/Kanton Phoenix Islands | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/res.qrc ^ |
@@ -1,10 +1,10 @@ <RCC> <qresource prefix="/"> - <file>res/avalanche-situations/drifting_snow.png</file> + <file>res/avalanche-situations/wind_drifted_snow.png</file> <file>res/avalanche-situations/favourable_situation.png</file> <file>res/avalanche-situations/gliding_snow.png</file> <file>res/avalanche-situations/new_snow.png</file> - <file>res/avalanche-situations/old_snow.png</file> + <file>res/avalanche-situations/persistent_weak_layers.png</file> <file>res/avalanche-situations/wet_snow.png</file> <file>res/danger-levels/level_1.png</file> <file>res/danger-levels/level_2.png</file> | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/res/avalanche-situations/persistent_weak_layers.png ^ |
(renamed from res/avalanche-situations/old_snow.png) | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/res/avalanche-situations/wind_drifted_snow.png ^ |
(renamed from res/avalanche-situations/drifting_snow.png) | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/translations/harbour-avarisk-de.ts ^ |
@@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.1"> +<TS version="2.1" language="de"> <context> <name>AboutPage</name> <message> @@ -33,7 +33,7 @@ </message> </context> <context> - <name>DangerPage</name> + <name>BulletinView</name> <message> <source>Downloading...</source> <translation>Lädt...</translation> @@ -63,8 +63,8 @@ <translation>lädt</translation> </message> <message> - <source>treeline</source> - <translation>Waldgrenze</translation> + <source>between </source> + <translation>zwischen</translation> </message> <message> <source>entire range</source> @@ -79,10 +79,6 @@ <translation>Know-How</translation> </message> <message> - <source>PM Report</source> - <translation>Nachmittagsbericht</translation> - </message> - <message> <source>Report</source> <translation>Bericht</translation> </message> @@ -91,6 +87,10 @@ <translation>Offline Report: Prüfe ob gültig!</translation> </message> <message> + <source>PM Report Available!</source> + <translation>Nachmittagsbericht verfügbar!</translation> + </message> + <message> <source>Valid time interval</source> <translation>Gültigkeitszeitraum</translation> </message> @@ -107,16 +107,16 @@ <translation>Gefahrenstufe</translation> </message> <message> - <source>Level</source> - <translation>Stufe</translation> - </message> - <message> <source>Elevation Data</source> <translation>Höheneingrenzung</translation> </message> <message> + <source>Avalanche prone locations</source> + <translation>Lawinengefährdete Expositionen</translation> + </message> + <message> <source>Avalanche Problem</source> - <translation>Probleme und Gefahrenstellen</translation> + <translation>Lawinenprobleme</translation> </message> <message> <source>Danger Description</source> @@ -143,115 +143,16 @@ <translation>Keine Internetverbindung und kein heruntergeladener Report verfügbar</translation> </message> <message> - <source>PM Report Available!</source> - <translation>Nachmittagsbericht verfügbar!</translation> - </message> -</context> -<context> - <name>DangerPage_swiss</name> - <message> - <source>Downloading...</source> - <translation>Lädt...</translation> - </message> - <message> - <source>low</source> - <translation>gering</translation> - </message> - <message> - <source>moderate</source> - <translation>mäßig</translation> - </message> - <message> - <source>considerable</source> - <translation>erheblich</translation> - </message> - <message> - <source>high</source> - <translation>groß</translation> - </message> - <message> - <source>very high</source> - <translation>sehr groß</translation> + <source>Travel Advisory</source> + <translation type="unfinished"></translation> </message> <message> - <source>loading</source> - <translation>lädt</translation> + <source>Weather Forecast</source> + <translation>Wettervorhersage</translation> </message> <message> <source>treeline</source> - <translation>Waldgrenze</translation> - </message> - <message> - <source>entire range</source> - <translation>jede Höhe</translation> - </message> - <message> - <source>Reload</source> - <translation>Neu herunterladen</translation> - </message> - <message> - <source>Know-How</source> - <translation>Know-How</translation> - </message> - <message> - <source>PM Report</source> - <translation>Nachmittagsbericht</translation> - </message> - <message> - <source>Report</source> - <translation>Bericht</translation> - </message> - <message> - <source>Offline Report - Check Validity Date</source> - <translation>Offline Report: Prüfe ob gültig!</translation> - </message> - <message> - <source>PM Report Available!</source> - <translation>Nachmittagsbericht verfügbar!</translation> - </message> - <message> - <source>Valid time interval</source> - <translation>Gültigkeitszeitraum</translation> - </message> - <message> - <source>Report from</source> - <translation>Bericht vom</translation> - </message> - <message> - <source>Report could not be requested</source> - <translation>Report konnte nicht abgerufen werden</translation> - </message> - <message> - <source>Danger Level</source> - <translation>Gefahrenstufe</translation> - </message> - <message> - <source>Level</source> - <translation>Stufe</translation> - </message> - <message> - <source>Avalanche prone locations</source> - <translation>Lawinengefährdete Expositionen</translation> - </message> - <message> - <source>Local Report</source> - <translation>Lokaler Bericht</translation> - </message> - <message> - <source>Snow and Weather Data</source> - <translation>Schnee- und Wetterdaten</translation> - </message> - <message> - <source>LEVEL</source> - <translation>STUFE</translation> - </message> - <message> - <source>Maybe no report is provided for this region at the moment.</source> - <translation>Möglicherweise wird für diese Region noch kein Lagebericht ausgegeben.</translation> - </message> - <message> - <source>No Internet connection and no report cached for this region</source> - <translation>Keine Internetverbindung und kein heruntergeladener Report verfügbar</translation> + <translation type="unfinished"></translation> </message> </context> <context> @@ -288,10 +189,6 @@ <source>Update your Avalanche Knowledge by visiting the Education pages on www.avalanche.report by the Avalanche Warning Services of Tirol, Südtirol and Trentino.</source> <translation>Bringe dein Wissen über Lawinen auf den aktuellen Stand und besuche die Ausbildungsinhalte auf www.lawinen.report der Lawinenwarndienste Tirol, Südtirol und Trentino.</translation> </message> - <message> - <source>avalanche.report</source> - <translation>lawinen.report</translation> | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/translations/harbour-avarisk-fr.ts ^ |
@@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> -<TS version="2.1"> +<TS version="2.1" language="fr"> <context> <name>AboutPage</name> <message> @@ -25,7 +25,7 @@ </message> <message> <source>Thanks to all the Avalanche Warning Services who provide the data open and for the great work they do! Stay careful and safe!</source> - <translation>Merci à tous les services d'alerte avalanche (EAWS) qui fournissent des données libres et pour le travail fabuleux qu'ils fournissent! Restez prudent !</translation> + <translation>Merci à tous les services d'alerte avalanche (EAWS) qui fournissent des données libres et pour le travail fabuleux qu'ils fournissent! Restez prudent!</translation> </message> <message> <source>Send E-Mail</source> @@ -33,7 +33,7 @@ </message> </context> <context> - <name>DangerPage</name> + <name>BulletinView</name> <message> <source>Downloading...</source> <translation>Téléchargement...</translation> @@ -63,8 +63,8 @@ <translation>chargement</translation> </message> <message> - <source>treeline</source> - <translation>limite des arbres</translation> + <source>between </source> + <translation>entre</translation> </message> <message> <source>entire range</source> @@ -72,187 +72,88 @@ </message> <message> <source>Reload</source> - <translation>Rechargement</translation> + <translation type="unfinished"></translation> </message> <message> <source>Know-How</source> - <translation>Savoir-faire</translation> - </message> - <message> - <source>PM Report</source> - <translation>Bulletin de l'après midi</translation> + <translation type="unfinished">Know-How</translation> </message> <message> <source>Report</source> - <translation>Bulletin</translation> + <translation type="unfinished">Bulletin</translation> </message> <message> <source>Offline Report - Check Validity Date</source> - <translation>Bulletin hors connexion - Vérifiez la date de validité</translation> + <translation type="unfinished">Bulletin hors connexion - Vérifiez la date de validité</translation> + </message> + <message> + <source>PM Report Available!</source> + <translation type="unfinished"></translation> </message> <message> <source>Valid time interval</source> - <translation>Interval de validité</translation> + <translation type="unfinished">Interval de validité</translation> </message> <message> <source>Report from</source> - <translation>Bulletin issu de</translation> + <translation type="unfinished">Bulletin issu de</translation> </message> <message> <source>Report could not be requested</source> - <translation>Le bulletin ne peut pas être recueilli</translation> + <translation type="unfinished">Le bulletin ne peut pas être recueilli</translation> </message> <message> <source>Danger Level</source> - <translation>Indice de risque</translation> + <translation type="unfinished">Indice de risque</translation> </message> <message> - <source>Level</source> - <translation>Indice</translation> + <source>Elevation Data</source> + <translation type="unfinished">Altitude</translation> </message> <message> - <source>Elevation Data</source> - <translation>Altitude</translation> + <source>Avalanche prone locations</source> + <translation type="unfinished">Zone d'exposition</translation> </message> <message> <source>Avalanche Problem</source> - <translation>Les Problèmes d'Avalanche</translation> + <translation type="unfinished">Les Problèmes d'Avalanche</translation> </message> <message> <source>Danger Description</source> - <translation>Description du risque</translation> + <translation type="unfinished">Description du risque</translation> </message> <message> <source>Snowpack Description</source> - <translation>Manteau neigeux</translation> + <translation type="unfinished">Manteau neigeux</translation> </message> <message> <source>Tendency</source> - <translation>Tendance</translation> + <translation type="unfinished">Tendance</translation> </message> <message> <source>LEVEL</source> - <translation>Niveau</translation> + <translation type="unfinished">Niveau</translation> </message> <message> <source>Maybe no report is provided for this region at the moment.</source> - <translation>Il est possible qu'aucun bulletin ne soit disponible actuellement pour cette région</translation> + <translation type="unfinished">Il est possible qu'aucun bulletin ne soit disponible actuellement pour cette région</translation> </message> <message> <source>No Internet connection and no report cached for this region</source> - <translation>Connexion indisponible, et aucune donnée en cache pour cette région</translation> - </message> - <message> - <source>PM Report Available!</source> - <translation>Bulletin de l'après-midi disponible</translation> - </message> -</context> -<context> - <name>DangerPage_swiss</name> - <message> - <source>Downloading...</source> - <translation>Téléchargement...</translation> - </message> - <message> - <source>low</source> - <translation>faibe</translation> - </message> - <message> - <source>moderate</source> - <translation>limité</translation> - </message> - <message> - <source>considerable</source> - <translation>marqué</translation> + <translation type="unfinished">Connexion indisponible, et aucune donnée en cache pour cette région</translation> </message> <message> - <source>high</source> - <translation>fort</translation> - </message> - <message> - <source>very high</source> - <translation>très fort</translation> + <source>Travel Advisory</source> + <translation type="unfinished"></translation> </message> <message> - <source>loading</source> - <translation>chargement</translation> + <source>Weather Forecast</source> + <translation type="unfinished"></translation> </message> <message> <source>treeline</source> - <translation>limite des arbres</translation> - </message> - <message> - <source>entire range</source> <translation type="unfinished"></translation> </message> - <message> - <source>Reload</source> - <translation>rechargement</translation> - </message> - <message> - <source>Know-How</source> - <translation>savoir-faire</translation> - </message> - <message> - <source>PM Report</source> - <translation>Bulletin de l'après-midi</translation> - </message> - <message> - <source>Report</source> - <translation>Bulletin</translation> - </message> - <message> - <source>Offline Report - Check Validity Date</source> - <translation>Bulletin hors connexion - Vérifiez la date de validité</translation> | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk-0.9.2.tar.bz2/translations/harbour-avarisk.ts ^ |
@@ -33,7 +33,7 @@ </message> </context> <context> - <name>DangerPage</name> + <name>BulletinView</name> <message> <source>Downloading...</source> <translation type="unfinished"></translation> @@ -63,7 +63,7 @@ <translation type="unfinished"></translation> </message> <message> - <source>treeline</source> + <source>between </source> <translation type="unfinished"></translation> </message> <message> @@ -79,15 +79,15 @@ <translation type="unfinished"></translation> </message> <message> - <source>PM Report</source> + <source>Report</source> <translation type="unfinished"></translation> </message> <message> - <source>Report</source> + <source>Offline Report - Check Validity Date</source> <translation type="unfinished"></translation> </message> <message> - <source>Offline Report - Check Validity Date</source> + <source>PM Report Available!</source> <translation type="unfinished"></translation> </message> <message> @@ -107,11 +107,11 @@ <translation type="unfinished"></translation> </message> <message> - <source>Level</source> + <source>Elevation Data</source> <translation type="unfinished"></translation> </message> <message> - <source>Elevation Data</source> + <source>Avalanche prone locations</source> <translation type="unfinished"></translation> </message> <message> @@ -143,116 +143,17 @@ <translation type="unfinished"></translation> </message> <message> - <source>PM Report Available!</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>DangerPage_swiss</name> - <message> - <source>Downloading...</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>low</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>moderate</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>considerable</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>high</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>very high</source> + <source>Travel Advisory</source> <translation type="unfinished"></translation> </message> <message> - <source>loading</source> + <source>Weather Forecast</source> <translation type="unfinished"></translation> </message> <message> <source>treeline</source> <translation type="unfinished"></translation> </message> - <message> - <source>entire range</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Reload</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Know-How</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>PM Report</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Report</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Offline Report - Check Validity Date</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>PM Report Available!</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Valid time interval</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Report from</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Report could not be requested</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Danger Level</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Level</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Avalanche prone locations</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Local Report</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Snow and Weather Data</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>LEVEL</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Maybe no report is provided for this region at the moment.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>No Internet connection and no report cached for this region</source> - <translation type="unfinished"></translation> - </message> </context> <context> <name>Education</name> @@ -288,10 +189,6 @@ <source>Update your Avalanche Knowledge by visiting the Education pages on www.avalanche.report by the Avalanche Warning Services of Tirol, Südtirol and Trentino.</source> <translation type="unfinished"></translation> </message> - <message> - <source>avalanche.report</source> - <translation type="unfinished"></translation> - </message> </context> <context> <name>FirstPage</name> @@ -439,6 +336,30 @@ <source>Corse</source> <translation type="unfinished"></translation> </message> + <message> + <source>Slovenia</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Norway</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Update Position</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Region by GPS-Position</source> + <translation type="unfinished"></translation> | ||
[-] [+] | Changed | _service:tar_git:harbour-avarisk.yaml ^ |
@@ -1,7 +1,7 @@ Name: harbour-avarisk Summary: SailfishOS Client for EAWS Avalanche Bulletins -Version: 0.8 -Release: 3 +Version: 0.9 +Release: 2 # The contents of the Group field should be one of the groups listed here: # https://github.com/mer-tools/spectacle/blob/master/data/GROUPS Group: Qt/Qt @@ -22,7 +22,7 @@ - Qt5Core - Qt5Qml - Qt5Quick -# - qt5embedwidget >= 1.14.9 + - qt5embedwidget # Build dependencies without a pkgconfig setup can be listed here # PkgBR: |