예제 #1
0
def pastie_save(req, nosave=False):
	"""
	retrieve shell from the form, save or display
	"""
	if req.method == 'POST':
		slug = req.POST.get('slug', None)
		if slug:
			pastieinstance = get_object_or_404(Pastie,slug=slug)
			pastieform = PastieForm(req.POST, instance=pastieinstance)
		else:	
			pastieform = PastieForm(req.POST)
			
		shellform = ShellForm(req.POST)
			
		if shellform.is_valid():
			shell = shellform.save(commit=False)
			
			if nosave:
				" return the pastie page only " 
				return pastie_show(req, None, shell)
			
			if pastieform.is_valid():
				pastie = pastieform.save(commit=False)
				" create slug from random string"
				# at the moment no versioning - just saving with version 0
				if not pastie.slug:
					allowed_chars='abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'
					from random import choice
					pastie.slug =  ''.join([choice(allowed_chars) for i in range(params.SLUG_LENGTH)]) #here some random stuff
				
				pastie.save()
				shell.pastie = pastie
				shell.save()
				" return json with pastie url "
				return HttpResponse(simplejson.dumps(
						{'pastie_url': ''.join([settings.WEB_SERVER, shell.get_absolute_url()])}
						),mimetype='application/javascript'
					)
			else: error = "Pastie form does not validate %s" % pastieform['slug'].errors
		else: error = "Shell form does not validate"
	else: error = 'Please use POST request'
	
	return HttpResponse(simplejson.dumps({'error':error}),
					mimetype='application/javascript'
	)
예제 #2
0
파일: views.py 프로젝트: chriswong/mooshell
def pastie_save(req, nosave=False, skin=None):
	"""
	retrieve shell from the form, save or display
	Fix dependency
	"""
	if req.method == 'POST':
		slug = req.POST.get('slug', None)
		if slug:
			" UPDATE - get the instance if slug provided "
			pastieinstance = get_object_or_404(Pastie,slug=slug)
			pastieform = PastieForm(req.POST, instance=pastieinstance)
		else:	
			" CREATE "
			pastieform = PastieForm(req.POST)
			
		shellform = ShellForm(req.POST)
			
		if shellform.is_valid():
			
			" Instantiate shell data from the form "
			shell = shellform.save(commit=False)
			
			# add js_dependency
			dependency_ids = [int(dep[1]) for dep in req.POST.items() if dep[0].startswith('js_dependency')]
			dependencies = []
			for dep_id in dependency_ids:
				dep = JSDependency.objects.get(id=dep_id)
				dependencies.append(dep)
			if nosave:
				" return the pastie page only " 
				return pastie_display(req, None, shell, dependencies, skin)
			" add user to shell if anyone logged in "
			if req.user.is_authenticated():
				shell.author = req.user
			
			if pastieform.is_valid():
				" prepare pastie object from DB and POST "
				pastie = pastieform.save(commit=False)
				
				#" set author if first save "
				#if shell.author and shell.version == 0 and (not shell.revision or shell.revision == 0):
				#	pastie.author = shell.author 
					
				" create slug from random string if needed"
				if not pastie.slug:
					pastie.set_slug()
					

				pastie.save()

				" Connect shell with pastie "
				shell.pastie = pastie
				if slug:
					shell.set_next_version()
					
				shell.save()
				
				for dep in dependencies:
					shell.js_dependency.add(dep)
			
				" return json with pastie url "
				return HttpResponse(simplejson.dumps({
						#'pastie_url': ''.join(['http://',req.META['SERVER_NAME'], shell.get_absolute_url()]),
						'pastie_url_relative': shell.get_absolute_url()
						}),mimetype='application/javascript'
					)
			else: error = "Pastie form does not validate %s" % pastieform['slug'].errors
		else: 
			error = "Shell form does not validate"
			for s in shellform:
				if hasattr(s, 'errors') and s.errors:
					error = error + str(s.__dict__) 
	else: error = 'Please use POST request'
	
	return HttpResponse(simplejson.dumps({'error':error}),
					mimetype='application/javascript'
	)