sbin/create_python_env.py
author ymh <ymh.work@gmail.com>
Mon, 31 May 2010 11:14:39 +0200
changeset 32 e28089cee66c
parent 31 a727d83c8f88
child 33 b25bb1dd177c
permissions -rw-r--r--
update python env script
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
"""
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
     2
Call this like ``python fassembler/create_python_env.py``; it will
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
     3
refresh the blinkster-boot.py script
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
     4
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
     5
-prerequisite:
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
     6
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
     7
- virtualenv
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
     8
- distribute
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
     9
- psycopg2 requires the PostgreSQL libpq libraries and the pg_config utility
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    10
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    11
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
"""
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
import os
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
import subprocess
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
import re
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
here = os.path.dirname(os.path.abspath(__file__))
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
base_dir = os.path.dirname(here)
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
script_name = os.path.join(base_dir, 'blinkster-boot.py')
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
import virtualenv
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
# things to install
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
# - psycopg2
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
# - PIL
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
# - pylucene
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
# - pyxml
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
# - 4Suite-xml
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
EXTRA_TEXT = """
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
import shutil
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    34
import tarfile
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    35
import urllib
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
def extend_parser(parser):
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    parser.add_option(
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        '--svn',
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        metavar='DIR_OR_URL',
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        dest='fassembler_svn',
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        default=FASS_SVN_LOCATION,
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        help='Location of a svn directory or URL to use for the installation of fassembler')
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
def adjust_options(options, args):
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    if not args:
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        return # caller will raise error
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
    
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    # We're actually going to build the venv in a subdirectory
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    base_dir = args[0]
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    51
    if len(args) > 1:
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    52
        venv_name = args[1]
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    53
    else:
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    54
        venv_name = "blinkster"
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    55
        
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    56
    args[0] = join(base_dir, venv_name)
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
def after_install(options, home_dir):
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    base_dir = os.path.dirname(home_dir)
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    src_dir = join(home_dir, 'src')
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    61
    tmp_dir = join(home_dir, 'tmp')
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    62
    ensure_dir(src_dir)
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    63
    ensure_dir(tmp_dir)
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    64
    #logger.indent += 2
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    try:
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    66
        call_subprocess([os.path.abspath(join(home_dir, 'bin', 'easy_install')), 'psycopg2'],
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    67
                        cwd=os.path.abspath(tmp_dir),
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    68
                        filter_stdout=filter_python_develop,
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    69
                        show_stdout=False)
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    70
        call_subprocess([os.path.abspath(join(home_dir, 'bin', 'easy_install')), 'pyxml'],
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    71
                        cwd=os.path.abspath(tmp_dir),
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    72
                        filter_stdout=filter_python_develop,
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    73
                        show_stdout=False)
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    74
        call_subprocess([os.path.abspath(join(home_dir, 'bin', 'easy_install')), '4suite-xml'],
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    75
                        cwd=os.path.abspath(tmp_dir),
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
                        filter_stdout=filter_python_develop,
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
                        show_stdout=False)
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    78
        call_subprocess([os.path.abspath(join(home_dir, 'bin', 'easy_install')), 'pil'],
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    79
                        cwd=os.path.abspath(tmp_dir),
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    80
                        filter_stdout=filter_python_develop,
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    81
                        show_stdout=False)
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    82
        call_subprocess([os.path.abspath(join(home_dir, 'bin', 'easy_install')), 'pil'],
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    83
                        cwd=os.path.abspath(tmp_dir),
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
                        filter_stdout=filter_python_develop,
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
                        show_stdout=False)
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    86
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    87
#get pylucene
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    88
#cd jcc
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    89
#install jcc
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    90
#cd pylucene
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    91
#instqll pylucene
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    92
#delete src
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    93
        #call_subprocess([os.path.abspath(join(home_dir, 'bin', 'python')), 'setup.py', 'develop'],
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    94
        #                cwd=os.path.abspath(fassembler_dir),
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    95
        #                filter_stdout=filter_python_develop,
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
    96
        #                show_stdout=False)
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    finally:
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
        logger.indent -= 2
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    script_dir = join(base_dir, 'bin')
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    logger.notify('Run "%s Package" to install new packages that provide builds'
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
   101
                  % join(script_dir, 'easy_install'))
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
32
e28089cee66c update python env script
ymh <ymh.work@gmail.com>
parents: 31
diff changeset
   103
def ensure_dir(dir):
31
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    if not os.path.exists(dir):
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
        logger.info('Creating directory %s' % dir)
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        os.makedirs(dir)
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
def filter_python_develop(line):
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    if not line.strip():
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
        return Logger.DEBUG
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    for prefix in ['Searching for', 'Reading ', 'Best match: ', 'Processing ',
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
                   'Moving ', 'Adding ', 'running ', 'writing ', 'Creating ',
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
                   'creating ', 'Copying ']:
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
        if line.startswith(prefix):
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
            return Logger.DEBUG
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    return Logger.NOTIFY
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
"""
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
def main():
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
    text = virtualenv.create_bootstrap_script(EXTRA_TEXT, python_version='2.4')
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
    if os.path.exists(script_name):
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
        f = open(script_name)
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
        cur_text = f.read()
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
        f.close()
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
    else:
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        cur_text = ''
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
    print 'Updating %s' % script_name
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    if cur_text == 'text':
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
        print 'No update'
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    else:
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
        print 'Script changed; updating...'
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        f = open(script_name, 'w')
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
        f.write(text)
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
        f.close()
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
if __name__ == '__main__':
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    main()
a727d83c8f88 add create_python_env file
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138