Name | snowpylot JSON |
Version |
1.1.3
JSON |
| download |
home_page | https://github.com/connellymk/snowpylot |
Summary | A Python library for working CAAML.XML files from SnowPilot |
upload_time | 2025-07-09 20:39:36 |
maintainer | None |
docs_url | None |
author | Mary Kate Connelly |
requires_python | >=3.7 |
license | MIT License
Copyright (c) 2024 Mary Kate Connelly
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
|
keywords |
snowpit
caaml
snowpilot
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# SnowPylot
A Python library for working with CAAML.xml files containing snow pit data from [SnowPilot.org](https://snowpilot.org/).
## Features
- Parse CAAML.xml files from SnowPilot.org to access snow pit information including:
- Core metadata (pit ID, date, location, etc.)
- Snow profile data (layers, grain types, etc.)
- Stability test results (ECT, CT, Rutschblock, PST)
- Density Profile
- Temperature Profile
- Whumpf observations
## Installation
```bash
pip install snowpylot
```
Or clone the repository:
```bash
git clone https://github.com/connellymk/snowpylot.git
cd snowpylot
pip install -e .
```
## Quick Start
```python
from snowpylot import caaml_parser
# Parse a CAAML file
snowpit = caaml_parser("path/to/snowpit.caaml.xml")
# Access basic information
print(f"Pit ID: {snowpit.core_info.pit_id}")
print(f"Date: {snowpit.core_info.date}")
print(f"Location: {snowpit.core_info.location.latitude}, {snowpit.core_info.location.longitude}")
# Access snow profile data
print(f"HS: {snowpit.snow_profile.hs}")
# Access layer information
for i, layer in enumerate(snowpit.snow_profile.layers):
print(f"Layer {i+1}: Depth {layer.depth_top}, Thickness {layer.thickness}")
print(f" Grain form: {layer.grain_form_primary.grain_form}")
print(f" Hardness: {layer.hardness}")
# Access ECT test results
for ect in snowpit.stability_tests.ECT:
print(f"ECT at depth {ect.depth_top}: Score {ect.test_score}")
```
## Documentation
This documentation provides a comprehensive overview of the SnowPit object structure and how to access its various components. The nested structure allows for logical organization of the data while maintaining easy access to all information through dot notation.
For more detailed examples, the demos directory contains Jupyter notebooks demonstrating various use cases.
## SnowPit Object Structure
The SnowPit object is the main container for all snow pit data. It consists of four main components:
### 1. Core Info (snowpit.core_info)
Basic information about the snow pit:
- `pit_id` - Unique identifier
- `pit_name` - Name of the pit
- `date` - Date of observation
- `comment` - General comments
- `caaml_version` - Version of CAAML schema used
- `user` - User information
- `location` - Location information
- `weather_conditions` - Weather conditions
Example:
```python
ID = snowpit.core_info.pit_id
```
#### User Info (snowpit.core_info.user)
- `operation_id` - ID of the operation
- `operation_name` - Name of the operation
- `professional` - Boolean indicating if user is professional
- `user_id` - User identifier
- `username` - SnowPilot username of the user
Example:
```python
operationID = snowpit.core_info.user.operation_id
```
#### Location Info (snowpit.core_info.location)
- `latitude` - Decimal degrees
- `longitude` - Decimal degrees
- `elevation` - [value, units]
- `aspect` - Slope aspect
- `slope_angle` - [value, units]
- `country` - Country name
- `region` - Region name
- `pit_near_avalanche` - Boolean
- `pit_near_avalanche_location` - Location description if near avalanche
Example:
```python
lat = snowpit.core_info.location.latitude
```
#### Weather Conditions (snowpit.core_info.weather_conditions)
- `sky_cond` - Sky conditions code
- `sky_cond_desc` - Sky conditions description
- `precip_ti` - Precipitation type and intensity code
- `precip_ti_desc` - Precipitation description
- `air_temp_pres` - [temperature, units]
- `wind_speed` - Wind speed code
- `wind_speed_desc` - Wind speed description
- `wind_dir` - Wind direction
Example:
```python
skyCond = snowpit.core_info.weather_conditions.sky_cond
```
### 2. Snow Profile (snowpit.snow_profile)
Contains layer data and measurements:
#### Profile Info
- `measurement_direction` - Direction of measurements
- `profile_depth` - [depth, units]
- `hs` - Total snow height [value, units]
Example:
```python
measDir = snowpit.snow_profile.measurement_direction
```
#### Layers (snowpit.snow_profile.layers)
Example:
```python
layers_list = snowpit.snow_profile.layers
```
List of Layer objects, each containing:
- `depth_top` - [depth, units]
- `thickness` - [thickness, units]
- `hardness` - Hand hardness code
- `hardness_top` - Top of layer hardness
- `hardness_bottom` - Bottom of layer hardness
- `wetness` - Wetness code
- `wetness_desc` - Wetness description
- `layer_of_concern` - Boolean
- `grain_form_primary` - grain form object representing primary grain form
- `grain_form_secondary` - grain form object representing secondary grain form
Example:
```python
depthTop_layer1 = snowpit.snow_profile.layers[0].depth_top
```
##### Grain Info (layer.grain_form_primary or layer.grain_form_secondary)
- `grain_form` - Grain form code
- `grain_size_avg` - [size, units]
- `grain_size_max` - [size, units]
- `basic_grain_class_code` - Basic grain type code
- `basic_grain_class_name` - Basic grain type name
- `sub_grain_class_code` - Detailed grain type code
- `sub_grain_class_name` - Detailed grain type name
Example:
```python
primaryGrainForm_layer1 = snowpit.snow_profile.layers[0].grain_form_primary.grain_form
```
#### Temperature Profile (snowpit.snow_profile.temp_profile)
List of temperature observations, each containing:
- `depth` - [depth, units]
- `snow_temp` - [temperature, units]
Example:
```python
depth_obs1 = snowpit.snow_profile.temp_profile[0].depth
```
#### Density Profile (snowpit.snow_profile.density_profile)
List of density observation, each containing:
- `depth_top` - [depth, units]
- `thickness` - [thickness, units]
- `density` - [density, units]
Example:
```python
depthTop_obs1 = snowpit.snow_profile.density_profile[0].depth_top
```
### 3. Stability Tests (snowpit.stability_tests)
Contains lists of different stability test results:
- `ECT` - Extended Column Test
- `CT` - Compression Test
- `RBlock` - Rutschblock Test
- `PST` - Propagation Saw Test
Example:
```python
ECTs_list = snowpit.stability_tests.ECT
```
#### Extended Column Test (snowpit.stability_tests.ECT) is a list of ExtColumnTest objects
Each containing:
- `depth_top` - [depth, units]
- `test_score` - Test result code
- `propagation` - Boolean
- `num_taps` - Number of taps
- `comment` - Test comments
Example:
```python
ECT1_depthTop = snowpit.stability_tests.ECT[0].depth_top
```
#### Compression Test (snowpit.stability_tests.CT) is a list of ComprTest objects
Each containing:
- `depth_top` - [depth, units]
- `fracture_character` - Fracture character code
- `test_score` - Test result code
- `comment` - Test comments
Example:
```python
CT1_depthTop = snowpit.stability_tests.CT[0].depth_top
```
#### Rutschblock Test (snowpit.stability_tests.RBlock) is a list of RBlockTest objects
Each containing:
- `depth_top` - [depth, units]
- `fracture_character` - Fracture character code
- `release_type` - Release type code
- `test_score` - Test result code
- `comment` - Test comments
Example:
```python
RBlock1_depthTop = snowpit.stability_tests.RBlock[0].depth_top
```
#### Propagation Saw Test (snowpit.stability_tests.PST) is a list of PropSawTest objects
Each containing:
- `depth_top` - [depth, units]
- `fracture_prop` - Propagation result
- `cut_length` - [length, units]
- `column_length` - [length, units]
- `comment` - Test comments
Example:
```python
PST1_depthTop = snowpit.stability_tests.PST[0].depth_top
```
### 4. Whumpf Data (snowpit.whumpf_data)
Custom SnowPilot data about collapsing weak layers:
- `whumpf_cracking` - Presence of whumpf with cracking
- `whumpf_no_cracking` - Presence of whumpf without cracking
- `cracking_no_whumpf` - Presence of cracking without whumpf
- `whumpf_near_pit` - Whumpf location relative to pit
- `whumpf_depth_weak_layer` - Depth of weak layer
- `whumpf_triggered_remote_ava` - If whumpf triggered remote avalanche
- `whumpf_size` - Size of the whumpf
Example:
```python
whumpfCracking = snowpit.whumpf_data.whumpf_cracking
```
## Advanced Usage Examples
### Batch Processing Multiple Snow Pits
```python
import os
from snowpylot import caaml_parser
# Process all CAAML files in a directory
folder_path = "path/to/snowpits"
caaml_files = [f for f in os.listdir(folder_path) if f.endswith(".xml")]
results = []
for file in caaml_files:
file_path = os.path.join(folder_path, file)
pit = caaml_parser(file_path)
# Extract data of interest
result = {
"PitID": pit.core_info.pit_id,
"Date": pit.core_info.date,
"Location": f"{pit.core_info.location.latitude}, {pit.core_info.location.longitude}",
"HS": pit.snow_profile.hs,
"LayerCount": len(pit.snow_profile.layers),
"ECTCount": len(pit.stability_tests.ECT)
}
results.append(result)
# Convert to pandas DataFrame for analysis
import pandas as pd
df = pd.DataFrame(results)
print(df.head())
```
### Analyzing Stability Test Results
```python
from snowpylot import caaml_parser
pit = caaml_parser("path/to/snowpit.caaml.xml")
# Analyze ECT results
for ect in pit.stability_tests.ECT:
print(f"ECT at depth {ect.depth_top}: Score {ect.test_score}")
print(f" Propagation: {ect.propagation}")
print(f" Number of taps: {ect.num_taps}")
print(f" Comment: {ect.comment}")
# Find layers of concern
for layer in pit.snow_profile.layers:
if layer.layer_of_concern:
print(f"Layer of concern at depth {layer.depth_top}")
print(f" Grain form: {layer.grain_form_primary.grain_form}")
print(f" Hardness: {layer.hardness}")
```
## Resources
- [SnowPilot.org](https://snowpilot.org/) - Source of snow pit data
- [Source Code for SnowPilot](https://github.com/SnowpitData/AvscienceServer)
- [CAAML Schema Documentation](http://caaml.org/Schemas/V4.2/Doc/) - CAAML data format specification
- [Snowpack Repository](https://github.com/ronimos/snowpack) - Tools built by Ron Simenhois to read and compare SNOWPACK.pro files and SnowPilot CAAML.xml files
## License
This project is licensed under the MIT License - see the LICENSE file for details.
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Raw data
{
"_id": null,
"home_page": "https://github.com/connellymk/snowpylot",
"name": "snowpylot",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "snowpit, caaml, snowpilot",
"author": "Mary Kate Connelly",
"author_email": "Mary Kate Connelly <connellymarykate@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/33/74/074aae33d47cfef1178f5f7a602b05047011c1c090b7dfd5d499a20e7b2b/snowpylot-1.1.3.tar.gz",
"platform": null,
"description": "# SnowPylot\n\nA Python library for working with CAAML.xml files containing snow pit data from [SnowPilot.org](https://snowpilot.org/).\n\n## Features\n\n- Parse CAAML.xml files from SnowPilot.org to access snow pit information including:\n - Core metadata (pit ID, date, location, etc.)\n - Snow profile data (layers, grain types, etc.)\n - Stability test results (ECT, CT, Rutschblock, PST)\n - Density Profile\n - Temperature Profile\n - Whumpf observations\n\n## Installation\n\n```bash\npip install snowpylot\n```\n\nOr clone the repository:\n\n```bash\ngit clone https://github.com/connellymk/snowpylot.git\ncd snowpylot\npip install -e .\n```\n\n## Quick Start\n\n```python\nfrom snowpylot import caaml_parser\n\n# Parse a CAAML file\nsnowpit = caaml_parser(\"path/to/snowpit.caaml.xml\")\n\n# Access basic information\nprint(f\"Pit ID: {snowpit.core_info.pit_id}\")\nprint(f\"Date: {snowpit.core_info.date}\")\nprint(f\"Location: {snowpit.core_info.location.latitude}, {snowpit.core_info.location.longitude}\")\n\n# Access snow profile data\nprint(f\"HS: {snowpit.snow_profile.hs}\")\n\n# Access layer information\nfor i, layer in enumerate(snowpit.snow_profile.layers):\n print(f\"Layer {i+1}: Depth {layer.depth_top}, Thickness {layer.thickness}\")\n print(f\" Grain form: {layer.grain_form_primary.grain_form}\")\n print(f\" Hardness: {layer.hardness}\")\n\n# Access ECT test results\nfor ect in snowpit.stability_tests.ECT:\n print(f\"ECT at depth {ect.depth_top}: Score {ect.test_score}\")\n```\n\n## Documentation\n\nThis documentation provides a comprehensive overview of the SnowPit object structure and how to access its various components. The nested structure allows for logical organization of the data while maintaining easy access to all information through dot notation.\n\nFor more detailed examples, the demos directory contains Jupyter notebooks demonstrating various use cases.\n\n## SnowPit Object Structure\n\nThe SnowPit object is the main container for all snow pit data. It consists of four main components:\n\n### 1. Core Info (snowpit.core_info)\n\nBasic information about the snow pit:\n\n- `pit_id` - Unique identifier\n- `pit_name` - Name of the pit\n- `date` - Date of observation\n- `comment` - General comments\n- `caaml_version` - Version of CAAML schema used\n- `user` - User information\n- `location` - Location information\n- `weather_conditions` - Weather conditions\n\nExample:\n\n```python\nID = snowpit.core_info.pit_id\n```\n\n#### User Info (snowpit.core_info.user)\n\n- `operation_id` - ID of the operation\n- `operation_name` - Name of the operation\n- `professional` - Boolean indicating if user is professional\n- `user_id` - User identifier\n- `username` - SnowPilot username of the user\n\nExample:\n\n```python\noperationID = snowpit.core_info.user.operation_id\n```\n\n#### Location Info (snowpit.core_info.location)\n\n- `latitude` - Decimal degrees\n- `longitude` - Decimal degrees\n- `elevation` - [value, units]\n- `aspect` - Slope aspect\n- `slope_angle` - [value, units]\n- `country` - Country name\n- `region` - Region name\n- `pit_near_avalanche` - Boolean\n- `pit_near_avalanche_location` - Location description if near avalanche\n\nExample:\n\n```python\nlat = snowpit.core_info.location.latitude\n```\n\n#### Weather Conditions (snowpit.core_info.weather_conditions)\n\n- `sky_cond` - Sky conditions code\n- `sky_cond_desc` - Sky conditions description\n- `precip_ti` - Precipitation type and intensity code\n- `precip_ti_desc` - Precipitation description\n- `air_temp_pres` - [temperature, units]\n- `wind_speed` - Wind speed code\n- `wind_speed_desc` - Wind speed description\n- `wind_dir` - Wind direction\n\nExample:\n\n```python\nskyCond = snowpit.core_info.weather_conditions.sky_cond\n```\n\n### 2. Snow Profile (snowpit.snow_profile)\n\nContains layer data and measurements:\n\n#### Profile Info\n\n- `measurement_direction` - Direction of measurements\n- `profile_depth` - [depth, units]\n- `hs` - Total snow height [value, units]\n\nExample:\n\n```python\nmeasDir = snowpit.snow_profile.measurement_direction\n```\n\n#### Layers (snowpit.snow_profile.layers)\n\nExample:\n\n```python\nlayers_list = snowpit.snow_profile.layers\n```\n\nList of Layer objects, each containing:\n\n- `depth_top` - [depth, units]\n- `thickness` - [thickness, units]\n- `hardness` - Hand hardness code\n- `hardness_top` - Top of layer hardness\n- `hardness_bottom` - Bottom of layer hardness\n- `wetness` - Wetness code\n- `wetness_desc` - Wetness description\n- `layer_of_concern` - Boolean\n- `grain_form_primary` - grain form object representing primary grain form\n- `grain_form_secondary` - grain form object representing secondary grain form\n\nExample:\n\n```python\ndepthTop_layer1 = snowpit.snow_profile.layers[0].depth_top\n```\n\n##### Grain Info (layer.grain_form_primary or layer.grain_form_secondary)\n\n- `grain_form` - Grain form code\n- `grain_size_avg` - [size, units]\n- `grain_size_max` - [size, units]\n- `basic_grain_class_code` - Basic grain type code\n- `basic_grain_class_name` - Basic grain type name\n- `sub_grain_class_code` - Detailed grain type code\n- `sub_grain_class_name` - Detailed grain type name\n\nExample:\n\n```python\nprimaryGrainForm_layer1 = snowpit.snow_profile.layers[0].grain_form_primary.grain_form\n```\n\n#### Temperature Profile (snowpit.snow_profile.temp_profile)\n\nList of temperature observations, each containing:\n\n- `depth` - [depth, units]\n- `snow_temp` - [temperature, units]\n\nExample:\n\n```python\ndepth_obs1 = snowpit.snow_profile.temp_profile[0].depth\n```\n\n#### Density Profile (snowpit.snow_profile.density_profile)\n\nList of density observation, each containing:\n\n- `depth_top` - [depth, units]\n- `thickness` - [thickness, units]\n- `density` - [density, units]\n\nExample:\n\n```python\ndepthTop_obs1 = snowpit.snow_profile.density_profile[0].depth_top\n```\n\n### 3. Stability Tests (snowpit.stability_tests)\n\nContains lists of different stability test results:\n\n- `ECT` - Extended Column Test\n- `CT` - Compression Test\n- `RBlock` - Rutschblock Test\n- `PST` - Propagation Saw Test\n\nExample:\n\n```python\nECTs_list = snowpit.stability_tests.ECT\n```\n\n#### Extended Column Test (snowpit.stability_tests.ECT) is a list of ExtColumnTest objects\n\nEach containing:\n\n- `depth_top` - [depth, units]\n- `test_score` - Test result code\n- `propagation` - Boolean\n- `num_taps` - Number of taps\n- `comment` - Test comments\n\nExample:\n\n```python\nECT1_depthTop = snowpit.stability_tests.ECT[0].depth_top\n```\n\n#### Compression Test (snowpit.stability_tests.CT) is a list of ComprTest objects\n\nEach containing:\n\n- `depth_top` - [depth, units]\n- `fracture_character` - Fracture character code\n- `test_score` - Test result code\n- `comment` - Test comments\n\nExample:\n\n```python\nCT1_depthTop = snowpit.stability_tests.CT[0].depth_top\n```\n\n#### Rutschblock Test (snowpit.stability_tests.RBlock) is a list of RBlockTest objects\n\nEach containing:\n\n- `depth_top` - [depth, units]\n- `fracture_character` - Fracture character code\n- `release_type` - Release type code\n- `test_score` - Test result code\n- `comment` - Test comments\n\nExample:\n\n```python\nRBlock1_depthTop = snowpit.stability_tests.RBlock[0].depth_top\n```\n\n#### Propagation Saw Test (snowpit.stability_tests.PST) is a list of PropSawTest objects\n\nEach containing:\n\n- `depth_top` - [depth, units]\n- `fracture_prop` - Propagation result\n- `cut_length` - [length, units]\n- `column_length` - [length, units]\n- `comment` - Test comments\n\nExample:\n\n```python\nPST1_depthTop = snowpit.stability_tests.PST[0].depth_top\n```\n\n### 4. Whumpf Data (snowpit.whumpf_data)\n\nCustom SnowPilot data about collapsing weak layers:\n\n- `whumpf_cracking` - Presence of whumpf with cracking\n- `whumpf_no_cracking` - Presence of whumpf without cracking\n- `cracking_no_whumpf` - Presence of cracking without whumpf\n- `whumpf_near_pit` - Whumpf location relative to pit\n- `whumpf_depth_weak_layer` - Depth of weak layer\n- `whumpf_triggered_remote_ava` - If whumpf triggered remote avalanche\n- `whumpf_size` - Size of the whumpf\n\nExample:\n\n```python\nwhumpfCracking = snowpit.whumpf_data.whumpf_cracking\n```\n\n## Advanced Usage Examples\n\n### Batch Processing Multiple Snow Pits\n\n```python\nimport os\nfrom snowpylot import caaml_parser\n\n# Process all CAAML files in a directory\nfolder_path = \"path/to/snowpits\"\ncaaml_files = [f for f in os.listdir(folder_path) if f.endswith(\".xml\")]\n\nresults = []\nfor file in caaml_files:\n file_path = os.path.join(folder_path, file)\n pit = caaml_parser(file_path)\n\n # Extract data of interest\n result = {\n \"PitID\": pit.core_info.pit_id,\n \"Date\": pit.core_info.date,\n \"Location\": f\"{pit.core_info.location.latitude}, {pit.core_info.location.longitude}\",\n \"HS\": pit.snow_profile.hs,\n \"LayerCount\": len(pit.snow_profile.layers),\n \"ECTCount\": len(pit.stability_tests.ECT)\n }\n results.append(result)\n\n# Convert to pandas DataFrame for analysis\nimport pandas as pd\ndf = pd.DataFrame(results)\nprint(df.head())\n```\n\n### Analyzing Stability Test Results\n\n```python\nfrom snowpylot import caaml_parser\n\npit = caaml_parser(\"path/to/snowpit.caaml.xml\")\n\n# Analyze ECT results\nfor ect in pit.stability_tests.ECT:\n print(f\"ECT at depth {ect.depth_top}: Score {ect.test_score}\")\n print(f\" Propagation: {ect.propagation}\")\n print(f\" Number of taps: {ect.num_taps}\")\n print(f\" Comment: {ect.comment}\")\n\n# Find layers of concern\nfor layer in pit.snow_profile.layers:\n if layer.layer_of_concern:\n print(f\"Layer of concern at depth {layer.depth_top}\")\n print(f\" Grain form: {layer.grain_form_primary.grain_form}\")\n print(f\" Hardness: {layer.hardness}\")\n```\n\n## Resources\n\n- [SnowPilot.org](https://snowpilot.org/) - Source of snow pit data\n- [Source Code for SnowPilot](https://github.com/SnowpitData/AvscienceServer)\n- [CAAML Schema Documentation](http://caaml.org/Schemas/V4.2/Doc/) - CAAML data format specification\n- [Snowpack Repository](https://github.com/ronimos/snowpack) - Tools built by Ron Simenhois to read and compare SNOWPACK.pro files and SnowPilot CAAML.xml files\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2024 Mary Kate Connelly\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n ",
"summary": "A Python library for working CAAML.XML files from SnowPilot",
"version": "1.1.3",
"project_urls": {
"Documentation": "https://connellymk.github.io/snowpylot",
"Homepage": "https://github.com/connellymk/snowpylot"
},
"split_keywords": [
"snowpit",
" caaml",
" snowpilot"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "64a3e2dd82e463a27a79f91b3b7554360cd4a92c561f69229827fe3362689112",
"md5": "3f1b4f54c2c78037e14d1b3af2091d8b",
"sha256": "92d7905ff3658e3deac0f6e675aa869f92d8402f9b574471a6cf23c2976eee3e"
},
"downloads": -1,
"filename": "snowpylot-1.1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3f1b4f54c2c78037e14d1b3af2091d8b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 18496,
"upload_time": "2025-07-09T20:39:35",
"upload_time_iso_8601": "2025-07-09T20:39:35.432695Z",
"url": "https://files.pythonhosted.org/packages/64/a3/e2dd82e463a27a79f91b3b7554360cd4a92c561f69229827fe3362689112/snowpylot-1.1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3374074aae33d47cfef1178f5f7a602b05047011c1c090b7dfd5d499a20e7b2b",
"md5": "259bd5bb3e356ce82dfbe7128a93100f",
"sha256": "d6b3ec07648b939e13750d28164199a5300b07cf1f0d6d750677bc15e4f12967"
},
"downloads": -1,
"filename": "snowpylot-1.1.3.tar.gz",
"has_sig": false,
"md5_digest": "259bd5bb3e356ce82dfbe7128a93100f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 22842,
"upload_time": "2025-07-09T20:39:36",
"upload_time_iso_8601": "2025-07-09T20:39:36.317770Z",
"url": "https://files.pythonhosted.org/packages/33/74/074aae33d47cfef1178f5f7a602b05047011c1c090b7dfd5d499a20e7b2b/snowpylot-1.1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-09 20:39:36",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "connellymk",
"github_project": "snowpylot",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "snowpylot"
}