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
138 lines
4.7 KiB
Python
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()
|