{ "info": { "author": "Mael Stor", "author_email": "maelstor@posteo.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "Intended Audience :: Telecommunications Industry", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Topic :: Security", "Topic :: System :: Networking", "Topic :: System :: Networking :: Firewalls", "Topic :: System :: Systems Administration", "Topic :: Utilities" ], "description": "

CønNørD

\n

Connect to NordVPN servers secure and fast

\n\n

\n\"Code\n\"License\"\n\"Python\n\"GitHub\n\"Travis\n\"Coveralls\n

\n\n---\n\nCønNørD connects you to NordVPN servers with\n[OpenVPN](https://openvpn.net/community-resources/#articles) and you can choose\nbetween a high amount of possible filters, to make it easy for you to connect \nto servers with the best performance and features the server offers to you. \nIt's taken care that your DNS isn't leaked. You can test your DNS spoofability\n[here](https://www.grc.com/dns/dns.htm) and DNS leaks \n[here](https://ipleak.net/).\n\nMost of the tools out there provide their own set of firewall rules without\npossibility to customize them to your needs. Sometimes it is just cumbersome to\nwrite your own set of rules and make them compatible with the connection tool.\nCønNørD just provides a reasonable default, but you stay ALWAYS in\ncontrol of your firewall and can customize every rule to your needs. Furthermore\nCønNørD exposes a lot of environment variables from OpenVPN and the\nrunning connord instance to .rules and .fallback files so you can tailor each\nrule dynamically to your interfaces, current ip addresses and more.\nSee the Iptables section on how it works or just accept the defaults, which work\nperfectly fine for unexperienced users, without breaking your privacy and internet\nexperience.\n\nCønNørD keeps configuration files in openvpn folders, so you can\nalways step back to OpenVPN if you like to without the need to search too much\naround. You may keep CønNørD around then to update your configuration \nfiles with a cronjob on a regular basis and enjoy the nice server listings ;) \nBut if you use this tool for connecting you can easily change every option that \nis set to start the OpenVPN process in a simple yaml configuration file, or \njust keep them that way if your glad with the defaults. Honestly the defaults \nshould cover most use cases.\n\n## Dependencies\n\n- resolvconf\n- iptables\n- openvpn\n\n## Quick start guide\n\n- Follow Installation instructions below\n- (Optional) Copy everything within your python `site-packages/connord/config/` folder\n to `/etc/connord`. For example python3.7:\n\n
\n      sudo cp -r /lib/python3.7/site-packages/connord/config /etc/connord\n      sudoedit /etc/connord/config.yml\n  
\n\n- (Optional) Customize `config.yml` either in `site-packages` or `/etc/connord` if\n you've taken the optional step above.\n- Depending on your current iptables rules you may need to run \n `$ sudo connord iptables flush`.\n- Get the openvpn configuration files for nordvpn with `$ sudo connord update`.\n Files are installed in `/etc/openvpn/client/nordvpn` per default.\n- Execute `$ sudo connord connect -c YOUR_COUNTRY_CODE` and replace\n YOUR\\_COUNTRY\\_CODE with the\n [ISO_3166-1_alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country\n code of your current country. You will be asked for your username and password\n which are stored under `/etc/openvpn/client/nordvpn/credentials` with mode\n `0600`.\n\n## Installation\n\nFirst make sure you have all system dependencies installed.\n\n#### Ubuntu/Debian\n\n $ sudo apt-get install resolvconf iptables openvpn\n\n#### Arch\n\n $ sudo pacman -Sy openresolv iptables openvpn\n\n#### Installation of CønNørD\n\n $ pip install --upgrade connord\n\nor globally:\n\n $ sudo pip install --upgrade connord\n\nYou may also clone the repo\n\n $ git clone git@github.com:MaelStor/connord.git\n $ cd connord\n\nand install in userspace with\n\n $ pip install --user .\n\nor globally with\n\n $ sudo pip install .\n\n## General section\n\nCønNørD per default doesn't output anything on stdout and behaves like\nany other standard command-line tool. If you experience problems running \nconnord, try the same command in verbose mode\n with\n\n connord -v COMMAND\n\nor\n\n connord --verbose COMMAND\n\nfor debugging purposes. You should see in most cases where the error occurred. \nThere may be still hard to track bugs, please report them to the Issue board on \n[Github](https://github.com/MaelStor/connord/issues).\n\nError messages are written to stderr in your shell. You can suppress error \nmessages with `-q` or `--quiet` if you like to.\n\nVerbose mode of `openvpn` can be set in `config.yml` in the openvpn\nsection or at the command-line when using `connord connect` adding it to the\nopenvpn command with `-o '--verb 3'`.\n\n## Obfuscated servers\n\nIn order to be able to connect to obfuscated servers you need to\n[patch](https://github.com/clayface/openvpn_xorpatch) OpenVPN. For example the\nrepository of [Tunnelblick](https://github.com/Tunnelblick/Tunnelblick) includes\nthe patches in third_party/sources/openvpn. How this can be done is described\n[here](https://www.reddit.com/r/nordvpn/comments/bsbxt6/how_to_make_nordvpn_obfuscated_servers_work_on/).\nI haven't patched my openvpn client, so I can't share experiences but above\nsolution is reported to work. Please don't post any issues around this topic on \nthe issue board of CønNørD.\n\nYou can list obfuscated servers with `$ connord list servers -t obfuscated`.\nSame scheme to finally connect to an obfuscated server for example located in\nHongKong: `$ sudo connord connect -c hk -t obfuscated`.\n\nYou will be warned by connord if you try to connect to an obfuscated server, to\nprevent accidential connection, what fails if you haven't patched the openvpn\nclient. For example:\n\n
\n$ connord connect -c hk -t obfuscated\nWARNING: hk67.nordvpn.com is an obfuscated server.\nThis may fail if not configured properly.\nAre you sure you want to continue? (y/N): y\nOptions error: Unrecognized option or missing or extra parameter(s) in /tmp/ovpn.conf:24: scramble (2.4.7)\nUse --help for more information.\nconnord: Running openvpn failed: Openvpn process stopped unexpected.\n
\n\n## Configuration\n\nDefault configuration files are located in your python\n`site-packages/connord/config` folder. You may wish to create an more permanent\nlocation and copy them to `/etc/connord/`. The folder needs to be created if not\nalready done. Configuration files in site-packages don't survive an upgrade in\ncontrast to `/etc/connord`. If the `/etc/connord` folder exists no configuration\nfiles in `site-packages` are read.\n\nTo see which configuration folder is active run `connord --verbose version`.\n\n#### config.yml\n\nThe main configuration file in [YAML](https://yaml.org/) format. Every variable\nset here is exposed to .rules and .fallback templates.\n\n###### iptables\n\nSo you may set something like this\n\n
\niptables\n  dns:\n    # NordVPN\n    - '103.86.99.100/32'\n    - '103.86.96.100/32'\n
\n\nand use it for example in 01-filter.rules:\n\n
\nOUTPUT:\n  policy: ACCEPT\n  action: None\n  rules:\n{% for server in iptables.dns %}\n  - dst: \"{{ server }}\"\n    protocol: udp\n    udp:\n      dport: '53'\n    target: ACCEPT\n{% endfor %}\n
\n\nwhat creates the following after rendering:\n\n
\nOUTPUT:\n  policy: ACCEPT\n  action: None\n  rules:\n  - dst: '103.86.99.100/32'\n    protocol: udp\n    udp:\n      dport: '53'\n    target: ACCEPT\n  - dst: '103.86.96.100/32'\n    protocol: udp\n    udp:\n      dport: '53'\n    target: ACCEPT\n
\n\nLike it? See more examples in the rules and fallback files section.\n\n###### openvpn\n\nThese are the default settings to start OpenVPN:\n\n
\nopenvpn:\n  daemon: False\n  auth-user-pass: \"built-in\"\n  auth-nocache: False\n  auth-retry: \"nointeract\"\n  down-pre: True\n  redirect-gateway: True\n  script-security: 2\n  # This section is special to connord and can't be found in the openvpn manual\n  scripts:\n    - name: \"up\"\n      path: \"built-in\"\n      stage: \"up\"\n      creates: \"up.env\"\n    - name: \"down\"\n      path: \"built-in\"\n      stage: \"down\"\n      creates: \"down.env\"\n    - name: \"ipchange\"\n      path: \"built-in\"\n      stage: \"always\"\n      creates: \"ipchange.env\"\n
\n\nFor an overview of all possible options see `$ man openvpn`. You just need to\nstrip off the leading '--' and place it somewhere in the openvpn section.\nArguments are written after `:` or if the option doesn't take any\narguments place `True` after `:`. Most common mistake is to ignore\nindentation. But since this is a yaml file indentation IS important. Further\nreading about [YAML Syntax](https://yaml.org/spec/1.1/spec.html). There's\nthe special keyword `built-in` around what can be applied to:\n\n- auth-user-pass\n- scripts paths\n - name: up\n - name: down\n - name: ipchange\n\nif you like to use the built-in paths, what is the default behaviour. If you\ndon't like to run a script say when openvpn goes down delete or comment out\n\n
\n    - name: \"down\"\n      path: \"built-in\"\n      stage: \"down\"\n      creates: \"down.env\"\n
\n\n## Iptables\n\n#### rules and fallback files\n\nThese files are [jinja2](http://jinja.pocoo.org/docs/2.10/) templates which are\nrendered with the `config.yml` file and .env files created by the built-in `up`,\n`down` and `ipchange` scripts when openvpn starts running.\n\n###### Naming scheme\n\nThe naming scheme is important. Let's take for example the rules file\nwhich shall be applied to netfilters `filter` table. `01-filter.rules`.\nThe leading number isn't necessary but you can control the order when to apply\nthe files that way. After the dash `-` follows the table name. The dash isn't\nneeded when there is no leading number.\nThe suffix `.rules` causes the rules to be applied after successfully\nestablishing a connection to a server. The suffix `.fallback` causes the rules to be applied when disconnecting from a server or\nafter invokation of `connord iptables flush`. If you're writing ipv6 rules for\nthe `filter` table place them in a file like `01-filter6.rules` or\n`01-filter6.fallback`. Files with a `6` suffix are applied to ip6tables.\n\n#### Variables\n\nEvery variable you define or is already defined in `config.yml` is available in\nrules and fallback files. In addition to that the connord instance exposes the\nfollowing variables to `.rules` and `.fallback` files:\n\n
\nvpn_remote      # the remote server ip address\nvpn_protocol    # the protocol in use: udp or tcp\nvpn_port        # may be 1194 (udp) or 443 (tcp)\n\ngateway:\n  ip_address    # the ip_address of the default gateway \n  interface     # the interface of the default gateway\n\nlan:            # derived from the default gateway's interface\n  inet:         # short for AF_INET\n  - addr:       # the ip address of your LAN\n    netmask:    # the netmask for your LAN\n    broadcast:  # the broadcast address of your ipv4 LAN\n  inet6:        # actually derived from AF_INET6\n  - addr:       # (mostly one of) the ipv6 addressess\n    netmask:    # the netmask for you LAN\n  link:         # short for AF_LINK\n  - addr:       # the MAC address of your LAN card\n    broadcast:  # the broadcast address. Should be in most cases\n                  ff:ff:ff:ff:ff:ff\n
\n\nIn `fallback` files `vpn_remote` is `0.0.0.0/0`, `vpn_protocol` is `udp` and\n`vpn_port` is set to `1194`. Be aware that there can be more than one `inet` or\n`inet6` addresses.\n\nVariables exposed from OpenVPN scripts can be seen when starting connord\nnot in daemon mode. The list given here may be incomplete or too exhaustive for\nyour network and is therfor just an incomplete overview. Look at the output of \nconnord for your environment.\n\n
\nconnord 'ipchange' enviroment variables: '/var/run/connord/ipchange.env'\nipchange_args:\n  - '[AF_INET]100.100.100.100 1194'\n  - '/var/run/connord/ipchange.env'\nip_address: '100.100.100.100'\nport_number: '1194'\ntrusted_ip: '100.100.100.100'\ntrusted_port: '1194'\nuntrusted_ip: '100.100.100.100'\nuntrusted_port: '1194'\n
\n\n
\nconnord 'up' enviroment variables: '/var/run/connord/up.env'\nup_args:\n  - 'init'\n  - '255.255.255.0'\n  - '10.8.1.10'\n  - '1590'\n  - '1500'\n  - 'tun1'\n  - '/var/run/connord/up.env'\ndhcp_option:\n  dns:\n    - '103.86.99.100'\n    - '103.86.96.100'\ndev: 'tun1'\nifconfig_broadcast: '10.8.1.255'\nifconfig_local: '10.8.1.10'\nifconfig_netmask: '255.255.255.0'\nlink_mtu: '1590'\nroute_net_gateway: '200.200.200.200'\nroute_vpn_gateway: '10.8.1.1'\nscript_context: 'init'\ntun_mtu: '1500'\ntrusted_ip: '100.100.100.100'\ntrusted_port: '1194'\nuntrusted_ip: '100.100.100.100'\nuntrusted_port: '1194'\n
\n\n
\nconnord 'down' enviroment variables: '/var/run/connord/down.env'\ndown_args:\n  - 'init'\n  - '255.255.255.0'\n  - '10.8.1.10'\n  - '1590'\n  - '1500'\n  - 'tun1'\n  - '/var/run/connord/down.env'\ndhcp_option:\n  dns:\n    - '103.86.99.100'\n    - '103.86.96.100'\ndev: 'tun1'\nifconfig_broadcast: '10.8.1.255'\nifconfig_local: '10.8.1.10'\nifconfig_netmask: '255.255.255.0'\nlink_mtu: '1590'\nroute_net_gateway: '200.200.200.200'\nroute_vpn_gateway: '10.8.1.1'\nscript_context: 'init'\ntun_mtu: '1500'\ntrusted_ip: '100.100.100.100'\ntrusted_port: '1194'\nuntrusted_ip: '100.100.100.100'\nuntrusted_port: '1194'\nredirect_gateway: '1'\n
\n\nVariables from OpenVPN scripts are only available in `.rules` files!\n\n## Overview over the most important command-line options\n\nCommand-line options overwrite the configuration in `config.yml`\n\n#### Main options\n\n
\nusage: connord [-h] [-q | -v] {update,list,connect,kill,iptables,version} ...\n\nC\u00f8nN\u00f8rD connects you to NordVPN servers with OpenVPN (https://openvpn.net) and\nyou can choose between a high amount of possible filters, to make it easy for\nyou to connect to servers with the best performance and features the server\noffers to you. It's taken care that your DNS isn't leaked.\n\npositional arguments:\n  {update,list,connect,kill,iptables,version}\n    update              Update nordvpn configuration files and the location\n                        database.\n    list                List features, types, ... and servers.\n    connect             Connect to a server.\n    kill                Kill the openvpn process.\n    iptables            Manage iptables.\n    version             Show version\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -q, --quiet           Suppress error messages.\n  -v, --verbose         Show what's going.\n\nRun a command with -h or --help for more information.\n
\n\n#### Listings\n\n
\nusage: connord list [-h] {iptables,countries,areas,features,types,servers} ...\n\nThe 'list' command allows some powerful filtering so you can select a server\ntailored to your demands. 'types', 'features', 'areas', 'countries' give you\nan overview output of possible arguments to the respective flag.\n\npositional arguments:\n  {iptables,countries,areas,features,types,servers}\n    iptables            List rules in netfilter tables. With no arguments list\n                        ipv4 'filter' table.\n    countries           List all countries with NordVPN servers.\n    areas               List all areas/cities with NordVPN servers.\n    features            List all possible features of NordVPN servers.\n    types               List all possible types/categories of NordVPN servers.\n    servers             List servers filtered by specified arguments.\n\noptional arguments:\n  -h, --help            show this help message and exit\n\nRun a command with -h or --help for more information.\n
\n\n###### servers\n\n
\nusage: connord list servers [-h] [-c COUNTRY] [-a AREA] [-f FEATURE] [-t TYPE]\n                            [--netflix]\n                            [--max-load MAX_LOAD | --min-load MIN_LOAD | --load LOAD]\n                            [--top TOP]\n\nList servers filtered by one or more of the specified arguments. If no\narguments are given list all NordVPN servers. To see possible values for\n--area, --country, --feature and --type have a look at the respective 'list'\ncommands.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -c COUNTRY, --country COUNTRY\n                        Select a specific country. May be specified multiple\n                        times.\n  -a AREA, --area AREA  Select a specific area. May be specified multiple\n                        times.\n  -f FEATURE, --feature FEATURE\n                        Select servers with a specific list of features. May\n                        be specified multiple times.\n  -t TYPE, --type TYPE  Select servers with a specific type. May be specified\n                        multiple times.\n  --netflix             Select servers configured for netflix.\n  --max-load MAX_LOAD   Filter servers by maximum load.\n  --min-load MIN_LOAD   Filter servers by minimum load.\n  --load LOAD           Filter servers by exact load match.\n  --top TOP             Show TOP count resulting servers.\n
\n\n#### Update NordVPN server configuration files and the location database\n\n
\nusage: connord update [-h] [-f]\n\noptional arguments:\n  -h, --help   show this help message and exit\n  -f, --force  Force update no matter of configuration.\n
\n\n#### Connect to NordVPN servers\n\n
\nusage: connord connect [-h] [-s SERVER | -b] [-c COUNTRY] [-a AREA]\n                       [-f FEATURE] [-t TYPE] [--netflix]\n                       [--max-load MAX_LOAD | --min-load MIN_LOAD | --load LOAD]\n                       [-d] [-o OPENVPN_OPTIONS] [--udp | --tcp]\n\nConnect to NordVPN servers. You may specify a single server of your choice\nwith -s SERVER, where SERVER is a COUNTRY_CODE followed by a number. This must\nbe a SERVER for which a configuration file exists. The same filters --area,\n--country ... like in the 'list' command can be applied here. For a list of\npossible values see the respective command in the 'list' command. \n\noptional arguments:\n  -h, --help            show this help message and exit\n  -s SERVER, --server SERVER\n                        Connect to a specific server. Only -d, -o, --udp and\n                        --tcp have an effect.\n  -b, --best            Use best server depending on server load. When\n                        multiple servers got the same load use the one with\n                        the best ping. This is the default behaviour if not\n                        specified on the command-line\n  -c COUNTRY, --country COUNTRY\n                        Select a specific country. May be specified multiple\n                        times.\n  -a AREA, --area AREA  Select a specific area. May be specified multiple\n                        times.\n  -f FEATURE, --feature FEATURE\n                        Select servers with a specific feature. May be\n                        specified multiple times.\n  -t TYPE, --type TYPE  Select servers with a specific type. May be specified\n                        multiple times.\n  --netflix             Select servers configured for netflix.\n  --max-load MAX_LOAD   Filter servers by maximum load.\n  --min-load MIN_LOAD   Filter servers by minimum load.\n  --load LOAD           Filter servers by exact load match.\n  -d, --daemon          Start in daemon mode.\n  -o OPENVPN_OPTIONS, --openvpn OPENVPN_OPTIONS\n                        Options to pass through to openvpn as single string\n  --udp                 Use UDP protocol. This is the default\n  --tcp                 Use TCP protocol. Only one of --udp or --tcp may be\n                        present.\n
\n\n#### Manage IPTables\n\n
\nusage: connord iptables [-h] {list,reload,flush,apply} ...\n\nManage your iptables configuration with this command. Under normal\ncirumstances your rules files are automatically applied when running\n'connect'. If somethings going wrong or you are modifying rules you can try\none of the commands defined here. You can list your current iptables rules\nwith the 'list' command as an alternative to the native iptables -L -vn\n--line-num.\n\npositional arguments:\n  {list,reload,flush,apply}\n    reload              Reload iptables configuration.\n    flush               Flush iptables.\n    apply               Apply iptables rules per 'table'.\n\noptional arguments:\n  -h, --help            show this help message and exit\n\nRun a command with -h or --help for more information.\n
\n\n## Supported FEATUREs:\n\n
\nikev2                     IKEv2/IPSec Protocol\nopenvpn_udp               UDP\nopenvpn_tcp               TCP\nsocks                     Socks 5\nproxy                     HTTP Proxy\npptp                      PPTP\nl2tp                      L2TP/IPSec\nopenvpn_xor_udp           OpenVPN UDP Obfuscated\nopenvpn_xor_tcp           OpenVPN TCP Obfuscated\nproxy_cybersec            HTTP Proxy CyberSec\nproxy_ssl                 HTTP Proxy (SSL)\nproxy_ssl_cybersec        HTTP CyberSec Proxy (SSL)\nikev2_v6                  IKEv2/IPSec IPv6\nopenvpn_udp_v6            UDPv6\nopenvpn_tcp_v6            TCPv6\nwireguard_udp             WireGuard UDP\nopenvpn_udp_tls_crypt     UDP TLS encryption\nopenvpn_tcp_tls_crypt     TCP TLS encryption\n
\n\n## Supported TYPEs:\n\n
\ndouble                    Double VPN\ndedicated                 Dedicated IP\nstandard                  Standard VPN servers\np2p                       P2P\nonion                     Onion Over VPN\n
\n\n\n## Developing\n\nClone the repo and install the development environment:\n\n $ git clone git@github.com:MaelStor/connord.git\n $ cd connord\n $ make venv\n $ . .venv/bin/activate\n\nYou should be good to go from here. If you already have a virtualenv for connord\nthen executing `make develop` is sufficient.\n\n\n", "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/MaelStor/connord", "keywords": "linux network system firewall utility tool console shell terminal nordvpn vpn security privacy openvpn iptables dynamic fast", "license": "GPL-3.0-or-later", "maintainer": "", "maintainer_email": "", "name": "connord", "package_url": "https://pypi.org/project/connord/", "platform": "", "project_url": "https://pypi.org/project/connord/", "project_urls": { "Homepage": "https://github.com/MaelStor/connord" }, "release_url": "https://pypi.org/project/connord/0.1.5/", "requires_dist": [ "requests (<3.0.0,>=2.22.0)", "cachetools (<4.0.0,>=3.1.1)", "Jinja2 (<3.0.0,>=2.10.1)", "netaddr (<1.0.0,>=0.7.19)", "PyYAML (<6.0,>=5.1)", "python-iptables (<1.0.0,>=0.14.0)", "progress (<2.0,>=1.5)", "netifaces (<1.0.0,>=0.10.9)" ], "requires_python": ">=3.6", "summary": "Connect to NordVPN servers secure with Iptables and fast with OpenVPN", "version": "0.1.5" }, "last_serial": 5949828, "releases": { "0.1.0a1": [ { "comment_text": "", "digests": { "md5": "273d5898f4d200429a7c587166aa1b74", "sha256": "d8febd4c50d18dc7e85a006b28a5fa68d4c6ff13e7960776f5a94824af7a591f" }, "downloads": -1, "filename": "connord-0.1.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "273d5898f4d200429a7c587166aa1b74", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 50264, "upload_time": "2019-06-06T23:03:34", "url": "https://files.pythonhosted.org/packages/3e/cd/6a6d3bb80863e1a37dd8567c88a9ccbcd970c711e60ca36f3e59022b9683/connord-0.1.0a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4d347e57c331506e3d4e071e1aef3d8", "sha256": "80e8568f8d8d2835fdfed612aad07669966fada897dbe4be8ee820f03fa32783" }, "downloads": -1, "filename": "connord-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "b4d347e57c331506e3d4e071e1aef3d8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 38558, "upload_time": "2019-06-06T23:03:36", "url": "https://files.pythonhosted.org/packages/ea/24/68bf1ad0823bee16febb6b6705abaad6b0736526538be78fa12da694bcb0/connord-0.1.0a1.tar.gz" } ], "0.1.0a2": [ { "comment_text": "", "digests": { "md5": "2aea42553e1955b6357a5a76afaa006c", "sha256": "48fede6912271433e774253ddc5d470c5e5520c0d2210d471c5c7b3dafbd10a4" }, "downloads": -1, "filename": "connord-0.1.0a2-py3-none-any.whl", "has_sig": false, "md5_digest": "2aea42553e1955b6357a5a76afaa006c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 52038, "upload_time": "2019-06-07T01:21:44", "url": "https://files.pythonhosted.org/packages/5b/d7/cf9751bc7b697c6b04b9bf4e18a5b48424e11b1b34db1750553011f71753/connord-0.1.0a2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b3c3c906e0a007f16b258366ccb26af", "sha256": "e4481824ea26f26969a40f5e3cfbad571a9ca75c3be9db6eee7918e2c6de0712" }, "downloads": -1, "filename": "connord-0.1.0a2.tar.gz", "has_sig": false, "md5_digest": "7b3c3c906e0a007f16b258366ccb26af", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 42496, "upload_time": "2019-06-07T01:21:46", "url": "https://files.pythonhosted.org/packages/11/4b/4933589d55fe1d663197cb24bc3346e3fcba6e72ec5d152788a0c869779f/connord-0.1.0a2.tar.gz" } ], "0.1.0a3": [ { "comment_text": "", "digests": { "md5": "5ec70e30a2889cd3444488d0917abb8a", "sha256": "d8468b010ddfbf8a02f5e4b054eda059f60a616b39ea4f79a5908ee8144c1e5c" }, "downloads": -1, "filename": "connord-0.1.0a3-py3-none-any.whl", "has_sig": false, "md5_digest": "5ec70e30a2889cd3444488d0917abb8a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 52083, "upload_time": "2019-06-08T07:39:30", "url": "https://files.pythonhosted.org/packages/eb/79/e04d01401d98e1f0778f3f7a527b8d49e8ba0ab9c6dfa1543af2adbc3e4e/connord-0.1.0a3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8af8d3502605921af7152182122cb7f5", "sha256": "753ddaac4c70ec8e185cc194ff05b69a5a97a43e788a605ff6a0b8c2c57b0251" }, "downloads": -1, "filename": "connord-0.1.0a3.tar.gz", "has_sig": false, "md5_digest": "8af8d3502605921af7152182122cb7f5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 42565, "upload_time": "2019-06-08T07:39:32", "url": "https://files.pythonhosted.org/packages/c6/8e/03650022fb36deebb2d667a6a6a15edd70e4b78c4013804d727202f35994/connord-0.1.0a3.tar.gz" } ], "0.1.0a4": [ { "comment_text": "", "digests": { "md5": "f739761adce9fa4f6b7d60f01fe6a482", "sha256": "30942c9ab63bc9455c31fc107ed928b37049929136ce6975d3a9670bfe93cc3d" }, "downloads": -1, "filename": "connord-0.1.0a4-py3-none-any.whl", "has_sig": false, "md5_digest": "f739761adce9fa4f6b7d60f01fe6a482", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 52683, "upload_time": "2019-06-08T20:58:02", "url": "https://files.pythonhosted.org/packages/1f/c9/e86e1802d6a78fe38afbeb8b82f62208790d36405e94ace99345dd2387c7/connord-0.1.0a4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ffbda03bd127cb6a08fa2accba29c93", "sha256": "61872e2076eb17c4db704acbaf63ba3ff9e6cea08c252e39211891d41a957e8f" }, "downloads": -1, "filename": "connord-0.1.0a4.tar.gz", "has_sig": false, "md5_digest": "8ffbda03bd127cb6a08fa2accba29c93", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 43130, "upload_time": "2019-06-08T20:58:04", "url": "https://files.pythonhosted.org/packages/03/e3/5fdfa177021c983574660ab9bdb3431c6264e78d417dcfb83f356931917e/connord-0.1.0a4.tar.gz" } ], "0.1.0b0": [ { "comment_text": "", "digests": { "md5": "c19ad979fde66b1f1c14595b2c3679bb", "sha256": "577a54d88abefffbc2c43eb6553218326658ca98975021eed0c0851c7e815b22" }, "downloads": -1, "filename": "connord-0.1.0b0-py3-none-any.whl", "has_sig": false, "md5_digest": "c19ad979fde66b1f1c14595b2c3679bb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 56096, "upload_time": "2019-06-09T23:14:36", "url": "https://files.pythonhosted.org/packages/a0/fd/0c8149e99cd35b9d62cbd0dac964ba540a4bf1f26884b5e639861819e4c0/connord-0.1.0b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a13798b2e49fb9443ec53f6553d30af1", "sha256": "fa94512254d49e9461abae24c9eb99df1594a29c69368574797cd34947a8294c" }, "downloads": -1, "filename": "connord-0.1.0b0.tar.gz", "has_sig": false, "md5_digest": "a13798b2e49fb9443ec53f6553d30af1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 44582, "upload_time": "2019-06-09T23:14:38", "url": "https://files.pythonhosted.org/packages/0f/2c/46a4b0a83ed788003945cdb6012961c1fdcf64bfc1c97811734f6f7eed10/connord-0.1.0b0.tar.gz" } ], "0.1.0b1": [ { "comment_text": "", "digests": { "md5": "a09043cb7e6ae915ad627244f59976df", "sha256": "22911ba1f68b6899b935114523066b521d3343cc4e6514322d40dfd3aceef3d0" }, "downloads": -1, "filename": "connord-0.1.0b1-py3-none-any.whl", "has_sig": false, "md5_digest": "a09043cb7e6ae915ad627244f59976df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 68052, "upload_time": "2019-06-12T00:01:33", "url": "https://files.pythonhosted.org/packages/fd/e7/baaf56298e23f5430897bcf317aaa550cb311e557980908759ce4aeace0c/connord-0.1.0b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16b65fe35b97592ad6bcd62d26d782a9", "sha256": "30e733c404bcc8967adad11dfcc1b5894cc05bbe3c252b34e30633bec711fa71" }, "downloads": -1, "filename": "connord-0.1.0b1.tar.gz", "has_sig": false, "md5_digest": "16b65fe35b97592ad6bcd62d26d782a9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 55801, "upload_time": "2019-06-12T00:01:35", "url": "https://files.pythonhosted.org/packages/42/54/8564d1eaaca9d9b367617ca8bacb9898feb66bde5bded4be526d01beb722/connord-0.1.0b1.tar.gz" } ], "0.1.0b2": [ { "comment_text": "", "digests": { "md5": "471564a41836759c0a6eb8ab81379adc", "sha256": "e9c4e3689128d602c2ece7a5529125d19a056ff49d4161b31d6a102be666ea3b" }, "downloads": -1, "filename": "connord-0.1.0b2-py3-none-any.whl", "has_sig": false, "md5_digest": "471564a41836759c0a6eb8ab81379adc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 74951, "upload_time": "2019-06-15T19:29:37", "url": "https://files.pythonhosted.org/packages/f0/66/775388cda21991939aa291e913a6d3f320a025702a4be9087e39e907e396/connord-0.1.0b2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1c6d24a865c6e4d419eda201120a5cfb", "sha256": "e1ce2b50cdbe32de4c90ffff76cf72310fcff43ce7531d93abcaa77e995e9510" }, "downloads": -1, "filename": "connord-0.1.0b2.tar.gz", "has_sig": false, "md5_digest": "1c6d24a865c6e4d419eda201120a5cfb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 60816, "upload_time": "2019-06-15T19:29:39", "url": "https://files.pythonhosted.org/packages/db/0b/19beb0c2144a1aa73ee5a28d71ff3e4bfd967f034a3f007953e1cae4168b/connord-0.1.0b2.tar.gz" } ], "0.1.0b3": [ { "comment_text": "", "digests": { "md5": "e838713a9d4b014bc3102e4f7e3de607", "sha256": "e508590f371f3f63465fd9e53b513a7584cac443909dd3d4aef7eb3e7e82bb1d" }, "downloads": -1, "filename": "connord-0.1.0b3-py3-none-any.whl", "has_sig": false, "md5_digest": "e838713a9d4b014bc3102e4f7e3de607", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 74932, "upload_time": "2019-06-15T19:52:44", "url": "https://files.pythonhosted.org/packages/e2/60/c8a037ea2c311c33dfd3e631346778ed39dc05cbaf3dcdf9c6d5dd84c055/connord-0.1.0b3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a2754c888ace2b21eb51f0dd95f9e11c", "sha256": "d119a14a4c3bf44b6084326ef809b475cf817f4fe4c7170da6d7cfb9ee7bd944" }, "downloads": -1, "filename": "connord-0.1.0b3.tar.gz", "has_sig": false, "md5_digest": "a2754c888ace2b21eb51f0dd95f9e11c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 60788, "upload_time": "2019-06-15T19:52:46", "url": "https://files.pythonhosted.org/packages/f8/37/6ca7bdc6b264bbd276a80bd236113ffe729e88f5aa742725f8ac7b0d9579/connord-0.1.0b3.tar.gz" } ], "0.1.0b4": [ { "comment_text": "", "digests": { "md5": "d7c1befe8f2e3a7bae07920146edce7e", "sha256": "3eb3fc597babeb59e889a25555195ca8924478084523a5fc80737774e984eb2f" }, "downloads": -1, "filename": "connord-0.1.0b4-py3-none-any.whl", "has_sig": false, "md5_digest": "d7c1befe8f2e3a7bae07920146edce7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 75244, "upload_time": "2019-06-15T23:55:31", "url": "https://files.pythonhosted.org/packages/e6/5e/76e4fce69c0401733187d78ef1c3a25889ef83cf13084951131ba4d19613/connord-0.1.0b4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "30009a0af91c4d57dc30fe28acccbe9b", "sha256": "a8685b3ee196d51c87ea0cbaf1eaaf171961b26bb2be9deab907567a8c5d6dba" }, "downloads": -1, "filename": "connord-0.1.0b4.tar.gz", "has_sig": false, "md5_digest": "30009a0af91c4d57dc30fe28acccbe9b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 61116, "upload_time": "2019-06-15T23:55:33", "url": "https://files.pythonhosted.org/packages/6d/ba/edff2b155df146646e44dbe0e1a7fed66862e1d1c424882c2e7041cab00a/connord-0.1.0b4.tar.gz" } ], "0.1.0b5": [ { "comment_text": "", "digests": { "md5": "d07a4a0a4e78f27133b35623a5d538c7", "sha256": "55f328be8db370214f1441c7068978c42e0ff26b1b6080f16c384b9c107fce77" }, "downloads": -1, "filename": "connord-0.1.0b5-py3-none-any.whl", "has_sig": false, "md5_digest": "d07a4a0a4e78f27133b35623a5d538c7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 75286, "upload_time": "2019-06-16T14:28:07", "url": "https://files.pythonhosted.org/packages/3b/8e/45f5c4ae14d70e810579805318bc3b2344eeee4f7911d9eea73b280f0a37/connord-0.1.0b5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f42c20d8afb5e75bc9ad7132f6668141", "sha256": "edd7f1e9e3dd085278390ef99ff7c6946103f563c4022f232276748b7084c1b7" }, "downloads": -1, "filename": "connord-0.1.0b5.tar.gz", "has_sig": false, "md5_digest": "f42c20d8afb5e75bc9ad7132f6668141", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 61164, "upload_time": "2019-06-16T14:28:09", "url": "https://files.pythonhosted.org/packages/c9/37/24037209fd42edcb34283a326cbac44eb4365bd3100507600171e52d4ced/connord-0.1.0b5.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "9642c5310280465a9f1af2da3cc13772", "sha256": "455bb3f397684562de842c6647b7fbd9d438bc9a41d36eedd7e30ff56a767620" }, "downloads": -1, "filename": "connord-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9642c5310280465a9f1af2da3cc13772", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 84893, "upload_time": "2019-06-26T02:31:45", "url": "https://files.pythonhosted.org/packages/1b/16/13603694614198d4d5094c95340af55f81be4af3f2e8820685cca075fcb8/connord-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af5fe89b5cf7f33802a98c2d8c8f99c0", "sha256": "9d7db594810827d0888e3aa693c368f0e76668c787207225c3564ae3c3406f96" }, "downloads": -1, "filename": "connord-0.1.1.tar.gz", "has_sig": false, "md5_digest": "af5fe89b5cf7f33802a98c2d8c8f99c0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 72067, "upload_time": "2019-06-26T02:31:47", "url": "https://files.pythonhosted.org/packages/0c/7a/a72070ffc49be64cff5155f84aa81425855b8e6f7638d44033668450f283/connord-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "09df5134fa558d8678a71cc52041079d", "sha256": "717bd11f18381c4644b05a753306dc2fe6c025ed4add019e38e9959988a84e0c" }, "downloads": -1, "filename": "connord-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "09df5134fa558d8678a71cc52041079d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 85498, "upload_time": "2019-06-26T17:32:24", "url": "https://files.pythonhosted.org/packages/d9/3c/50dc866757ea861feb4a49819f11fdafcfd7f42c810056b9b7c311b68218/connord-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "774067631b4e3b53a93a19268304831e", "sha256": "2b2d48d60b0ac13880bc9160efadfcacbbe233243cc49adde6e5f19e8838ce27" }, "downloads": -1, "filename": "connord-0.1.2.tar.gz", "has_sig": false, "md5_digest": "774067631b4e3b53a93a19268304831e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 72463, "upload_time": "2019-06-26T17:32:26", "url": "https://files.pythonhosted.org/packages/4b/93/24e383b59bf08cf61a0bf3aca41d1401e9096d707184dc50e0084c120a22/connord-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "96af54df7cbd2ae4bb717cb7aaae75d8", "sha256": "11ccc20d6e27e42a696c1c722dc0757aaf4d66e5fc0d469a4853087a4156e2ea" }, "downloads": -1, "filename": "connord-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "96af54df7cbd2ae4bb717cb7aaae75d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 90465, "upload_time": "2019-06-28T00:20:11", "url": "https://files.pythonhosted.org/packages/bc/a8/ba4329ba5bd54359aadc75918efafe75eaf374177794ccb9c4a8a75e0f54/connord-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d457229e4b05fee3eebc0749a556bac", "sha256": "ba3f65a904d29acc3dfda34a49c5f8d673bde2a2c753544428f17e885f764382" }, "downloads": -1, "filename": "connord-0.1.3.tar.gz", "has_sig": false, "md5_digest": "6d457229e4b05fee3eebc0749a556bac", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 77690, "upload_time": "2019-06-28T00:20:13", "url": "https://files.pythonhosted.org/packages/0c/bb/a3d81d342526ab08e733631df471ea6cfd319bda672431967666df942e90/connord-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "de80721a918fcf749ad9a3783be20d67", "sha256": "ea5952809f2ee54d946312125ff7637df00bf27db56574c50cf0a8f3e8cd67c0" }, "downloads": -1, "filename": "connord-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "de80721a918fcf749ad9a3783be20d67", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 91611, "upload_time": "2019-09-24T01:48:23", "url": "https://files.pythonhosted.org/packages/fe/36/d16a1c14c0633265d627fe7eab92cc89aaf559891ec40e600ac11fff693c/connord-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "761fad8bcf685d08c1e23f264915895d", "sha256": "d1f875e0407ce3d3a0b0d86355c96c5a31de672a92244fd7f2f13a451c44716f" }, "downloads": -1, "filename": "connord-0.1.4.tar.gz", "has_sig": false, "md5_digest": "761fad8bcf685d08c1e23f264915895d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 79443, "upload_time": "2019-09-24T01:48:25", "url": "https://files.pythonhosted.org/packages/91/67/faf3d1373b949bbaa5b7b3b5d1469565336131fe0172ed4ff2adeba5ac21/connord-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "2a39e17f69bf3611bc2e93353b99502a", "sha256": "a4764ca078908d294e5f05c79c8634276b6478009c6c7634c355dc9a3ba2d8b6" }, "downloads": -1, "filename": "connord-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2a39e17f69bf3611bc2e93353b99502a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 114991, "upload_time": "2019-10-09T13:31:54", "url": "https://files.pythonhosted.org/packages/5c/b9/a9ea77d02c604bd09d58f6bacbedebd697c2f1a52b90c36f48804a43fdd1/connord-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "770259c4a625dbf094bbc306453f8440", "sha256": "0b45744947753466f0d9ba44c220e3cff223f90f81104fe0d47272e4b0b2a96f" }, "downloads": -1, "filename": "connord-0.1.5.tar.gz", "has_sig": false, "md5_digest": "770259c4a625dbf094bbc306453f8440", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 101888, "upload_time": "2019-10-09T13:31:56", "url": "https://files.pythonhosted.org/packages/aa/d0/d623243c459c8f82bacfeca850f3d804b1bbf53d44e14ced894714021a09/connord-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2a39e17f69bf3611bc2e93353b99502a", "sha256": "a4764ca078908d294e5f05c79c8634276b6478009c6c7634c355dc9a3ba2d8b6" }, "downloads": -1, "filename": "connord-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2a39e17f69bf3611bc2e93353b99502a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 114991, "upload_time": "2019-10-09T13:31:54", "url": "https://files.pythonhosted.org/packages/5c/b9/a9ea77d02c604bd09d58f6bacbedebd697c2f1a52b90c36f48804a43fdd1/connord-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "770259c4a625dbf094bbc306453f8440", "sha256": "0b45744947753466f0d9ba44c220e3cff223f90f81104fe0d47272e4b0b2a96f" }, "downloads": -1, "filename": "connord-0.1.5.tar.gz", "has_sig": false, "md5_digest": "770259c4a625dbf094bbc306453f8440", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 101888, "upload_time": "2019-10-09T13:31:56", "url": "https://files.pythonhosted.org/packages/aa/d0/d623243c459c8f82bacfeca850f3d804b1bbf53d44e14ced894714021a09/connord-0.1.5.tar.gz" } ] }