Skip to content

Commit

Permalink
preview
Browse files Browse the repository at this point in the history
  • Loading branch information
yiban-su committed Mar 21, 2019
0 parents commit 96770d9
Show file tree
Hide file tree
Showing 5 changed files with 247 additions and 0 deletions.
114 changes: 114 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.dev
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

# IDE
/.idea
/.vscode

# fonts
/fonts/*.ttc
/fonts/*.otf
/fonts/*.ttf
Empty file added README.md
Empty file.
44 changes: 44 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env python
import setuptools
import io
import re


pkg_author = 'guyujiezi'
pkg_name = 'guyujiezi'
pkg_url = 'https://github.com/guyujiezi/python-sdk'
pkg_desc = 'SDK of GuYuJieZi for Python language'
pkg_requires = []
pkg_version = {}

with io.open('README.md', 'r', encoding='utf8') as f:
long_description = f.read()

with io.open('src/%s/version.py' % (pkg_name, ), 'r', encoding='utf8') as f:
exec(f.read(), pkg_version)

setuptools.setup(
author=pkg_author,
classifiers=[
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
description=pkg_desc,
include_package_data=True,
install_requires=pkg_requires,
license='MIT',
long_description=long_description,
long_description_content_type="text/markdown",
name=pkg_name,
packages=setuptools.find_packages('src'),
package_dir={'': 'src'},
url=pkg_url,
version=pkg_version['__version__'],
zip_safe=True
)
88 changes: 88 additions & 0 deletions src/guyujiezi/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
from __future__ import print_function, division, absolute_import
import json
import time
from hashlib import sha1
try:
from urllib2 import urlopen, Request, HTTPError, URLError
except ImportError:
from urllib.request import urlopen, Request
from urllib.error import HTTPError, URLError


class GuYuJieZi(object):
class Options(object):
font_name = None
font_formats = ['woff2', 'woff', 'eot', 'otf/ttf']

URL_ENCRYPT = 'https://guyujiezi.com/api/encrypt'
URL_NONCE = 'https://guyujiezi.com/api/nonce'
AUTH_TYPE = 'GYJZ'

def __init__(self, public_key, secret_key):
self.public_key = public_key
self.secret_key = secret_key
self._last_error = None

def _authorize(self):
nonce = '%f' % time.time()
signature = sha1(':'.join((self.public_key, self.secret_key, nonce)).encode()).hexdigest()
return '{type} pk={pk}, nonce={nonce}, sign={sign}'.format(
type=self.AUTH_TYPE,
pk=self.public_key,
nonce=nonce,
sign=signature
)

def _request(self, *args, **kwargs):
def jsonify(response):
try:
return json.loads(response.read().decode('utf8'))
except:
raise RuntimeError('Unexpected response')

try:
response = urlopen(*args, **kwargs)
payload = jsonify(response)
response.close()
return True, payload
except HTTPError as e:
if e.code >= 500:
raise RuntimeError('Service unavailable')
elif e.code >= 400:
return False, jsonify(e)
raise RuntimeError('Unexpected response')
except URLError:
raise RuntimeError('Service unavailable')

def encrypt(self, plaintext, shadowtext, options=None):
data = {
'plaintext': plaintext,
'shadowtext': shadowtext,
}
headers = {
'Content-Type': 'application/json',
'Authorization': self._authorize(),
}
request = Request(self.URL_ENCRYPT, json.dumps(data).encode(), headers, method='POST')
success, payload = self._request(request)

if not success:
self._last_error = payload
return False

return payload

@property
def last_error(self):
return self._last_error

def nonce(self):
success, payload = self._request(self.URL_NONCE)

if not success:
self._last_error = payload
return False

return payload.get('nonce')


1 change: 1 addition & 0 deletions src/guyujiezi/version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__version__ = '1.0.0'

0 comments on commit 96770d9

Please sign in to comment.