Revision: 48528
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 4, 2011 18:09 by eristoddle
Initial Code
import xmlrpclib import os import urllib2 class SnipplrPy: """ Wrapper around xml-rpc methods exposed by Snipplr. """ def __init__(self): """ Constructor """ self.api_key = None self.server_url = "http://snipplr.com/xml-rpc.php" self.server = None self.initialized = False self.languages = {} def __try_connect__(self): """ Private method, try to connect with xml-rpc endpoint if still not connected """ if self.server is None: try: self.server = xmlrpclib.Server(self.server_url) return True except xmlrpclib.Fault: return False return True def check_api_key(self, key): """ Checks if the key suministrated is valid or not """ if self.__try_connect__() == False: return False try: if self.server.user.checkkey(key) == 0: return False return True except xmlrpclib.Fault: return False def list_languages(self): """ List snipplr languages """ if len(self.languages.keys()) != 0: return self.languages if self.__try_connect__() == False: return None try: self.languages = self.server.languages.list() return self.languages except xmlrpclib.Fault: return None def setup(self, api_key): """ Setup the object with a valid api_key """ if self.check_api_key(api_key) == False: self.initialized = False return False; self.api_key = api_key self.initialized = True return True def get(self, id, parse_source = False): """ Get the snippet specified by id None if the id is not valid. We dont need the api key here. If parse_source is True, replace html html encoding with the implicit value """ if self.__try_connect__() == False: return None try: result = self.server.snippet.get(id) if parse_source: self.__convert_snippet_source__(result) return result except xmlrpclib.Fault: return None def get_source_plain_text(self, id): """ Get the source code in plain text format """ url = "http://snipplr.com/view.php?id=" + str(id) + "&plaintext" try: handler = urllib2.urlopen(url) source = handler.read() handler.close() return source except Exception, e: return None def list(self, tags = None, sort = None, limit = None): """ List the user snnipets. tags is a space separated string with the tags names. sort can be one of these three values: title, date, random. DEACTIVATED limit is the max number of snippet returned. DEACTIVATED """ if self.initialized == False: return None try: if tags == None: t = "" else: t = tags return self.server.snippet.list(self.api_key, t) except xmlrpclib.Fault: return None def post(self, title, code, tags = None, language = None): """ Post a new snippet. Returns True if proccess ok or False in other case """ if self.initialized == False: return False if language: if not language in self.list_languages(): error_str = "Language not included into Snipplr language list " + " ".join(self.languages.keys()) raise Exception(error_str) try: #Default values t = tags if t == None: t = "" l = language if l == None: l = "" self.server.snippet.post(self.api_key, title, code, t, l) return True except xmlrpclib.Fault: return False def post_file(self, file, title, tags = None, language = None): """ Post a snippet taken the code from a file. Returns True if succedded, or False in other case """ if os.access(file, os.R_OK): handler = open(file, "r") code = handler.read() handler.close() return self.post(title, code, tags, language) return False def delete(self, id): """ Try to delete the snippet specified by id. Returns true if action is taken or false in other case """ if self.initialized == False: return False try: if self.server.snippet.delete(self.api_key, id) == 0: return False return True except xmlrpclib.Fault: return False def __convert_snippet_source__(self, snippet): """ Replace all html chars with their implicit values """ #Yes i know this is actually soooo ugly and we should use regexp :P snippet["source"] = snippet["source"].replace(""","\"").replace("<","<").replace(">",">") return snippet if __name__ == "__main__": from grun import grun mysnipplr = SnipplrPy() mysnipplr.setup("REPLACEWITHAPIKEY") #get tags @grun def ask_tags(tags): """ Any Tags for this Snippet? """ return tags tags = ask_tags() print mysnipplr.post(p.h,p.b,tags,"python")
Initial URL
http://webpages.charter.net/edreamleo/front.html
Initial Description
This is for the LEO editor. Create a node containing this script. Add your API key at the bottom. Then click the script button button when it is selected. Now you can upload any node to Snipplr as a snippet.
Initial Title
LEO Node Button to Upload Node to Snipplr as a Snippet
Initial Tags
Initial Language
Python