コード例 #1
0
def _read_timezone_ids_and_aliases() -> Dict[str, List[str]]:
    """Read ZIC-format file from pytz's tzdata.zi. Output {zone: [aliases]}.

    Spec: https://man7.org/linux/man-pages/man8/zic.8.html#FILES
    """
    # example Zone line:
    # Z Antarctica/Troll 0 - -00 2005 F 12
    # we only care about the
    zone_re = re.compile(r"(?:Z|Zo|Zon|Zone)\s+(?P<zone>[^\s]+)")
    # example Link line:
    # L Asia/Nicosia Europe/Nicosia
    # here, "Asia/Nicosia" is the zone, and "Europe/Nicosia" is the link
    link_re = re.compile(
        r"(?:L|Li|Lin|Link)\s+(?P<zone>[^\s]+)\s+(?P<alias>[^\s]+)")

    zone_aliases = {}  # mapping from zone to all aliases (includes all zones)
    with pytz.open_resource("tzdata.zi") as bio:
        with io.TextIOWrapper(bio, encoding="ascii") as tio:
            for line in tio.readlines():
                zone_match = zone_re.match(line)
                if zone_match:
                    zone = zone_match.group("zone")
                    if zone not in zone_aliases:
                        if zone in pytz.all_timezones_set:  # ignore "Factory" zone
                            zone_aliases[zone] = []
                link_match = link_re.match(line)
                if link_match:
                    zone = link_match.group("zone")
                    alias = link_match.group("alias")
                    if zone in zone_aliases:
                        zone_aliases[zone].append(alias)
                    else:
                        zone_aliases[zone] = [alias]
    return zone_aliases
コード例 #2
0
ファイル: loader.py プロジェクト: gordol/pendulum
 def load(cls, name):
     name = _compat.decode(name)
     try:
         with pytz.open_resource(name) as f:
             return cls._load(f)
     except _compat.FileNotFoundError:
         raise ValueError('Unknown timezone [{}]'.format(name))
コード例 #3
0
ファイル: mtc.py プロジェクト: jaboja/MTC
 def load(cls):
     with open_resource('leap-seconds.list') as f:
         table = [
             tuple(map(int,
                       line.split(None, 2)[:2])) for line in f
             if not (line.startswith('#') or line.strip() == '')
         ]
     table.reverse()
     cls._leap_seconds = tuple(table)
コード例 #4
0
ファイル: timezone.py プロジェクト: utibeabasi6/zulip
def get_canonical_timezone_map() -> Dict[str, str]:
    canonical = {}
    with TextIOWrapper(
            pytz.open_resource(
                "tzdata.zi"
            )  # type: ignore[attr-defined] # Unclear if this is part of the public pytz API
    ) as f:
        for line in f:
            if line.startswith("L "):
                l, name, alias = line.split()
                canonical[alias] = name
    return canonical
コード例 #5
0
ファイル: utils.py プロジェクト: wardi/django-timezones
def get_timezone_coordinates(timezone):
    global _coordinates
    if not _coordinates:
        _coordinates = {}
        zone_tab = pytz.open_resource('zone.tab')
        for line in zone_tab.readlines():
            if line.startswith('#'):
                continue
            code, coordinates, zone = line.split(None, 4)[:3]
            _coordinates[zone] = _dms_to_point(coordinates)
    if hasattr(timezone, 'zone'):
        return _coordinates.get(timezone.zone)
    return _coordinates.get(timezone)
コード例 #6
0
ファイル: tsleepd.py プロジェクト: gumblex/trustedsleepbot
 def _fill(self):
     data = {}
     zone_tab = pytz.open_resource('zone.tab')
     try:
         for line in zone_tab:
             line = line.decode('UTF-8')
             if line.startswith('#'):
                 continue
             code, coordinates, zone = line.split(None, 4)[:3]
             match = re_zoneloc.match(coordinates)
             if match:
                 data[zone] = self._convert_coordinates(match)
         self.data = data
     finally:
         zone_tab.close()
