You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

118 lines
7.0 KiB

# encoding: utf-8
import datetime
from south.db import db
from south.v2 import DataMigration
from django.db import models
from django.template import Template, VariableNode, loader
class Migration(DataMigration):
def forwards(self, orm):
# create variables for all templates using the old auto-detection method
for snippet in orm.SmartSnippet.objects.all():
for var_name in self.get_variables_list(snippet):
snippet.variables.create(name=var_name, widget='TextField')
# relate snippet instance variable by id instead of name
for snippet_ptr in orm.SmartSnippetPointer.objects.all():
for snippet_ptr_var in snippet_ptr.variables.all():
try:
snippet_var = orm.SmartSnippetVariable.objects.get(snippet=snippet_ptr.snippet,
name=snippet_ptr_var.name)
snippet_ptr_var.snippet_variable = snippet_var
snippet_ptr_var.save()
except orm.SmartSnippetVariable.DoesNotExist:
pass # ignore unused snippet variable values and then drop them
orm.Variable.objects.filter(snippet_variable=None).delete()
def backwards(self, orm):
# repopulate variable names from relation
for variable in orm.Variable.objects.all():
variable.name = variable.snippet_variable.name
variable.save()
# delete variable definitions
orm.Variable.objects.all().update(snippet_variable=None)
orm.SmartSnippetVariable.objects.all().delete()
def get_template(self, snippet):
if snippet.template_path:
return None
else:
return Template(snippet.template_code)
def get_variables_list(self, snippet):
t = self.get_template(snippet)
result = set()
if t is None:
return result
for node in t.nodelist.get_nodes_by_type(VariableNode):
v = getattr(node.filter_expression.var, 'var', None)
if v and not v.endswith('_'):
result.add(v)
return result
models = {
'cms.cmsplugin': {
'Meta': {'object_name': 'CMSPlugin'},
'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
},
'cms.placeholder': {
'Meta': {'object_name': 'Placeholder'},
'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
'sites.site': {
'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'smartsnippets.dropdownvariable': {
'Meta': {'ordering': "['name']", 'object_name': 'DropDownVariable', '_ormbases': ['smartsnippets.SmartSnippetVariable']},
'choices': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
'smartsnippetvariable_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['smartsnippets.SmartSnippetVariable']", 'unique': 'True', 'primary_key': 'True'})
},
'smartsnippets.smartsnippet': {
'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}),
'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
},
'smartsnippets.smartsnippetpointer': {
'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']},
'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"})
},
'smartsnippets.smartsnippetvariable': {
'Meta': {'ordering': "['name']", 'unique_together': "(('snippet', 'name'),)", 'object_name': 'SmartSnippetVariable'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippet']"}),
'widget': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'smartsnippets.variable': {
'Meta': {'object_name': 'Variable'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}),
'snippet_variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'null': 'True', 'to': "orm['smartsnippets.SmartSnippetVariable']"}),
'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
}
}
complete_apps = ['smartsnippets']