{ "info": { "author": "Andy Bell", "author_email": "bellan@si.edu", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "[![Build Status](https://travis-ci.org/MarineGEO/MarineGEO-template-builder.svg?branch=master)](https://travis-ci.org/MarineGEO/MarineGEO-template-builder)\n\n# MarineGEO Template Builder\n\nPython package to create standardized data entry templates for the [Marine Global Earth Observatory (MarineGEO) Network](http://marinegeo.si.edu). This package is a wrapper around [xlsxwriter](https://xlsxwriter.readthedocs.io/) and creates Excel workbooks with built-in validation and metadata. Templates are created using a list of fields defined by the user to use as columns in the workbook. Each field has several attributes that can be set to control what type of values are allowed and provide control over data input validation. \n\n\n## Installation\n\nThe `MarinegeoTemplateBuilder` package can be installed from [PyPi](https://pypi.org/project/MarinegeoTemplateBuilder/) using pip.\n\n\n```python\npip install MarinegeoTemplateBuilder\n```\n\n### Requirements\n\n - Python 2.7+\n - [xlsxwriter](https://xlsxwriter.readthedocs.io/)\n\n## Example\n\nSimple example of a creating a workbook with a single sheet with two columns.\n\n```python\n# Example of creating an Excel template using the MarinegeoTemplateBuilder package\nfrom MarinegeoTemplateBuilder import *\n\n# create the example template\nmain(\"Example.xlsx\", fields=[Field(sheet=\"sheet1\", fieldName=\"ColA\", fieldDefinition=\"Column A\"),\n Field(sheet=\"sheet1\", fieldName=\"ColB\", fieldDefinition=\"Column B\")], title=\"Test Template\")\n\n```\n\n![Example of MarinegeoTemplateBuilder Workbook](docs/simple_example.gif)\n\n## Metadata Configuration\n\n### Metadata sheet\n\nEach workbook has a sheet called Metadata that is used to store information about the project. This sheet is automatically generated for all workbooks using a default set of metadata fields. Options for configuring the metadata sheet are set using the parameters in `MarinegeoTemplateBuilder.main()`.\n\nDefault metadata fields\n - Title\n - Abstract\n - ContactPerson\n - EmailAddress\n - People\n - DataEntryBy\n - DataEntryDate\n - Notes\n - ProtocolVersion\n - TemplateVersion\n - WorkbookBuildInfo (populated automatically)\n\n#### Custom Metadata fields\n \nCustom metadata fields can be used by passing in a list of field objects to metadataList in `MarinegeoTemplateBuilder.main(metadataList=[])`. This will override the default metadata field options \n\n```python\ncustom_metadata = [\n Field(\n sheet=\"Metadata\",\n fieldName=\"Custom 1\",\n fieldDefinition=\"Custom Metadata Field 1\",\n ),\n Field(\n sheet=\"Metadata\",\n fieldName=\"Custom 2\",\n fieldDefinition=\"Custom Metadata Field 2\",\n )]\n\n\n# custom metadata\nmain(..., metadataList=custom_metadata)\n```\n \n![custom metadata example](docs/customMetadata.png)\n\n\n#### Prefilling Metadata\n\nMetadata elements can be preset so default values are set when the workbook is created. This is accomplished by passing a python dictionary of values using the metadata fieldnames as the keys to `metadataValues`.\n\n```python\nmetadataValues = {\n \"TemplateVersion\": \"v0.0.1\",\n \"ProtocolVersion\": \"v0.0.1\",\n \"Title\": \"Please Enter Title Here\",\n}\n```\n\n#### Branding Logo\n\nThe user can change the branding image at the top of the metadata sheet by passing an image to MarinegeoTemplateBuilder.main(..., branding='path/to/img'). If no image is provided, the default is to just have a blank space at the top of the sheet. To use the MarineGEO logo that is provided in the package, just pass `\"DEFAULT\"` as the parameter option. \n\n Note: The layout was designed primarily for the MarineGEO logo, so you may need to lay around with the size of the image to properly display it on the sheet.\n \n\n![default metadata page annotated](docs/metadata_annotated_default.png)\n\n \n### Field Configuration\n\nEach template will have custom columns that may be split across several sheets in the workbook. This is controlled by creating a list of columns (Fields) to add to the workbook. Fields are the columns that are added to the workbook. Each field must have a destination (`sheet`), column header name (`fieldName`), description (`fieldDefinition`) and the attribute type defined (`fieldType`). Certain special fieldTypes will have additional options that can be set to control formats and allowed values. \n\n#### Supported Field Types\n\n - string: general format cells with no restrictions.\n - date: Excel date format with validation. Dates must have the `formatString` defined.\n - date: Excel time format with validation. Times must have the `formatString` defined.\n - list: Validation from another column in the spreadsheet. Source must be defined in the `lookup` variable.\n - equation: Calculated field from other columns. Equation must be defined in the `lookup` variable.\n - integer: validation of integers only. Maybe constrained using minValue and maxValue.\n - decimal: validation of numbers. May be constrained using minValue and maxValue.\n - fkey: Dropdown list from another column (foreign key) in the workbook. \n\n\n##### Strings\n\nField type `string` is for general format cells that have no restrictions. There is no validation rules built in - all values will be allowed in the cells. This should be the default fieldType for all fields that do no fit under the other special field types.\n\n##### Dates\n\nField type `date` is for columns that contain date fields. Excel will provide validation on the cells to ensure that the user inputs are valid dates. To work properly, the field must have the `formatString` defined to control the format of the date/time string. Some examples include YYYY-MM-DD for dates and HH:MM for hours/minutes. See [Excel Format Cells](https://support.microsoft.com/en-us/help/264372/how-to-control-and-understand-settings-in-the-format-cells-dialog-box) for help.\n\n\n##### Times\n\nField type `time` is for columns that contain time fields. Excel will provide validation on the cells to ensure that the user inputs are valid times. To work properly, the field must have the `formatString` defined to control the format of the date/time string. Some examples include YYYY-MM-DD for dates and HH:MM for hours/minutes. See [Excel Format Cells](https://support.microsoft.com/en-us/help/264372/how-to-control-and-understand-settings-in-the-format-cells-dialog-box) for help.\n\n\n##### Lists\n\nField type `list` items are dropdown menus that contain controlled vocabulary for the field. Vocabulary terms should be loaded as `Vocab()` instances. See vocabulary section for more information. \n\n##### Integers\n\nInteger fields can be set using the fieldType `integer`. Integer fields can be limited to a certain range by setting the min or max values. The min and max limits are inclusive. For example, if you want a column to only contain positive integers that are less or equal to three use `minValue = 1, maxValue = 3`. If the min and max limits are not set, the column will just validate that the input is an integer. \n\n##### Decimals\n\nDecimial fields can be set using the fieldType `decimal`. Decimal fields are very similiar to integer fields but accept all number. The range of acceptable values can be set using the min and max values for the field. For example, if a column needs to only contain positive numbers then set the validation to `minValue=0`. If the min and max limits are not set, the column will just validate that the input is an number.\n\n##### Foreign Keys\n\nForegin keys are references to columns in other sheets. This special field type is set using a fieldType of `fkey` with a special value pointing to the other column in `lookup`. The lookup value needs to be in the format of `sheet$columnName`.\n\n##### Equations\n\nCalculated fields are a very special columns. The field type needs to be set as `equation` and the formula needs to be writen in the `lookup` attribute using the column fieldNames. Equations start with an equals sign and use the field names (the column names get swapped internally with the excel column letter values). Equations can only reference the columns on the active sheet and cannot calculate cells on different rows. Example of having a sum column that adds to columns together - `\"=column1 + column2\"`. By default, all calculated fields are locked and unable to edited and appear grayed out. Note: use equations sparingly, the implementation is finicky and fills the speadsheet with lots of null values.\n\n#### Warn Levels\n\nThe validation error level for each field can be set to 'stop', 'warning', or 'information'. See [xlsxwriter error_type](https://xlsxwriter.readthedocs.io/working_with_data_validation.html) for more info. \n\n#### Loading fields\n \nFields can be loaded from a csv file, dataframe or list of `Field()` objects. \n\n```\nsheet,fieldName,fieldDefinition,fieldType,formatString,loopup,unit,minValue,maxValue,warnLevel\nLocation,site,MarineGEO site abbreviation,list,,,,,,\nLocation,locationID,Unique code for each sampling location,string,,,,,,\nLocation,locality,Local or common name of the sampling location,string,,,,,,\nCover,locationID,Foreign key to the locationID defined on the Location sheet,fkey,,Location$locationID,,,,\nCover,transectNumber,\"Transect Number\",integer,,,dimensionless,1,3,\nCover,stopNumber,\"Stop number along transect\",integer,,,dimensionless,1,5,\n```\n\n```python\nfrom MarinegeoTemplateBuilder.classes import Field\n\nattributes = [\n\n Field(sheet=\"Location\", fieldName=\"site\", fieldDefinition=\"MarineGEO site abbreviation\",fieldType=\"list\"),\n Field(sheet=\"Location\", fieldName=\"locationID\",fieldDefinition=\"Unique code for each sampling location\",fieldType=\"string\"),\n Field(sheet=\"Location\", fieldName=\"locality\",fieldDefinition=\"Local or common name of the sampling location\",fieldType=\"string\"),\n Field(sheet=\"Cover\",fieldName=\"locationID\",fieldDefination=\"Foreign key to the locationID defined on the Location sheet\",fieldType=\"fkey\",lookup=\"Location$locationID\"),\n Field(sheet=\"Cover\",fieldName=\"transectNumber\",fieldDefination=\"Transect Number\",fieldType=\"integer\",unit=\"dimensionless\",minValue=1,maxValue=3),\n Field(sheet=\"Cover\",fieldName=\"stopNumber\",fieldDefinition=\"Stop number along transect\",fieldType=\"integer\",unit=\"dimensionless\",minValue=1,maxValue=5)\n]\n\n```\n\n### Controlled Vocabulary\n\nVocabulary are the terms that are used in the dropdown menus. The vocabulary can be set using two different methods. Each vocab term must have the destination fieldName, the code and the definition. All the terms will be added to the Vocab tab in the workbook.\n\nControlled vocabulary for fields. The controlled vocabulary is used for populating validation drop down menus.\n\nEach vocabulary term must have the destination field (fieldName) and the term/code itself (code). It is also best practice to include a definition for each code.\n\nNote: the destination `fieldName` for the vocabulary must match the `fieldName` for the vocabulary and be set as a `fieldType` of `\"list\"`.\n\n#### Load vocabulary terms \n\nVocabulary terms can be loaded from a csv, dataframe or a list of `Vocab()` class instances.\n\n```\nfieldName,code,definition\npercentCover,<5%,Less than 5%\npercentCover,10%,Between 5-10%\npercentCover,15%,Between 10-15%\n```\n```python\nfrom MarinegeoTemplateBuilder.classes import Vocab\n\nvocabulary = [\n Vocab(fieldName=\"percentCover\",code=\"<5%\",definition=\"Less than 5%\"),\n Vocab(fieldName=\"percentCover\",code=\"10%\",definition=\"Between 5-10%\"),\n Vocab(fieldName=\"percentCover\",code=\"15%\",definition=\"Between 10-15%\")\n]\n\n```\n\n\n## Full example\n\n```python\n# Example of creating an Excel template using the MarinegeoTemplateBuilder package\nimport MarinegeoTemplateBuilder\nfrom MarinegeoTemplateBuilder.classes import Field, Vocab\nimport datetime\n\n# some values to prefill for the metadata section\nmetadataValues = {\n \"Title\": \"MarineGEO Template Builder Workbook Demo\",\n \"Abstract\": \"This example illustrates all the configurable options for adding columns with validation to a workbook\"\n \" using the MarineGEO Template Builder package.\",\n \"ContactPerson\": \"Firstname Lastname\",\n \"EmailAddress\": \"first.last@example.com\",\n \"People\": \"Person One; Person Two; Person Three\",\n \"DataEntryBy\": \"Firstname Lastname\",\n \"DataEntryDate\": datetime.datetime.today().strftime('%Y-%m-%d'),\n \"Notes\": \"For Demonstration Use Only!\",\n \"ProtocolVersion\":\"The version number of the protocol used.\"\n\n}\n\n# columns to add to the workbook as a list of Field()'s\nfields = [\n # Dropdown list lookup from controlled vocabulary\n Field(sheet=\"Location\", fieldName=\"site\", fieldDefinition=\"site abbreviation\", fieldType=\"list\"),\n\n # String data field\n Field(sheet=\"Location\", fieldName=\"locationID\", fieldDefinition=\"unique code for sampling location\"),\n\n # On new sheet create a foreign key to the location ID on the location sheet\n Field(sheet=\"Data\", fieldName=\"locationID\", fieldDefinition=\"foreign key for sampling location\", fieldType=\"fkey\", lookup=\"Location$locationID\"),\n\n # Date field in the format of YEAR-MONTH-DAY (YYYY-MM-DD)\n Field(sheet=\"Data\", fieldName=\"date\", fieldDefinition=\"Date Collected\", fieldType=\"date\", formatString=\"YYYY-MM-DD\"),\n\n # Time field in the format of HH:MM\n Field(sheet=\"Data\", fieldName=\"time\", fieldDefinition=\"Time Collected\", fieldType=\"time\", formatString=\"HH:MM\"),\n\n # Another dropdown list that contains controlled vocabulary\n Field(sheet=\"Data\", fieldName=\"type\", fieldDefinition=\"Type collected\", fieldType=\"list\"),\n\n # A field that must contain positive integers\n Field(sheet=\"Data\", fieldName=\"posNum\", fieldDefinition=\"Positive numbers only\", fieldType=\"integer\", minValue=0),\n\n # A field for decimals between -5.5 and 99.9\n Field(sheet=\"Data\", fieldName=\"decimal\", fieldDefinition=\"decimal\", fieldType=\"decimal\", minValue=-5.5, maxValue=99.9),\n\n # Calculated field that multiplys the PosNum by the Decimal\n Field(sheet=\"Data\", fieldName=\"multiply\", fieldDefinition=\"PosNum times Decimal\", fieldType=\"equation\", lookup=\"=posNum * decimal\"),\n\n]\n\n# Load the vocab for the controlled vocab fields\nvocab = [\n Vocab(fieldName=\"site\", code=\"A\", definition=\"site a\"),\n Vocab(fieldName=\"site\", code=\"B\", definition=\"site B\"),\n Vocab(fieldName=\"type\", code=\"Red\", definition=\"site B\"),\n Vocab(fieldName=\"type\", code=\"Blue\", definition=\"site B\")\n\n]\n\n# create the example template\nMarinegeoTemplateBuilder.main(\n \"TestTemplate_v0.0.1.xlsx\",\n fields,\n vocab,\n branding=\"DEFAULT\",\n metadataValues=metadataValues,\n dryrun=False,\n)\n```\n\n![Full MarineGEO template builder example](docs/full_example.gif)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/MarineGEO/MarineGEO-template-builder", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "MarinegeoTemplateBuilder", "package_url": "https://pypi.org/project/MarinegeoTemplateBuilder/", "platform": "", "project_url": "https://pypi.org/project/MarinegeoTemplateBuilder/", "project_urls": { "Homepage": "https://github.com/MarineGEO/MarineGEO-template-builder" }, "release_url": "https://pypi.org/project/MarinegeoTemplateBuilder/0.2.2/", "requires_dist": null, "requires_python": "", "summary": "Constructs MarineGEO data entry excel workbooks with built in validation", "version": "0.2.2" }, "last_serial": 4713225, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "eab330e5da4a9a967968e8909b36c3ad", "sha256": "dfb7032ae9b922fdf32f76f770469a2e406432148680b12e214a0cd9d8519506" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "eab330e5da4a9a967968e8909b36c3ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47327, "upload_time": "2018-10-26T19:27:53", "url": "https://files.pythonhosted.org/packages/64/f5/61042c2f1d60fd686af499f72c6e748c67daa7412679ebe2d956b0a1f879/MarinegeoTemplateBuilder-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "030742677a3d47661128d1e1a7c6e09a", "sha256": "e65ce31dc25b16a20de11847d473d555f86de465a44a9078d9fb55e3c733b3d4" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.1.0.tar.gz", "has_sig": false, "md5_digest": "030742677a3d47661128d1e1a7c6e09a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47581, "upload_time": "2018-10-26T19:27:54", "url": "https://files.pythonhosted.org/packages/e7/47/bad3875824058b8a9e95f2c2033aa5c7f61371a6385508a83d7cc235e706/MarinegeoTemplateBuilder-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "4438133420a21a7d19d60d24987550b7", "sha256": "ef0924de6aeb3839ccc93b9a42c33f4eb4dc730349fdb045d1b449677a494d4a" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4438133420a21a7d19d60d24987550b7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 48488, "upload_time": "2018-11-02T16:04:43", "url": "https://files.pythonhosted.org/packages/dc/52/22693da06ff50672423ee7264ab0bbe39c4cdafd0e48a51720a0366e4dbb/MarinegeoTemplateBuilder-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8038c3ae04244e9a0d37657ae99ab2b0", "sha256": "a61c26e7836720e365b057da2c646511eb43d35f08cc40a6688bf87d35c1256d" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.1.1.tar.gz", "has_sig": false, "md5_digest": "8038c3ae04244e9a0d37657ae99ab2b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48567, "upload_time": "2018-11-02T16:04:45", "url": "https://files.pythonhosted.org/packages/f7/47/0bd1efdcbc429d961d055bd7a60d49e83f03d2c498ba3ad3167e88201212/MarinegeoTemplateBuilder-0.1.1.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "3abc8d31a5c33400929cd9486ece2d4a", "sha256": "2a6357bcb0e4fd9c824fb3f4c4ce26e8b5760c1b281d729a76f841fb7cb355c7" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.1.3.tar.gz", "has_sig": false, "md5_digest": "3abc8d31a5c33400929cd9486ece2d4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48325, "upload_time": "2018-11-06T18:08:10", "url": "https://files.pythonhosted.org/packages/5a/63/6415c256720dda33cccd290b295686fbb10d500bf26b8427fea6e47ffd50/MarinegeoTemplateBuilder-0.1.3.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "badbdf4b7ddf2bf407f78b4418cae6fe", "sha256": "eaca8a968ea61d43fec48104a8e0838f3f7b6d53c1d7f654155f981e18944307" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.1.6.tar.gz", "has_sig": false, "md5_digest": "badbdf4b7ddf2bf407f78b4418cae6fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48320, "upload_time": "2018-11-06T18:24:50", "url": "https://files.pythonhosted.org/packages/32/65/eef1e93834e46fba4f463aa805c6988e927e2789a73240d44bac5e888a1b/MarinegeoTemplateBuilder-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "95dcf778ff048984732421fbbad8c08d", "sha256": "0e6335aadbb07e7c0e626a444c72132262801d8f078ffd10a629f6eb1195db6c" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.1.7.tar.gz", "has_sig": false, "md5_digest": "95dcf778ff048984732421fbbad8c08d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49790, "upload_time": "2018-11-08T17:29:47", "url": "https://files.pythonhosted.org/packages/72/a3/a4bf6bf864b3f332e35a7e8418e30f228b7b9e36d77034fb9378c5d5d8dd/MarinegeoTemplateBuilder-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "b52780c5b6b5a9bde37a6b1267b4c4c3", "sha256": "41c1f10921a0a20d399559413f7bccfc4f1cefa274fa8fad0b6ffc042eeba4a1" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.1.8.tar.gz", "has_sig": false, "md5_digest": "b52780c5b6b5a9bde37a6b1267b4c4c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49812, "upload_time": "2018-11-09T16:12:07", "url": "https://files.pythonhosted.org/packages/b7/91/25ffb142c60b461aacabec47c91adc5ee898f2a69e03392509ebcaca46d2/MarinegeoTemplateBuilder-0.1.8.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ebc6cc96d1f4fb65524a69f0d9aa2697", "sha256": "b4c019a5e011a0042ee6ce851037fe50f87abbd6e68cbed5a603e0065a441dae" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ebc6cc96d1f4fb65524a69f0d9aa2697", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60038, "upload_time": "2018-12-04T17:29:27", "url": "https://files.pythonhosted.org/packages/23/98/7daa3528a7be28132868d946b6db4e61b4a0b9e45d3b3da8ca2838c4cc6f/MarinegeoTemplateBuilder-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "7285d09a4052f7457b2628b26decfb33", "sha256": "eb46f3a9a249d04b5c973e4d6e42dc21d515c56b44fc2b85570788bb04c7dce6" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.2.1.tar.gz", "has_sig": false, "md5_digest": "7285d09a4052f7457b2628b26decfb33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62323, "upload_time": "2018-12-04T17:50:48", "url": "https://files.pythonhosted.org/packages/3b/77/9165140d5641e330bca7a574d8cd491aa41c8cfe1a9401a3fad74dac8aef/MarinegeoTemplateBuilder-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "23c56176eff69f88a05715f911a919ed", "sha256": "db44d4b20abc76ce3d0646e2e81a36f84f9465b032e0996ae26045eb19dc6c79" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.2.2.tar.gz", "has_sig": false, "md5_digest": "23c56176eff69f88a05715f911a919ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62555, "upload_time": "2019-01-18T18:33:30", "url": "https://files.pythonhosted.org/packages/77/5f/8ac42f90cbad6bf2fceb6eac4fa16b19e7766976c97f4d4f69540f62937e/MarinegeoTemplateBuilder-0.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "23c56176eff69f88a05715f911a919ed", "sha256": "db44d4b20abc76ce3d0646e2e81a36f84f9465b032e0996ae26045eb19dc6c79" }, "downloads": -1, "filename": "MarinegeoTemplateBuilder-0.2.2.tar.gz", "has_sig": false, "md5_digest": "23c56176eff69f88a05715f911a919ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62555, "upload_time": "2019-01-18T18:33:30", "url": "https://files.pythonhosted.org/packages/77/5f/8ac42f90cbad6bf2fceb6eac4fa16b19e7766976c97f4d4f69540f62937e/MarinegeoTemplateBuilder-0.2.2.tar.gz" } ] }