コード例 #7
0
ファイル: tsleepd.py プロジェクト: Jamesits/tg-lover-tracker
 def _fill(self):
     data = {}
     zone_tab = pytz.open_resource('zone.tab')
     try:
         for line in zone_tab:
             line = line.decode('UTF-8')
             if line.startswith('#'):
                 continue
             code, coordinates, zone = line.split(None, 4)[:3]
             match = re_zoneloc.match(coordinates)
             if match:
                 data[zone] = self._convert_coordinates(match)
         self.data = data
     finally:
         zone_tab.close()
コード例 #8
0
ファイル: cog.py プロジェクト: scragly/Manibot
 def get_timezones(self):
     zone_tab = pytz.open_resource('zone.tab')
     try:
         data = {}
         for line in zone_tab:
             line = line.decode('UTF-8')
             if line.startswith('#'):
                 continue
             code, coordinates, zone = line.split(None, 4)[:3]
             if zone not in pytz.all_timezones_set:
                 continue
             try:
                 data[code].append(zone)
             except KeyError:
                 data[code] = [zone]
         self.timezones = data
     finally:
         zone_tab.close()
コード例 #9
0
ファイル: tzutil.py プロジェクト: nmlorg/metabot
def _zone_tab():
    zonetype = collections.namedtuple('Zone', ('code', 'coordinates', 'zone', 'comment'))
    with pytz.open_resource('zone.tab') as fobj:
        for line in fobj:
            line = line.decode('UTF-8')
            if line.startswith('#'):
                continue
            pieces = line.rstrip().split(None, 3)
            code, coordinates, zone = pieces[:3]
            comment = len(pieces) == 4 and pieces[3] or ''
            if zone not in pytz.all_timezones_set:
                continue

            coordinates = _parse_iso6709(coordinates)
            if not coordinates:
                continue
            lat, lon = coordinates

            yield zonetype(code, (lat, lon), zone, comment)
コード例 #10
0
print 'Using config file: {0}'.format(configFileName)

# Next, we need the (stripped) DC file:
dcFile = DCFile()
filepath = os.path.join(args.src_dir, 'astron')
for filename in os.listdir(filepath):
    if filename.endswith('.dc'):
        dcFile.read(Filename.fromOsSpecific(os.path.join(filepath, filename)))
dcStream = StringStream()
dcFile.write(dcStream, True)
dcData = dcStream.getData()

# Now, collect our timezone info:
zoneInfo = {}
for timezone in pytz.all_timezones:
    zoneInfo['zoneinfo/' + timezone] = pytz.open_resource(timezone).read()

# Finally, write our data to game_data.py:
print 'Writing game_data.py...'
gameData = '''\
CONFIG = %r
DC = %r
ZONEINFO = %r'''
with open(os.path.join(args.build_dir, 'game_data.py'), 'w') as f:
    f.write(gameData % (configData, dcData, zoneInfo))


def getDirectoryMD5Hash(directory):
    def _updateChecksum(checksum, dirname, filenames):
        for filename in sorted(filenames):
            path = os.path.join(dirname, filename)
コード例 #11
0
print 'Using config file: {0}'.format(configFileName)

# Next, we need the (stripped) DC file:
dcFile = DCFile()
filepath = os.path.join(args.src_dir, 'astron')
for filename in os.listdir(filepath):
    if filename.endswith('.dc'):
        dcFile.read(Filename.fromOsSpecific(os.path.join(filepath, filename)))
dcStream = StringStream()
dcFile.write(dcStream, True)
dcData = dcStream.getData()

# Now, collect our timezone info:
zoneInfo = {}
for timezone in pytz.all_timezones:
    zoneInfo['zoneinfo/' + timezone] = pytz.open_resource(timezone).read()

# Finally, write our data to game_data.py:
print 'Writing game_data.py...'
gameData = '''\
CONFIG = %r
DC = %r
ZONEINFO = %r'''
with open(os.path.join(args.build_dir, 'game_data.py'), 'w') as f:
    f.write(gameData % (configData, dcData, zoneInfo))


def getDirectoryMD5Hash(directory):
    def _updateChecksum(checksum, dirname, filenames):
        for filename in sorted(filenames):
            path = os.path.join(dirname, filename)