METAR TAF Parser
This project provides METAR and TAF parsers.
Install
pip install metar-taf-parser-mivek
Structure
Commons package
This package contains the converter module. The module contains helper functions.
Model package
This package contains multiple modules
- enum: Contains the enumerations for the project
- model: Contains the model classes for the project
Parser package
This package contains the parser module with the MetarParser and TAFParser classes.
Model
Enumerations
- CloudQuantity: Represents the quantity in a cloud layer
- CloudType: Represents the type of cloud in a cloud layer
- DepositCoverage: Represents the percentage of a runway covered by the deposit
- DepositType: Represents the type of deposit on a runway
- Descriptive: Represents the descriptive part of a weather phenomenon
- Intensity: Represents the intensity of a weather phenomenon
- Phenomenon: Represents the phenomenon of a weather phenomenon
- TimeIndicator: Indicates the time trend
- WeatherChangeType: Indicate the type of trend
- IcingIntensity: Represents the intensity of an icing element
- TurbulenceIntensity: Represents the intensity of a turbulence element
Objects
Wind
Represents the wind part of a metar, taf or trend
- speed:
int. The speed of the wind - direction:
str. The cardinal direction of the wind - degrees:
int. The direction in degrees - gust:
int. The speed of gust if any, None otherwise - min_variation:
int. The minimal degree variation of the wind - max_variation:
int. The maximal degree variation of the wind - unit:
str. The unit of the speed of the wind.
WindShear
Represents a wind shear in TAF message. This class extends Wind.
- height:
int. The height of the wind shear.
Visibility
Represents the visibility part of a METAR, TAF or trend.
- distance:
str. The distance in meters or nautical miles. - min_distance:
int. The minimal distance in meters if any. - min_direction:
str. The direction of the minimal distance if any.
WeatherCondition
Represents the weather part of a METAR, TAF or trend.
- intensity:
Intensity. The intensity of the weather condition if any,Noneotherwise. - descriptive:
Descriptive. The descriptive of the weather condition if any,Noneotherwise. - phenomenons:
[Phenomenon]. Array of phenomenons of the weather condition.
TemperatureDated
Represents the temperature part of a TAF.
- temperature:
int. The temperature in celsius degrees. - day:
int. Day of the occurrence. - hour:
int. Hour of the occurrence.
RunwayInfo
Represents the visibility or the deposit on a runway.
- name:
str. The name of the runway. - min_range:
int. The minimal visibility distance on the runway. - max_range:
int. The maximal visibility distance on the runway. - trend:
str. The trend of the visibility. - indicator:
str. The indicator on the visual range.Mfor less than and orPfor greater than. - deposit_type:
DepositType. The type of deposit. - coverage:
DepositCoverage. The percentage of coverage. - thickness:
str. The thickness of the deposit. - braking_capacity:
str. The braking capacity on the runway.
Cloud
Represents a cloud layer in METAR, TAF or trend object.
- height:
int. The height of the layer in feet. - quantity:
CloudQuantity. The quantity of clouds. - type:
CloudType. The type of cloud in the layer.
Icing
Represents the icing in a TAF or TAFTrend object.
- intensity:
IcingIntensity. The intensity of an icing. - base_height:
int. The base height of an icing element in feet. - depth:
int. The icing layer depth in feet. Adding this to the base height determines the top limit of the icing.
Turbulence
Represents the turbulence in a TAF or TAFTrend object.
- intensity:
TurbulenceIntensity. The intensity of a turbulence. - base_height:
int. The base height of a turbulence element in feet. - depth:
int. The turbulence layer depth in feet. Adding this to the base height determines the top limit of the turbulence.
ITafGroups
Class holding turbulence and icing elements.
- icings:
[Icing]. List of icing elements. - turbulence:
[Turbulence]. List of turbulence elements.
This class is a parent class of TAF and ITafGroups.
AbstractWeatherContainer
Abstract class containing the basic fields of METAR, TAF or trend objects.
- wind:
Wind. The wind. Can beNonefor trends. - visibility:
Visibility. The visibility. - vertical_visibility:
int. The vertical visibility, can beNone - wind_shear:
WindShear. The wind shear object. - cavok:
bool. Indicates whether the message is CAVOK (Ceiling and visibility OK) - remark:
str. The remark part of the message. - remarks:
list[str]. List of remarks. Each element is a different remark or token - clouds:
[Cloud]. Array of clouds elements. - weather_conditions:
[WeatherCondition]. Array of weather conditions.
AbstractValidity
Abstract class representing the base of a Validity object.
- start_day:
int. The starting day of the validity. - start_hour:
int. The starting hour of the validity.
AbstractWeatherCode
Class extending the AbstractWeatherContainer. Abstract parent class of METAR and TAF.
- day:
int. The delivery day of the METAR or TAF. - time:
datetime.time. The delivery time of the METAR/TAF. - message:
str. The message of the METAR/TAF. - station:
str. The station for which the message was issued. - trends:
[TAFTrend/MetarTrend]. Array of trends - flags:
[Flag]. Set of flags. - auto:
bool. Whether the METAR is automated. - amendment:
bool. Whether the TAF is an amendment. - nil:
bool. Whether the METAR/TAF is null. - canceled:
bool. Whether the METAR/TAF is canceled. - corrected:
bool. Whether the METAR/TAF is a correction.
Metar
Class representing a metar object.
- temperature:
int. The temperature in celsius. - dew_point:
int. The dew_point in celsius. - altimeter:
float. The altimeter value in HPa. - nosig:
bool. Whether the message is nosig: No significant changes to come. - runway_info:
[RunwayInfo]. Array of runway information.
TAF
Class representing a TAF object.
- validity:
Validity. The validity of the TAF. - max_temperature:
TemperatureDated. The maximum temperature during the validity of the TAF. - min_temperature:
TemperatureDated. The minimum temperature during the validity of the TAF. - amendment:
bool. Whether the TAF is an amendment.
AbstractTrend
Abstract base class for trend.
- type:
WeatherChangeType. The type of change.
MetarTrendTime
Class containing the time of the trend.
- time:
datetime.time. Time of the trend's occurrence. - type:
TimeIndicator. Type of time change of the trend.
MetarTrend
Represents a trend in a METAR object, this class extends AbstractTrend.
- times:
[MetarTrendTime]. The list of time change of the trend.
TAFTrend
Represent a trend in a TAF object, this class extends AbstractTrend
- validity:
AbstractValidity. The validity of the trend eitherValidityorFMValidity - probability:
int. The probability of a trend, can beNone.
Validity
Represents the validity timespan of a TAF or TAFTrend, this class extends AbstractValidity.
- end_day:
int. The ending day of the validity. - end_hour:
intThe ending hour of the validity.
FMValidity
Represents the validity of a From trend, extends AbstractValidity
- start_minutes:
int. The starting minute of the trend.
Example
Parse a METAR
Use the method parse(string) of the MetarParser to parse a metar.
from metar_taf_parser.parser.parser import MetarParser
metar = MetarParser().parse('KTTN 051853Z 04011KT 9999 VCTS SN FZFG BKN003 OVC010 M02/M02 A3006')
Parse a TAF
Use the method parse(string) of the TAFParser to parse a TAF message.
The message must start with TAF in order to be parsed.
from metar_taf_parser.parser.parser import TAFParser
taf = TAFParser().parse(
'TAF LFPG 150500Z 1506/1612 17005KT 6000 SCT012 TEMPO 1506/1509 3000 BR BKN006 PROB40 TEMPO 1506/1508 0400 BCFG BKN002 PROB40 TEMPO 1512/1516 4000 -SHRA FEW030TCU BKN040 BECMG 1520/1522 CAVOK TEMPO 1603/1608 3000 BR BKN006 PROB40 TEMPO 1604/1607 0400 BCFG BKN002 TX17/1512Z TN07/1605Z')
Internationalization
Supported locales
from metar_taf_parser.commons.i18n import SUPPORTED_LOCALES
print(SUPPORTED_LOCALES) # {'de', 'en', 'es', 'fr', 'it', 'pl', 'ru-RU', 'tr', 'zh-CN', ...}
en is the default. Partial translations fall back to English automatically — no TranslationError is raised for missing keys unless the key is absent from English too.
Per-call locale (parse-time remarks)
Pass locale= to translate remark strings eagerly at parse time:
from metar_taf_parser.parser.parser import MetarParser
metar = MetarParser().parse(
'KTTN 051853Z 04011KT 9999 VCTS SN FZFG BKN003 OVC010 M02/M02 A3006 RMK AO2 SLP013',
locale='fr',
)
print(metar.remark) # French remark text
TAFParser.parse accepts the same locale keyword argument.
Enum repr locale (lazy, post-parse)
Enum __repr__ is evaluated lazily when you print or inspect values. Use the translation_locale context manager to control the language:
from metar_taf_parser.commons.i18n import translation_locale
with translation_locale('de'):
print([repr(c) for c in metar.clouds]) # German cloud labels
Dynamic global locale
from metar_taf_parser.commons.i18n import set_locale, get_locale, reset_locale
set_locale('fr') # affects all subsequent _() calls in this thread
get_locale() # 'fr'
reset_locale() # back to module default
set_locale / get_locale / reset_locale are per-thread, so they are safe to use in multi-threaded servers.
Locale name normalisation
The following forms are all equivalent:
| Input | Resolved dir |
|---|---|
'zh-CN' |
zh-CN |
'zh_CN' |
zh-CN |
'zh' |
zh-CN |
'ru_RU' |
ru-RU |
'fr_FR' |
fr |
'xx' (unknown) |
en |
To add or complete locales please see CONTRIBUTING
Metadata
Release files for metar-taf-parser-mivek 1.13.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| metar_taf_parser_mivek-1.13.1.tar.gz | 447.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| metar_taf_parser_mivek-1.13.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 950.5 kB
Release files / metar_taf_parser_mivek-1.13.1.tar.gz
| Download URL | metar_taf_parser_mivek-1.13.1.tar.gz |
|---|---|
| Size | 447.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
82b28b93d2f0ff9d980eb3dbacecf479f30338983f9e7e284f8f23007e9e3e9c
|
|
BLAKE2b-256 checksum How to use checksums |
022047495a4065e911d91fa2643d47453465fc5875fed3ed8559f761fca35ca2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|
Release files / metar_taf_parser_mivek-1.13.1-py3-none-any.whl
| Download URL | metar_taf_parser_mivek-1.13.1-py3-none-any.whl |
|---|---|
| Size | 503.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
019b837954d8d69681e7101fbaa479b2e1f125c15ce0ae65381c8cb1a71d80d0
|
|
BLAKE2b-256 checksum How to use checksums |
2fc4017b3d1dc42377084b6172c7051c57fb52c01a79a2d34ab6ff3eb7651118
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|