vanth/setup.py
Eli Ribble 393ef748cc Get OFX file upload working through celery
I switched to using ofxparse because my own parser wasn't up to snuff on
handling the download file that I got from my bank and I got sick of
maintaining my own because SGML is an ugly mess

This commit means that my automatic download won't work any more because
it's expecting to pass data through my own parser, which we're not going
to do any more. That's okay because my bank's OFX integration is
actually down anyways
2016-08-11 10:54:29 -06:00

138 lines
4.7 KiB
Python

import contextlib
import imp
import os
import re
import subprocess
from setuptools import setup
from setuptools.command.sdist import sdist
DATA_ROOTS = ['alembic']
PROJECT = 'vanth'
VERSION_FILE = 'vanth/version.py'
def _get_output_or_none(args):
try:
return subprocess.check_output(args).decode('utf-8').strip()
except subprocess.CalledProcessError:
return None
def _get_git_description():
return _get_output_or_none(['git', 'describe'])
def _get_git_branches_for_this_commit():
branches = _get_output_or_none(['git', 'branch', '-r', '--contains', 'HEAD'])
split = branches.split('\n') if branches else []
return [branch.strip() for branch in split]
def _is_on_releasable_branch(branches):
return any([branch == 'origin/master' or branch.startswith('origin/hotfix') for branch in branches])
def _git_to_version(git):
match = re.match(r'(?P<tag>[\d\.]+)-(?P<offset>[\d]+)-(?P<sha>\w{8})', git)
if not match:
version = git
else:
version = "{tag}.post0.dev{offset}".format(**match.groupdict())
return version
@contextlib.contextmanager
def write_version():
git_description = _get_git_description()
git_branches = _get_git_branches_for_this_commit()
version = _git_to_version(git_description) if git_description else None
if git_branches and not _is_on_releasable_branch(git_branches):
print("Forcing version to 0.0.1 because this commit is on branches {} and not a whitelisted branch".format(git_branches))
version = '0.0.1'
if version:
with open(VERSION_FILE, 'r') as version_file:
old_contents = version_file.read()
with open(VERSION_FILE, 'w') as version_file:
version_file.write('VERSION = "{}"\n'.format(version))
yield
if version:
with open(VERSION_FILE, 'w') as version_file:
version_file.write(old_contents)
def _get_version_from_file():
basedir = os.path.abspath(os.path.dirname(__file__))
root = imp.load_source('version', os.path.join(basedir, PROJECT, 'version.py'))
return root.VERSION
def _get_version_from_git():
git_description = _get_git_description()
git_branches = _get_git_branches_for_this_commit()
version = _git_to_version(git_description) if git_description else None
if git_branches and not _is_on_releasable_branch(git_branches):
print("Forcing version to 0.0.1 because this commit is on branches {} and not a whitelisted branch".format(git_branches))
version = '0.0.1'
return version
def get_version():
file_version = _get_version_from_file()
git_version = _get_version_from_git()
return (file_version == 'development' and git_version) or file_version
def get_data_files():
data_files = []
for data_root in DATA_ROOTS:
for root, _, files in os.walk(data_root):
data_files.append((os.path.join(PROJECT, root), [os.path.join(root, f) for f in files]))
return data_files
class CustomSDistCommand(sdist): # pylint: disable=no-init
def run(self):
with write_version():
sdist.run(self)
def main():
setup(
name = "vanth",
version = get_version(),
description = "A system for tracking expenses",
url = "https://github.com/EliRibble/vanth",
long_description = open('README.md', 'r').read(),
author = "Eli Ribble",
author_email = "junk@theribbles.org",
cmdclass = {
'sdist' : CustomSDistCommand,
},
install_requires = [
'chryso==1.7',
'Flask==0.10.1',
'flask-login==0.3.2',
'ofxparse==0.15',
'sepiida==5.27',
],
extras_require = {
'develop': [
'astroid==1.4.4',
'coverage==3.7.1',
'mothermayi>=0.4',
'mothermayi-isort>=0.8',
'mothermayi-pylint>=0.5',
'py==1.4.31',
'pylint==1.5.4',
'pytest==2.8.2',
'pytest-cov==1.8.1',
]
},
packages = [
"vanth",
"vanth.backend",
"vanth.pages",
"vanth.platform",
],
package_data = {
"vanth" : ["vanth/*"],
"vanth.backend" : ["vanth/backend/*"],
"vanth.pages" : ["vanth/pages/*"],
"vanth.platform" : ["vanth/platform/*"],
},
data_files = get_data_files(),
scripts = ["bin/vanth"],
include_package_data = True,
)
if __name__ == "__main__":
main()