All pastes #1488808 Raw Edit

Python

public python v1 · immutable
#1488808 ·published 2009-07-08 20:32 UTC
rendered paste body
#!/usr/bin/env python## pastebin, a script to upload a file to pastebin.ca from the console.## Copyright (C) 2005 Raphael Slinckx <raphael@slinckx.net>#     Thanks to Gustavo J. A. M. Carneiro  <gjc@gnome.org>## This program is free software; you can redistribute it and/or# modify it under the terms of the GNU General Public License# as published by the Free Software Foundation; either version 2# of the License, or (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.#import getopt, sys, urllib, urllib2, re, pwd, ostry:	import gnomevfs, gtksourceview	WITH_GNOMEVFS = Trueexcept ImportError:	WITH_GNOMEVFS = False		# General ConstantsTYPES = ['raw', 'asterisk', 'c', 'cpp', 'php', 'perl', 'java', 'vb', 'csharp','ruby', 'python', 'pascal', 'mirc', 'pli', 'xml', 'sql', 'scheme','ascript', 'ada', 'apache', 'nasm', 'asp', 'bash', 'css', 'delphi', 'html','js', 'lisp', 'lua', 'asm', 'objc', 'vbnet' ]NAME_TYPE_DICT = {'HTML'   : 'html',   'CSS' : 'css',    'JavaScript' : 'js',    'sh'  : 'bash', 'Python' : 'python', 'PHP' : 'php',    'Perl'       : 'perl',  'SQL' : 'sql','C'      : 'c',      'Ada' : 'ada',    'Lua'        : 'lua',   'C++' : 'cpp','Pascal' : 'pascal', 'C#'  : 'csharp', 'XML'        : 'xml','VB.NET' : 'vbnet',  'Java': 'java',   'Ruby'       : 'ruby' }EXPIRATIONS = ['', '5 minutes', '10 minutes', '15 minutes', '30 minutes', '45 minutes','1 hour', '2 hours', '4 hours', '8 hours', '12 hours', '1 day', '2 days','3 days', '1 week', '2 weeks', '3 weeks', '1 month', '2 months', '3 months','4 months', '5 months', '6 months', '1 year' ]POSTDATA = 'content=%(content)s&description=%(description)s&type=%(type)s&expiry=%(expiry)s&name=%(name)s&save=0&s=Submit+Post'URL = 'http://en.pastebin.ca/index.php'URL_PATTERN = re.compile('http://en.pastebin.ca/\d+')RAW_MODE = False# The Meatdef paste(content, description='', name='', expiry='', type='raw'):	payload = POSTDATA % {		'content' : urllib.quote_plus(content),		'description' : urllib.quote_plus(description),		'type' : TYPES.index(type)+1,		'expiry' : urllib.quote_plus(expiry),		'name' : urllib.quote_plus(name)		}	req = urllib2.Request(URL, payload, {		'Referer': 'http://en.pastebin.ca/',		'Content-Type': 'application/x-www-form-urlencoded',		'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.10) Gecko/20050813 Epiphany/1.7.6',		'Accept-Language': 'en',		'Accept-Charset': 'utf-8',		})	return urllib2.urlopen(req).read()def got_error(err):	sys.stderr.write('%r\n' % err)def got_pastebin_url(url):	print urldef got_page(res):	matches = URL_PATTERN.findall(res)	if len(matches) > 0:		match = matches[0]		if RAW_MODE:			got_pastebin_url(match.replace('pastebin.ca/','pastebin.ca/raw/'))		else:			got_pastebin_url(match)	else:		sys.stderr.write('Could not retreive pastebin url\n')		def usage():	print """=== Pastebin: Usage$ pastebin [OPTIONS] [FILE]Print the pastebin.ca URL of the input fileIf FILE is omitted content is read from standard inputOPTIONS:	-h, --help			Print this help notice.	-r, --raw			Retreive raw text URL (default=off).	-d, --description	The description of the content (default=empty).	-m, --message		Same as description	-n, --name			Your name (default=your unix username).	-l, --lines			The line numbers to send starting at 1 (default=1,0)						Ex: 1,12 or 12,36 or 45 or 45,0	-t, --type			The type of the content (default="raw")		Type can be one of:	raw, asterisk, c, cpp, php, perl, java, vb, csharp,	ruby, python, pascal, mirc, pli, xml, sql, scheme,	ascript, ada, apache, nasm, asp, bash, css, delphi, html, js,	lisp, lua, asm, objc, vbnet		If type is not specified, an attempt to auto-detect type is made,	based on file data/extension. Detection is more reliable when giving FILE	argument than piping directly. This needs modules gnomevfs and gtksourceview	"""if __name__ == '__main__':	if WITH_GNOMEVFS:		man = gtksourceview.SourceLanguagesManager()	else:		man = None	 	# Default Values	content = ''	description = ''	name = pwd.getpwuid(os.getuid())[0]	expiry = ''	type = 'raw'	start = 1	end = 0	try:		opts, args = getopt.getopt(sys.argv[1:], 'hrd:m:n:t:l:', ['help', 'raw', 'description=', 'message=', 'name=', 'type=', 'lines='])	except getopt.GetoptError:		usage()		sys.exit()		for o, a in opts:		if o in ('-h', '--help'):			usage()			sys.exit()		if o in ('-l', '--lines'):			#Parse the line numbers			try:				lines = a.split(',')				if len(lines) == 2:					if lines[0] != '' and lines[1] != '':						start = int(lines[0])						end = int(lines[1])					elif lines[0] == '' and lines[1] != '':						start = 1						end = int(lines[1])					elif lines[0] != '' and lines[1] == '':						start = int(lines[0])						end = 0				elif len(lines) == 1:					start = int(lines[0])			except Exception:				start = 1				end = 0							if start > end and end != 0 or start < 1 or end < 0:				sys.stderr.write('Error with lines numbers, start:%d end:%d\n' % (start, end))				sys.exit()		# Open the file, and read content.	f = None	try:		if len(args) == 0:			f = sys.stdin		else:			f = file(args[0], 'r')		lines = None		if end == 0:			lines = f.readlines()[start-1:]		else:			lines = f.readlines()[start-1:end]					content = ''.join(lines)		f.close()	except Exception, msg:		sys.stderr.write('Error while reading the file: %s\n' % msg)		sys.exit()	# Try to guess file content type if given, and we have GNOMEVFS	if WITH_GNOMEVFS:		mimes = [gnomevfs.get_mime_type_for_data(content)]		if len(args) > 0:			try:				mimes.append(gnomevfs.get_mime_type(os.path.abspath(args[0])))			except RuntimeError:				sys.stderr.write('Could not determine mime type of "%s".\n' % args[0])					for mime in mimes:			lang = man.get_language_from_mime_type(mime)			if lang != None:				name = lang.get_name()				try:					type = NAME_TYPE_DICT[name]					sys.stderr.write('Using source type "%s"\n' % type)				except KeyError:					sys.stderr.write('No pastebin langage matching name "%s"\n' % name)					# Parse options	for o, a in opts:		if o in ('-r', '--raw'):			RAW_MODE = True		elif o in ('-d', '--description') or o in ('-m', '--message'):			description = a		elif o in ('-n', '--name'):			name = a		elif o in ('-t', '--type'):			type = a	#Parameter validation	if content.strip() == '':		sys.stderr.write('Content Empty: "%s"\n' % content)		sys.exit()	elif not type in TYPES:		sys.stderr.write('Unknown type: %s\n' % type)		sys.exit()	try:		res = paste(content, description, name, expiry, type)		got_page(res)	except Exception, msg:		got_error(msg)