#!/usr/bin/env python

# Este script altera os arquivos requirements/*requirements.txt
# atualizando as versões fixadas neles para coincidirem com as do venv.
#
# Rode esse script após atualizar as dependências do venv usando, p. ex.:
# pip-review
#
# Após usá-lo confira sempre o resultado com `git diff` e teste as mudanças

import glob
import re
import subprocess

freeze_output = subprocess.Popen(
    'pip freeze', shell=True,
    stdout=subprocess.PIPE).stdout.read().decode('ascii')
freeze = freeze_output.strip().split('\n')
freeze = {name.lower(): version
          for name, version in [re.split('==+', s) for s in freeze]}
req_files = glob.glob('requirements/*requirements.txt')
requirements = [(f, open(f).read().strip().split('\n'))
                for f in req_files]


def novas_linhas(linhas):
    for linha in linhas:
        split = re.split('==', linha)
        if len(split) == 1:
            yield split[0]
        else:
            nome, versao = split
            nome = nome.lower()
            yield '%s==%s' % (nome, freeze[nome])


for arq, linhas in requirements:
    with open(arq, 'w') as f:
        f.writelines(l + '\n' for l in novas_linhas(linhas))