{ "info": { "author": "David LePage", "author_email": "dwlepage70@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "|Documentation Status| |Python version| |PyPI version| \n\nsmc-python\n==========\n\nPython based library to provide the ability to interact with the\nStonesoft Management Center API. Provides automation capabilities for\nany environment that interact with the SMC remotely.\n\nSome of the functionality you get with the SMC Python API:\n\n- Create any engine types; single firewall, cluster firewalls, ips\n engines, layer 2 firewalls, master engine and virtual engines.\n- Engine operations such as enabling/disabling AV, GTI, default NAT,\n Contact Addresses, etc\n- Interface configurations\n- Routing configurations (OSPF, BGP, Static, Antispoofing)\n- Engine level commands such as rebooting, going offline, policy push,\n enable/disable SSH, etc.\n- Create and modify all network element objects such as Host, Network,\n Address Ranges, Domain Names, etc.\n- Policy control (create rules, delete rules) for layer 3 firewall\n policies\n- VPN Policy control and creation\n- Management / Log Server settings configuration\n- Admin User creation and modification\n- System level controls; update system packages, update engines, global\n blacklisting, etc\n- Tasks\n- Search operations for any object type by name, href and by filter\n- Collections interface to view all objects by type\n\nRequirements\n------------\n\nPython 2.7\n\nPython 3.5, 3.6\n\nRequests >= 2.12.0\n\nSecurity Management Center version 6.0, 6.1, 6.1.1, 6.1.2, 6.2, 6.2.1, 6.3.x\n\nGetting Started\n---------------\n\nInstalling package\n\nUse pip to get latest released version:\n\n``pip install smc-python``\n\nSpecific version:\n\n``pip install smc-python>=0.5.8``\n\nFrom git:\n\n``pip install git+https://github.com/gabstopper/smc-python.git``\n\nOr download the latest tarball:\n`smc-python `__,\nunzip and run:\n\n``python setup.py install``\n\nBranches\n--------\n\nAs of version 0.6.2, the master branch will be the released version code base. This version will also have a corresponding package on\npypi. \nThe develop branch is used for ongoing updates and will be merged into the master branch at release time.\n\nIf installing the develop branch, use the following:\n\n``pip install git+https://github.com/gabstopper/smc-python.git@develop``\n\nTesting\n-------\n\nIncluded are a variety of test example scripts that leverage the API to\ndo various tasks in /examples\n\nBasics\n------\n\nBefore any commands are run, you must obtain a login session. Once\ncommands are complete, call `session.logout()` to remove the active session.\nTo obtain the api\\_key, log in to the Stonesoft Management Center and\ncreate an API client with the proper privileges.\n\n.. code:: python\n\n from smc import session\n\n session.login(url='http://1.1.1.1:8082', api_key='xxxxxxxxxxxxx')\n ....do stuff....\n session.logout()\n\nOr log in to a specific Admin Domain and use a specific version of the\nAPI:\n\n.. code:: python\n\n session.login(url='http://1.1.1.1:8082', api_key='xxxxxxxxxxxxx',\n domain=mydomain, api_version=6.2)\n ....do stuff....\n session.logout()\n\nOnce a valid session is obtained, it will be re-used for each operation\nfor the duration of the sessions validity, or until the program is\nexited.\n\nExtensions\n**********\n\nExtensions are available to smc-python that provide additional functionality besides what\nis provided in the base library. Extensions are kept separate as they may require additional\npackage requirements and simplify packaging.\n\nExtensions will require smc-python to function, but it is possible to install an extension\ndirectly and it will grab the required smc-python version automatically.\n\nAvailable extensions:\n\n* `smc-python-monitoring `__: Monitoring for SMC connections, blacklists, users, VPNs, alerts, etc. In addition this package provides the ability to 'subscribe' to administrative event modifications.\n\n\nExample install of an smc-python extension:\n\n``pip install smc-python-monitoring``\n\nExtensions are found in the base smc-python repository as namespace packages and each is housed in it's own sub-directory of this base package.\n\nPlease see the read-the-docs documentation above for a full explanation\nand technical reference on available API classes.\n\n`View Documentation on Read The\nDocs `__\n\n.. |Documentation Status| image:: https://readthedocs.org/projects/smc-python/badge/?version=latest\n :target: http://smc-python.readthedocs.io/en/develop/?badge=latest\n.. |PyPI version| image:: https://badge.fury.io/py/smc-python.svg\n :target: https://badge.fury.io/py/smc-python\n.. |Python version| image:: https://img.shields.io/pypi/pyversions/smc-python.svg?maxAge=2592000\n :target: https://pypi.python.org/pypi/smc-python/\n\nRelease History\n===============\n\n0.5.6\n-----\n\n.. note:: For older release release history information, see CHANGELOG. All future documentation will be logged\n\tin this document.\n\n**Improvements**\n\n- Support SMC 6.3:\n - Support for L2 interface policies (Inline L2, IPS and Capture interfaces on L3 engine)\n - Route based VPN support, IPSEC wrapped RBVPN and GRE Tunnel/Transport/No Encryption VPN.\n- SMC 6.3 API only supports TLSv1.2 or greater, ensure your openssl version supports TLSv1.2. This can be done\n by: openssl s_client -connect :8082 -tls1_2\n- Simplified generic Search (`smc.base.collections.Search`) to be uniform with ElementCollection.\n- Simplify API reference documentation\n- SMC login using environment variables. See session documentation for more info.\n- Rule counters on all Policy types\n- Proxy or static type required when adding arp entry to interface\n- Add simple .get() method on Element. This simplifies determining if the element by name exists. For example,\n Host.get('kali') would raise ElementNotFound if it doesn't exist. Prior to this, you would have to search\n for the element and attempt to access and element resource before receiving the ElementNotFound message,\n i.e. host = Host('kali'); host.address. The 'get()' method still returns an 'un-inflated' instance (only meta\n data).\n- Deprecation warnings are now generated for functions in `smc.core.engine.interfaces`:\n `add_single_node_interface`, `add_node_interface`, `add_vlan_to_node_interface`, `add_ipaddress_to_vlan_interface`.\n These functions will eventually be deprecated. As of version 6.3, SMC engines can now support both layer 2 and\n layer 3 interfaces on the same engine. New interface functions added: `add_layer3_vlan_interface`, `add_layer3_interface`,\n `add_inline_ips_interface`, `add_inline_l2fw_interface`.\n- New element types: URLCategory, URLCategoryGroup, ICMPServiceGroup\n\n\n.. important:: Renamed `smc.vpn.policy.VPNPolicy` to `smc.vpn.policy.PolicyVPN`\n\n**Bugfixes**\n\n- HTTP GET was treating a 204 response as an error, fix to treat No Content response as success.\n- Fix help() on dynamic `create_collection` class so constructor methods are proxied properly\n- Raise SMCConnectionError when non-HTTP 200 error code presented from SMC when retrieving entry points\n- Sending empty payload on POST request with parameters might cause validation error. Do not submit empty\n dict with POST requests.\n\n0.5.8\n-----\n\n**Improvements**\n\n- Support for SMC version 6.3.0, 6.3.1 and 6.3.2\n- Add ``case_sensitive`` key word to filtered queries. This requires SMC 6.3+. Set this as a kwarg when making\n the query: Host.objects.filter('myhost', case_sensitive=False). Default: case_sensitive=True.\n- Optimize retrieval of nodes by serializing engine node data versus making a call to the engine links. This eliminates\n the query to get the node links and a query for each node that needs to be operated on, or node payload required.\n- Add ApplianceInfo and link on node to retrieve appliance related info\n- GatewayTunnel implemented on PolicyVPN for setting preshared key, enabling/disabling specific tunnel endpoints\n- BGP node added to engine. Add full create/modify/delete capability by reference: engine.bgp.is_enabled, etc. Added to\n provide modular configuration to BGP.\n- OSPF node added to engine. Add full create/modify/delete capability by reference: engine.ospf.is_enabled, etc.\n- merging lists on element update will now filter out duplicate entries before potentially updating. The SMC API protects\n against this but validation moved into element update function saving potential exception on PUT\n- get_or_create and update_or_create return classmethod get for elements that are considered read-only; i.e. do not have\n a `create` classmethod.\n- update_or_create will now check the provided key/value pairs before updating the specified element. This is to make\n the modification more idempotent. If the retrieved element exists and has the same value (based on current ETag), then\n do not modify.\n- Optimization of resolved alias retrieval from the engine. Instead of retrieving all aliases and resolving the alias\n reference, first retrieve the entire list of aliases (1 query) and then correlate to resolved alias references. This\n amounts to reducing the number of queries to retrieve a single engines aliases from ~60 to 3.\n- set_stream_logger and set_file_logger attached to smc.api.session.Session() as convenience functions.\n- Optimize logging at request level, more clear output\n- Simplify interface creating where zone or logical interface is needed. Now zone/logical interfaces can be provided\n as either name (if they don't exist, they will be created), as href, or as Zone/LogicalInterface instances.\n- New engine level resources: antivirus, file_reputation, sidewinder_proxy, sandbox and url_filtering, policy_routing,\n dns and default nat added as engine resources. Previous functions nested in smc.core.properties.AddOns set to deprecated\n and will be removed in the near future.\n- Added support for adding DNS Server entries to engines based on elements (previously only IP addresses were supported).\n- TLS Server Credentials supported for inbound SSL decryption, add to engine from engine.tls_inspection resource.\n- Add create_hook to ElementCreator to intercept json before submitting to SMC server. See smc.base.decorators.create_hook\n for more info.\n- Added engine.interface_options node for settings related to setting primary mgt, backup mgt, primary hearbeat, and backup heartbeat\n rather than having them nested on the PhysicalInterface. These can be called directly from the engine which removes ambiguity in how\n these settings are modified. Previous versions they could be called directly (i.e. engine.physical_interface.set_primary_mgt() however\n required unnecessary plumbing. This more closely models the SMC UI configuration.\n- All engine interface nodes now return InterfaceCollection as an iterable. Also included is a get(interface_id) method to \n directly retrieve an interface of that type. Any 'add' methods are proxied from the collection manager to an instance.\n- remove_vlan on interface no longer requires the interface reference, however now requires the interface context to run. Before:\n engine.physical_interface.remove_vlan(interface_id=100, vlan_id=1), now you need to load the interface, then delete the\n vlan: interface = engine.interface.get(100); interface.remove_vlan(1)\n- History property on Element added\n\n **Bugfixes**\n\n - If a search is provided in format: Host.objects.filter(address='1.1.1.1').first(), and the search returns meta but the\n filtered results do not return a match, the method tries to pop from an empty list. Return None instead.\n\n0.6.0\n-----\n\n**Tested SMC Version**\n\n- Support for SMC 6.3.3, 6.3.4\n\n**Improvements**\n\n- SubElementCollection helper methods for using matching criteria on returned results: get, get_contains, get_all_contains.\n Useful for searching meta data returned for this collection type.\n- IndexedIterable used for collections returned in various areas of the configuration and provides a common interface\n for data that is returned in lists. IndexedIterable classes provide a simplified interface to retrieving data from the\n collection.\n- Change add_arp_entry to static_arp_entry in physical_interface\n- Added Reports to smc.administration module\n- Added collections for all interfaces making it possible to fetch a VLAN or sub interface without iterating\n- File objects can be accepted for TLSServerCredential import methods\n- InterfaceNotFound exception replaces EngineCommandFailed when fetching interfaces\n- engine.routing.get raises InterfaceNotFound instead of returning None when specified interface does not exist\n- renamed remove_route_element to remove_route_gateway in smc.core.route.Routing\n- engine.routing shortcuts: as_tree, bgp_peerings, ospf_areas, netlinks\n- delete instance cache after successful delete() call\n- Policy rules support for decrypting (requires SMC >= 6.3.3)\n- TLS Server Credential elements support valid_from, valid_to\n- current_user property added to session to derive the logged on user from the API client key\n\n0.6.1\n-----\n\n**Tested SMC Version**\n\n- Support for SMC 6.3.4, 6.4.0\n- ReportDesign.generate takes new arguments for start_time, end_time and senders to specify the timeframe\n to run the report and any filters\n- Improved readability of debug logging\n- Fetch by VLAN id in format '1.10' for interface 1, vlan 10. Using engine.interface.get('1.10')\n- Removed dependency on third party ipaddress module\n- Layer3Firewall and FirewallCluster can now take an additional `interfaces` argument to define additional\n interfaces to create when creating a single or cluster FW. VLANs definitions are also supported.\n- Create rule sections in all supported rule types, comments for rules\n- Firewall Clusters can be fully created with additional interfaces and primary_heartbeat, backup_mgt fields\n can be customized during creation\n- Renamed module smc.core.properties to smc.core.addon\n- Added keyword argument to get_or_create and update_or_create `with_status` which takes a boolean value.\n If set, will return a 2 tuple (Element, was_created), were was_created indicates whether the element\n had to be created or whether it was fetched.\n- Add BGP Peerings to Tunnel Interface fixed to set on top level interface versus network level.\n- update_or_create methods for ExternalGateway, ExternalEndpoint and VPNSite. Allows for full provisioning\n of an external gateway and update after creation.\n- Interfaces rewritten to provide more flexibility. Interfaces can be built from a low level API or previous\n helper methods can be used\n\n0.6.2\n-----\n\n- Added support for ProxyServer, TLSProfile and TLSIdentity network elements\n- Elements for Internal Domain users and External LDAP Domain configurations\n- Active Directory elements with ability to specify LDAPS and TLS Identity in AD profile\n- Changed Blacklist.prepare_blacklist method to Blacklist.add_entry\n- Refactor contact addresses for management and log server\n- Interface contact addresses remove_contact_address modified to take location as key for deleting\n- Interface QoS settings on layer 3, tunnel interfaces and layer 3 VLANs\n- Introduce SessionManager to allow for multiple SMC API client sessions within the same python interpreter\n SessionManager can also be hooked to allow user authentication data to come from a different source such as\n a web application session\n- Create Alias elements and assign to engine (Aliases were previously read-only)\n- All template policies inherit from their related type to support creating templates\n- Deprecate support for python 3.4, add support for python 3.6.6\n\n\n\n\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/gabstopper/smc-python", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "smc-python", "package_url": "https://pypi.org/project/smc-python/", "platform": "", "project_url": "https://pypi.org/project/smc-python/", "project_urls": { "Homepage": "http://github.com/gabstopper/smc-python" }, "release_url": "https://pypi.org/project/smc-python/0.6.2/", "requires_dist": [ "requests (>=2.12.0)" ], "requires_python": "", "summary": "Python based API to Stonesoft Security Management Center", "version": "0.6.2" }, "last_serial": 4449727, "releases": { "0.5.5": [ { "comment_text": "", "digests": { "md5": "9419c4bc1f2f9915a81baaec0a772b57", "sha256": "334b111ecd39ae245952eb5ab50077c2bde48c117ffbb2528598bbc4656215ee" }, "downloads": -1, "filename": "smc_python-0.5.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9419c4bc1f2f9915a81baaec0a772b57", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 222598, "upload_time": "2017-07-06T16:32:36", "url": "https://files.pythonhosted.org/packages/e3/9d/20f3e94d72aeb7cf821f297bb753fed9b45de83085177281051a42586d73/smc_python-0.5.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "00bebfb78f317ca9fe8cd2503fe507c2", "sha256": "06316d5a439bf63e6a122d2ad90e3dc3d24d01a2acdc3944cd1cb97a6ff1f97f" }, "downloads": -1, "filename": "smc-python-0.5.5.tar.gz", "has_sig": false, "md5_digest": "00bebfb78f317ca9fe8cd2503fe507c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 141776, "upload_time": "2017-07-06T16:32:38", "url": "https://files.pythonhosted.org/packages/66/b0/ef8643a4e80a86c74cad103cad359600f1117de068d532c623aeb047cadc/smc-python-0.5.5.tar.gz" } ], "0.5.6": [ { "comment_text": "", "digests": { "md5": "ca87e07958cdf25d4258a178c515206c", "sha256": "e0f72f5e9cc71619b70265cd995b7fa2db3c6b091abff22fec40f30d468e3031" }, "downloads": -1, "filename": "smc_python-0.5.6-py2.7.egg", "has_sig": false, "md5_digest": "ca87e07958cdf25d4258a178c515206c", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 583622, "upload_time": "2017-12-26T04:19:03", "url": "https://files.pythonhosted.org/packages/79/18/56fccc97fa072f301d25e08d1895265568bedd57486e8437c3969a494694/smc_python-0.5.6-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "2c5135e481fa9c5174cf908bbd2a491c", "sha256": "aa5a7e8966a6963f8d7cf6a4d629d50afe1d07cf81073c62ec094c2c3103b78c" }, "downloads": -1, "filename": "smc_python-0.5.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2c5135e481fa9c5174cf908bbd2a491c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 247759, "upload_time": "2017-10-05T23:18:33", "url": "https://files.pythonhosted.org/packages/55/d9/609bcb3eb366ff3024cda52da0d33dbe137cadeb3f97564c79e22cb61a9a/smc_python-0.5.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8756113aff53c2bd6d229ba8cffbd257", "sha256": "42a6b256adf3264ef208036dfb8af5577061dd0f5eee7c4ba1a3b5d8d9303114" }, "downloads": -1, "filename": "smc-python-0.5.6.tar.gz", "has_sig": false, "md5_digest": "8756113aff53c2bd6d229ba8cffbd257", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 198691, "upload_time": "2017-10-05T23:18:34", "url": "https://files.pythonhosted.org/packages/1f/82/6eb7f8a7d47fe7af9220d9a5149fcbe87c717370d9f1586c80749c13aad5/smc-python-0.5.6.tar.gz" } ], "0.5.7": [ { "comment_text": "", "digests": { "md5": "3828202b11f6c3b8bd5dfe7d3a4ca07a", "sha256": "ac2d8aafe45073c842d1298ce1b8705f0eb9f33b278af7736ba686144d6e0ecb" }, "downloads": -1, "filename": "smc_python-0.5.7-py2.7.egg", "has_sig": false, "md5_digest": "3828202b11f6c3b8bd5dfe7d3a4ca07a", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 628005, "upload_time": "2017-12-26T04:19:07", "url": "https://files.pythonhosted.org/packages/44/f8/6c7ecf71bf3d32a53ce4f7774572e36b0d0ff2baa10061d08c4865f093b2/smc_python-0.5.7-py2.7.egg" } ], "0.5.8b0": [ { "comment_text": "", "digests": { "md5": "6eb65aa44b889caafc3040350f20348a", "sha256": "a11eb59e8ef193494ed078bac47f5fcd2fafa1f1fea11faf0662db87f1b6bae3" }, "downloads": -1, "filename": "smc_python-0.5.8b0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6eb65aa44b889caafc3040350f20348a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 292796, "upload_time": "2017-12-26T05:22:16", "url": "https://files.pythonhosted.org/packages/33/54/4a41d001893ae5e3837c23c2c3bd4ccbc5d28ae1f1ae501be588f41edd6e/smc_python-0.5.8b0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b0b4bd5cd377342c4086f0aa2ac6551", "sha256": "e7798de02694d9bbe593638ad4f2296e3cf19b25838b235d0cf886295fd71245" }, "downloads": -1, "filename": "smc-python-0.5.8b0.tar.gz", "has_sig": false, "md5_digest": "5b0b4bd5cd377342c4086f0aa2ac6551", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 240734, "upload_time": "2017-12-26T05:22:19", "url": "https://files.pythonhosted.org/packages/21/c9/b70c2ec9b1d8d16eeeb9d57fffc5764934979e1756405b63105f6bcb7c8a/smc-python-0.5.8b0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "fed9eaaa4fca71cb8a21fc9b07fa842e", "sha256": "9fe800412a3195cc07a60ffc3692cd8c6a301f64b44ad0b62c12b07e980c21d9" }, "downloads": -1, "filename": "smc_python-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fed9eaaa4fca71cb8a21fc9b07fa842e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 304542, "upload_time": "2018-02-04T18:37:21", "url": "https://files.pythonhosted.org/packages/36/39/0c0be83ade73c4e83ed34a8b069a0d030bb4e9924271dfb1f4781f34a606/smc_python-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01d4ace5f94bbdccbe49be8770167bc0", "sha256": "1f424a8583aebac654c400afb7c5cf192b703958e51ceebf01f0e1fbab8f31ad" }, "downloads": -1, "filename": "smc-python-0.6.0.tar.gz", "has_sig": false, "md5_digest": "01d4ace5f94bbdccbe49be8770167bc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 249700, "upload_time": "2018-02-04T18:37:23", "url": "https://files.pythonhosted.org/packages/c7/85/f120274e7f9600c11d9f9043b8db1d3165a6a6a85138807e3e23eede9821/smc-python-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "e694df78aabe693f59dd0fb250cc583d", "sha256": "2cd74222754d7c5a18891e32a296fb251b6b94ab30181934af2fc1729fd225ba" }, "downloads": -1, "filename": "smc_python-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e694df78aabe693f59dd0fb250cc583d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 346419, "upload_time": "2018-06-16T02:18:22", "url": "https://files.pythonhosted.org/packages/5c/21/b25b1190958665d9dfa13cba3e7dbab16ee9d9cbd3f1406ef583696a0d1b/smc_python-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48d6de2afa43dd067e27285c23f72681", "sha256": "e2422bdfcafd415efb41dfb6b7fb60f538d4a7a35704418529ff8f95ba3b8879" }, "downloads": -1, "filename": "smc-python-0.6.1.tar.gz", "has_sig": false, "md5_digest": "48d6de2afa43dd067e27285c23f72681", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 291260, "upload_time": "2018-06-16T02:18:24", "url": "https://files.pythonhosted.org/packages/60/93/aebf041571260da83222b814edaec99732150bd73795fc147a9df080f3fa/smc-python-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "ce3aaca2dd3e55593e2d9b6927dae2ce", "sha256": "a209e929da64a54ece6f490e5b06b27fb9697376eb90b0c619197980410328fc" }, "downloads": -1, "filename": "smc_python-0.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ce3aaca2dd3e55593e2d9b6927dae2ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 379027, "upload_time": "2018-11-04T14:19:00", "url": "https://files.pythonhosted.org/packages/22/2d/12408bdc7599b763fa6f00191a564129e9f4e208ffe59e218da7de11c412/smc_python-0.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c5d867c78ca53089a9d9c1ab2dd1f85", "sha256": "49bffd8fff0595a9581bd8c63733710d907aa057850f7e19ebaaf3865e7da360" }, "downloads": -1, "filename": "smc-python-0.6.2.tar.gz", "has_sig": false, "md5_digest": "7c5d867c78ca53089a9d9c1ab2dd1f85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 320950, "upload_time": "2018-11-04T14:19:02", "url": "https://files.pythonhosted.org/packages/36/a4/6fd6b960755ae9ae68882ca7c6766ed393827214c33c21b356e8e29a6991/smc-python-0.6.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ce3aaca2dd3e55593e2d9b6927dae2ce", "sha256": "a209e929da64a54ece6f490e5b06b27fb9697376eb90b0c619197980410328fc" }, "downloads": -1, "filename": "smc_python-0.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ce3aaca2dd3e55593e2d9b6927dae2ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 379027, "upload_time": "2018-11-04T14:19:00", "url": "https://files.pythonhosted.org/packages/22/2d/12408bdc7599b763fa6f00191a564129e9f4e208ffe59e218da7de11c412/smc_python-0.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c5d867c78ca53089a9d9c1ab2dd1f85", "sha256": "49bffd8fff0595a9581bd8c63733710d907aa057850f7e19ebaaf3865e7da360" }, "downloads": -1, "filename": "smc-python-0.6.2.tar.gz", "has_sig": false, "md5_digest": "7c5d867c78ca53089a9d9c1ab2dd1f85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 320950, "upload_time": "2018-11-04T14:19:02", "url": "https://files.pythonhosted.org/packages/36/a4/6fd6b960755ae9ae68882ca7c6766ed393827214c33c21b356e8e29a6991/smc-python-0.6.2.tar.gz" } ] }