import urllib

def parse(value):
	print "X-Sendfile2:", value
	params = value.split(" ")
	if len(params) < 1 or not params[0]: raise ValueError, "insufficient parameters"

	filename = urllib.unquote(params[0])

	# Parse the range; None means "until EOF".
	if len(params) >= 2:
		range_params = params[1].split("-", 2)
		if len(range_params) != 2:
			raise ValueError, "invalid range: %s" % params[1]
		range = [int(range_params[0]), None]
		if range_params[1] != "":
			range[1] = int(range_params[1])
	else:
		range = [0, None]

	flags = set(params[2:])
	if "temp" in flags:
		flags.remove("temp")
		tempfile = True
	else:
		tempfile = False

	print filename
	print "Range:", range
	if tempfile:
		print "tempfile"
	if flags:
		print "Warning: unsupported parameters: %s" % ",".join([s for s in flags])
	print

parse("/file%20to%20send%2Cwith%2Ccommas")
parse("/filename 0-")
parse("/filename 0- foo")
parse("/filename 100-200")
parse("/filename 100-200 temp")
parse("/filename 100-200 foo temp")

errors = [
	"",
	"/filename   foo",
	"/filename 0 foo",
	"/filename 0-- foo",
	"/filename 0-5-6 foo",
]
for s in errors:
	try:
		parse(s)
		raise RuntimeError, "expected exception didn't happen: %s" % s
	except ValueError, e:
		print e, "(expected)"
		pass

