/usr/share/pyshared/django_evolution/evolve.py is in python-django-evolution 0.6.7-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import os
from django_evolution import EvolutionException, is_multi_db
from django_evolution.builtin_evolutions import BUILTIN_SEQUENCES
from django_evolution.models import Evolution
from django_evolution.mutations import SQLMutation
def get_evolution_sequence(app):
"Obtain the full evolution sequence for an application"
app_name = '.'.join(app.__name__.split('.')[:-1])
if app_name in BUILTIN_SEQUENCES:
return BUILTIN_SEQUENCES[app_name]
try:
evolution_module = __import__(app_name + '.evolutions',{},{},[''])
return evolution_module.SEQUENCE
except:
return []
def get_unapplied_evolutions(app, database):
"Obtain the list of unapplied evolutions for an application"
sequence = get_evolution_sequence(app)
app_label = app.__name__.split('.')[-2]
evolutions = Evolution.objects.filter(app_label=app_label)
if is_multi_db():
evolutions = evolutions.using(database)
applied = [evo.label for evo in evolutions]
return [seq for seq in sequence if seq not in applied]
def get_mutations(app, evolution_labels, database):
"""
Obtain the list of mutations described by the named evolutions.
"""
# For each item in the evolution sequence. Check each item to see if it is
# a python file or an sql file.
try:
app_name = '.'.join(app.__name__.split('.')[:-1])
if app_name in BUILTIN_SEQUENCES:
module_name = 'django_evolution.builtin_evolutions'
else:
module_name = '%s.evolutions' % app_name
evolution_module = __import__(module_name, {}, {}, [''])
except ImportError:
return []
mutations = []
for label in evolution_labels:
directory_name = os.path.dirname(evolution_module.__file__)
# The first element is used for compatibility purposes.
filenames = [
os.path.join(directory_name, label + '.sql'),
os.path.join(directory_name, "%s_%s.sql" % (database, label)),
]
found = False
for filename in filenames:
if os.path.exists(filename):
sql = []
sql_file = open(filename)
for line in sql_file:
sql.append(line)
mutations.append(SQLMutation(label, sql))
found = True
break
if not found:
try:
module_name = [evolution_module.__name__, label]
module = __import__('.'.join(module_name),
{}, {}, [module_name]);
mutations.extend(module.MUTATIONS)
except ImportError:
raise EvolutionException(
'Error: Failed to find an SQL or Python evolution named %s'
% label)
return mutations
|