Add python bindings and package info

This commit is contained in:
Allard Stijnman 2016-03-16 11:55:45 +01:00
parent 0c92f9f80e
commit 748b86b901
4 changed files with 141 additions and 1 deletions

2
.gitignore vendored
View File

@ -26,3 +26,5 @@ node_modules
# Users Environment Variables
.lock-wscript
*.pyc

View File

@ -5,7 +5,7 @@
A database of free and [disposable](http://en.wikipedia.org/wiki/Disposable_email_address)
email domains and a handy Node.js module for querying it.
Use the Node.js module or access the files in the `./data` directory and parse
Install via npm or pip or access the files in the `./data` directory and parse
with your language of choice.
In an effort to create the most up-to-date list of domains, the database can be
@ -49,3 +49,23 @@ freemail.isDisposable('jack@mailinater.com');
> true
```
## Python
### Install
```
pip install freemail
```
```python
>>> import freemail
>>> freemail.is_free('jack@mailinater.com')
True
>>> freemail.is_free('jack@mailinater.com')
True
>>> freemail.is_disposable('smith@gmail.com')
False
>>> freemail.is_disposable('jack@mailinater.com')
True
```

35
freemail/__init__.py Normal file
View File

@ -0,0 +1,35 @@
import tldextract
import subprocess
free_file = './data/free.txt'
disp_file = './data/disposable.txt'
def is_free(email_address):
if not isinstance(email_address, str):
raise TypeError('email must be a string')
with open(free_file, 'r') as free, open(disp_file, 'r') as disposable:
domain_list = free.read().splitlines() + disposable.read().splitlines()
domain = tldextract.extract(email_address.split('@')[1]).registered_domain
return domain in domain_list
def is_disposable(email_address):
if not isinstance(email_address, str):
raise TypeError('email must be a string')
with open(disp_file, 'r') as disposable:
domain_list = disposable.read().splitlines()
domain = tldextract.extract(email_address.split('@')[1]).registered_domain
return domain in domain_list
def update():
try:
subprocess.call("./update", shell=True)
return True
except subprocess.CalledProcessError:
return False

83
setup.py Normal file
View File

@ -0,0 +1,83 @@
"""A setuptools based setup module.
See:
https://packaging.python.org/en/latest/distributing.html
https://github.com/pypa/sampleproject
"""
# Always prefer setuptools over distutils
from setuptools import setup
# To use a consistent encoding
from codecs import open
from os import path
here = path.abspath(path.dirname(__file__))
# Get the long description from the README file
with open(path.join(here, 'README.md'), encoding='utf-8') as f:
long_description = f.read()
setup(
name='freemail',
# Versions should comply with PEP440. For a discussion on single-sourcing
# the version across setup.py and the project code, see
# https://packaging.python.org/en/latest/single_source_version.html
version='1.2.0',
description='A database of free and disposable email domains',
long_description=long_description,
# The project's main homepage.
url='https://github.com/wearespindle/freemail',
download_url='https://github.com/wearespindle/freemail',
# Author details
author='Devhouse Spindle',
author_email='info@wearespindle.com',
# See https://pypi.python.org/pypi?%3Aaction=list_classifiers
classifiers=[
# How mature is this project?
# 1 - Planning
# 2 - Pre-Alpha
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
# 6 - Mature
# 7 - Inactive
'Development Status :: 4 - Beta',
# Indicate who your project is intended for
'Intended Audience :: Developers',
# Specify the Python versions you support here. In particular, ensure
# that you indicate whether you support Python 2, Python 3 or both.
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3.4',
],
# What does your project relate to?
keywords='email',
# You can just specify the packages manually here if your project is
# simple. Or you can use find_packages().
packages=['freemail', ],
data_files=[
('freemail', ['update', ]),
('freemail/data', ['data/free.txt', 'data/disposable.txt', ]),
],
# List run-time dependencies here. These will be installed by pip when
# your project is installed. For an analysis of "install_requires" vs pip's
# requirements files see:
# https://packaging.python.org/en/latest/requirements.html
install_requires=[
'tldextract'
],
# List additional groups of dependencies here (e.g. development
# dependencies). You can install these using the following syntax,
# for example:
# $ pip install -e .[dev,test]
extras_require={},
test_suite=''
)