# METAR TAF Parser
![Python test](https://github.com/mivek/python-metar-taf-parser/workflows/Python%20test/badge.svg)
This project provides METAR and TAF parsers.
## Install
```shell
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
![model.png](model.png)
#### 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, `None` otherwise.
- descriptive: `Descriptive`. The descriptive of the weather condition if any, `None` otherwise.
- 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. `M` for less than and or `P` for 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 be `None` for trends.
- visibility: `Visibility`. The visibility.
- vertical_visibility: `int`. The vertical visibility, can be `None`
- 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 either `Validity` or `FMValidity`
- probability: `int`. The probability of a trend, can be `None`.
#### 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: `int` The 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.
```python
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.
```python
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
The following locales are supported:
- en (default)
- fr
- de
- pl
- it
- ru
To add or complete locales please see [CONTRIBUTING](CONTRIBUTING.md)
Raw data
{
"_id": null,
"home_page": "https://github.com/mivek/python-metar-taf-parser",
"name": "metar-taf-parser-mivek",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "metar, taf, parser, icao, airport",
"author": "Jean-Kevin KPADEY",
"author_email": "jeankevin.kpadey@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/23/f8/5f1b31b1094e71af002874d8ce4955ce1fce62f4d421baf45fd587d02c34/metar_taf_parser_mivek-1.9.0.tar.gz",
"platform": null,
"description": "# METAR TAF Parser\n\n![Python test](https://github.com/mivek/python-metar-taf-parser/workflows/Python%20test/badge.svg)\n\nThis project provides METAR and TAF parsers.\n\n## Install\n\n```shell\npip install metar-taf-parser-mivek\n```\n\n## Structure\n\n### Commons package\n\nThis package contains the converter module. The module contains helper functions.\n\n### Model package\n\nThis package contains multiple modules\n\n- enum: Contains the enumerations for the project\n- model: Contains the model classes for the project\n\n### Parser package\n\nThis package contains the parser module with the `MetarParser` and `TAFParser` classes.\n\n## Model\n\n### Enumerations\n\n- CloudQuantity: Represents the quantity in a cloud layer\n- CloudType: Represents the type of cloud in a cloud layer\n- DepositCoverage: Represents the percentage of a runway covered by the deposit\n- DepositType: Represents the type of deposit on a runway\n- Descriptive: Represents the descriptive part of a weather phenomenon\n- Intensity: Represents the intensity of a weather phenomenon\n- Phenomenon: Represents the phenomenon of a weather phenomenon\n- TimeIndicator: Indicates the time trend\n- WeatherChangeType: Indicate the type of trend\n- IcingIntensity: Represents the intensity of an icing element\n- TurbulenceIntensity: Represents the intensity of a turbulence element\n\n\n### Objects\n\n![model.png](model.png)\n\n#### Wind\n\nRepresents the wind part of a metar, taf or trend\n\n- speed: `int`. The speed of the wind\n- direction: `str`. The cardinal direction of the wind\n- degrees: `int`. The direction in degrees\n- gust: `int`. The speed of gust if any, None otherwise\n- min_variation: `int`. The minimal degree variation of the wind\n- max_variation: `int`. The maximal degree variation of the wind\n- unit: `str`. The unit of the speed of the wind.\n\n#### WindShear\n\nRepresents a wind shear in TAF message. This class extends Wind.\n\n- height: `int`. The height of the wind shear.\n\n#### Visibility\n\nRepresents the visibility part of a METAR, TAF or trend.\n\n- distance: `str`. The distance in meters or nautical miles.\n- min_distance: `int`. The minimal distance in meters if any.\n- min_direction: `str`. The direction of the minimal distance if any.\n\n#### WeatherCondition\n\nRepresents the weather part of a METAR, TAF or trend.\n\n- intensity: `Intensity`. The intensity of the weather condition if any, `None` otherwise.\n- descriptive: `Descriptive`. The descriptive of the weather condition if any, `None` otherwise.\n- phenomenons: `[Phenomenon]`. Array of phenomenons of the weather condition.\n\n#### TemperatureDated\n\nRepresents the temperature part of a TAF. \n\n- temperature: `int`. The temperature in celsius degrees.\n- day: `int`. Day of the occurrence.\n- hour: `int`. Hour of the occurrence.\n\n#### RunwayInfo\n\nRepresents the visibility or the deposit on a runway.\n\n- name: `str`. The name of the runway.\n- min_range: `int`. The minimal visibility distance on the runway.\n- max_range: `int`. The maximal visibility distance on the runway.\n- trend: `str`. The trend of the visibility.\n- indicator: `str`. The indicator on the visual range. `M` for less than and or `P` for greater than.\n- deposit_type: `DepositType`. The type of deposit.\n- coverage: `DepositCoverage`. The percentage of coverage.\n- thickness: `str`. The thickness of the deposit.\n- braking_capacity: `str`. The braking capacity on the runway.\n\n#### Cloud\n\nRepresents a cloud layer in METAR, TAF or trend object.\n\n- height: `int`. The height of the layer in feet.\n- quantity: `CloudQuantity`. The quantity of clouds.\n- type: `CloudType`. The type of cloud in the layer.\n\n#### Icing\n\nRepresents the icing in a TAF or TAFTrend object.\n\n- intensity: `IcingIntensity`. The intensity of an icing.\n- base_height: `int`. The base height of an icing element in feet.\n- depth: `int`. The icing layer depth in feet. Adding this to the base height determines the top limit of the icing.\n\n#### Turbulence\n\nRepresents the turbulence in a TAF or TAFTrend object.\n\n- intensity: `TurbulenceIntensity`. The intensity of a turbulence.\n- base_height: `int`. The base height of a turbulence element in feet.\n- depth: `int`. The turbulence layer depth in feet. Adding this to the base height determines the top limit of the turbulence.\n\n#### ITafGroups\n\nClass holding turbulence and icing elements.\n\n- icings: `[Icing]`. List of icing elements.\n- turbulence: `[Turbulence]`. List of turbulence elements.\n\nThis class is a parent class of `TAF` and `ITafGroups`.\n\n#### AbstractWeatherContainer\n\nAbstract class containing the basic fields of METAR, TAF or trend objects.\n\n- wind: `Wind`. The wind. Can be `None` for trends.\n- visibility: `Visibility`. The visibility.\n- vertical_visibility: `int`. The vertical visibility, can be `None`\n- wind_shear: `WindShear`. The wind shear object.\n- cavok: `bool`. Indicates whether the message is CAVOK (Ceiling and visibility OK)\n- remark: `str`. The remark part of the message.\n- remarks: `list[str]`. List of remarks. Each element is a different remark or token \n- clouds: `[Cloud]`. Array of clouds elements.\n- weather_conditions: `[WeatherCondition]`. Array of weather conditions.\n\n#### AbstractValidity\n\nAbstract class representing the base of a Validity object.\n\n- start_day: `int`. The starting day of the validity.\n- start_hour: `int`. The starting hour of the validity.\n\n#### AbstractWeatherCode\n\nClass extending the AbstractWeatherContainer. Abstract parent class of METAR and TAF.\n\n- day: `int`. The delivery day of the METAR or TAF.\n- time: `datetime.time`. The delivery time of the METAR/TAF.\n- message: `str`. The message of the METAR/TAF.\n- station: `str`. The station for which the message was issued.\n- trends: `[TAFTrend/MetarTrend]`. Array of trends\n- flags: `[Flag]`. Set of flags.\n- auto: `bool`. Whether the METAR is automated.\n- amendment: `bool`. Whether the TAF is an amendment.\n- nil: `bool`. Whether the METAR/TAF is null.\n- canceled: `bool`. Whether the METAR/TAF is canceled.\n- corrected: `bool`. Whether the METAR/TAF is a correction.\n\n#### Metar\n\nClass representing a metar object.\n\n- temperature: `int`. The temperature in celsius.\n- dew_point: `int`. The dew_point in celsius.\n- altimeter: `float`. The altimeter value in HPa.\n- nosig: `bool`. Whether the message is nosig: No significant changes to come.\n- runway_info: `[RunwayInfo]`. Array of runway information.\n\n#### TAF\n\nClass representing a TAF object.\n\n- validity: `Validity`. The validity of the TAF.\n- max_temperature: `TemperatureDated`. The maximum temperature during the validity of the TAF.\n- min_temperature: `TemperatureDated`. The minimum temperature during the validity of the TAF.\n- amendment: `bool`. Whether the TAF is an amendment.\n\n#### AbstractTrend\n\nAbstract base class for trend.\n\n- type: `WeatherChangeType`. The type of change.\n\n#### MetarTrendTime\n\nClass containing the time of the trend.\n\n- time: `datetime.time`. Time of the trend's occurrence.\n- type: `TimeIndicator`. Type of time change of the trend.\n\n#### MetarTrend\n\nRepresents a trend in a METAR object, this class extends `AbstractTrend`.\n\n- times: `[MetarTrendTime]`. The list of time change of the trend.\n\n#### TAFTrend\n\nRepresent a trend in a TAF object, this class extends `AbstractTrend`\n\n- validity: `AbstractValidity`. The validity of the trend either `Validity` or `FMValidity`\n- probability: `int`. The probability of a trend, can be `None`.\n\n#### Validity\n\nRepresents the validity timespan of a TAF or TAFTrend, this class extends `AbstractValidity`.\n\n- end_day: `int`. The ending day of the validity.\n- end_hour: `int` The ending hour of the validity.\n\n#### FMValidity\n\nRepresents the validity of a From trend, extends AbstractValidity\n\n- start_minutes: `int`. The starting minute of the trend.\n\n\n## Example\n\n### Parse a METAR\n\nUse the method `parse(string)` of the `MetarParser` to parse a metar.\n\n```python\nfrom metar_taf_parser.parser.parser import MetarParser\n\nmetar = MetarParser().parse('KTTN 051853Z 04011KT 9999 VCTS SN FZFG BKN003 OVC010 M02/M02 A3006')\n\n```\n\n\n### Parse a TAF \n\nUse the method `parse(string)` of the TAFParser to parse a TAF message.\nThe message must start with `TAF` in order to be parsed.\n\n```python\nfrom metar_taf_parser.parser.parser import TAFParser\n\ntaf = TAFParser().parse(\n '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')\n```\n\n\n## Internationalization\n\nThe following locales are supported:\n- en (default)\n- fr\n- de\n- pl\n- it\n- ru\n\nTo add or complete locales please see [CONTRIBUTING](CONTRIBUTING.md)\n",
"bugtrack_url": null,
"license": null,
"summary": "Python project parsing metar and taf message",
"version": "1.9.0",
"project_urls": {
"Bug Tracker": "https://github.com/mivek/python-metar-taf-parser/issues",
"Homepage": "https://github.com/mivek/python-metar-taf-parser"
},
"split_keywords": [
"metar",
" taf",
" parser",
" icao",
" airport"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "66b290bd3d049b52cce8edb41e29428840c8bebc90d0bed16bd850b907a00e16",
"md5": "84c12c8badc064b9ac625088d1d04f68",
"sha256": "cf2d733c43e3b5261a983e0b497e6decee0a62fccb8e78a8c42e4ef92db45fe7"
},
"downloads": -1,
"filename": "metar_taf_parser_mivek-1.9.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "84c12c8badc064b9ac625088d1d04f68",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 107137,
"upload_time": "2024-05-20T07:42:24",
"upload_time_iso_8601": "2024-05-20T07:42:24.714586Z",
"url": "https://files.pythonhosted.org/packages/66/b2/90bd3d049b52cce8edb41e29428840c8bebc90d0bed16bd850b907a00e16/metar_taf_parser_mivek-1.9.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "23f85f1b31b1094e71af002874d8ce4955ce1fce62f4d421baf45fd587d02c34",
"md5": "e53030b645db076b96e08dd3b523fd93",
"sha256": "86ccdf08664832cdf3a772c8612db1d145c5e2cbe55f6b98300beb108b2f935a"
},
"downloads": -1,
"filename": "metar_taf_parser_mivek-1.9.0.tar.gz",
"has_sig": false,
"md5_digest": "e53030b645db076b96e08dd3b523fd93",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 86110,
"upload_time": "2024-05-20T07:42:26",
"upload_time_iso_8601": "2024-05-20T07:42:26.471420Z",
"url": "https://files.pythonhosted.org/packages/23/f8/5f1b31b1094e71af002874d8ce4955ce1fce62f4d421baf45fd587d02c34/metar_taf_parser_mivek-1.9.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-20 07:42:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mivek",
"github_project": "python-metar-taf-parser",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"lcname": "metar-taf-parser-mivek"
}