Skip to content
Best collections of design patterns/idioms/snippets for Sublime Text.
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Python
.gitignore
LICENSE
README.md
github-language-detected.py

README.md

SnipLime

A collection of design patterns/idioms/snippets for Sublime Text. Python Patterns logo

Python Patterns snippets

Design patterns/idioms/snippets for Sublime Text with **good solutions for regular problems.

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.

– Brian W. Kernighan, co-author of The C Programming Language and the "K" in "AWK"

Preview

Preview

Installation

Using Package Control:

Bring up the Command Palette(Command+Shift+P on OS X, Control+Shift+P on Linux/Windows)

Select Package Control: Install Package.

Select Sublime Text 3 Snippets to install.

Not Using Package Control: Save files to the Packages/Sublime Text 3 Snippets directory, then relaunch Sublime:

git clone https://github.com/yasintoy/SnipLime.git

cd SnipLime

Linux: sudo cp -r Python/ ~/.config/sublime-text-2/Packages/

Mac: sudo cp Python/ ~/Library/Application Support/Sublime-Text-3/Packages/

Windows: cp %APPDATA%/Sublime-Text-2/Packages/

(if you want to install it for sublime-text-3, change sublime-text-2 with sublime-text-3 )

Snippets

(You don't have to memorise triggers because it's really close to english sentences.) Some Python Patterns snippets in the wild.

Main Function

Here are two that I use frequently.

trigger: main⇥

def main():
    pass

if __name__ == '__main__':
    main()

Factorial function

trigger: factorial

It works also for bigger numbers, when the result becomes long Reference:

from itertools import imap
def factorial(x):
    return reduce(long.__mul__, imap(long, xrange(1, x + 1))
    
print factorial(1000)

Get Twitter User Timeline

trigger: twittergetusertimeline⇥

Just change the api parameters and username that whatever you want!

import twitter

api = twitter.Api(consumer_key='your-consumer-key',
                  consumer_secret='your-consumer-secret',
                  access_token_key='your-access-token-key',
                  access_token_secret='your-access-token-secret')

# set a handle
username = 'anthonydb'

# get a user timeline
statuses = api.GetUserTimeline(screen_name=username, count=1)
print [s.text for s in statuses]

Any Generate

trigger: anygenerate⇥

I like using any and a generator:

if any(pred(x.item) for x in sequence):
    ...
});

instead of code written like this:

found = False
for x in sequence:
    if pred(x.n):
        found = True
if found:
    ...

Reference:

Dictionary Comprehension

trigger: dictcomp⇥

A faster and pythonic way to create a dict.

d = {key: value for (key, value) in iterable}

Open File

An easy and security way to open a file. trigger: readfile⇥

with open('file.txt',"r") as f:
    for line in f:
        ...

Email Verification Pattern

trigger: emailverify⇥

import re

addressToVerify ='info@emailhippo.com' # change it
match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addressToVerify)

if match == None:
	print('Bad Syntax')

Download Stock From Yahoo

Iteratively create a pandas dataframe by column and download stock data from Yahoo.com

trigger: downloadstock⇥

import pandas.io.data as web
import pandas as p
from datetime import datetime as dt

start = dt(2011,1,3)
# end = dt.today()
end = dt(2011,6,5)

stocks = [        'XLY',  # XLY Consumer Discrectionary SPDR Fund   
                       'XLF',  # XLF Financial SPDR Fund  
                       'XLK',  # XLK Technology SPDR Fund  
                       'XLE',  # XLE Energy SPDR Fund  
                       'XLV',  # XLV Health Care SPRD Fund  
                       'XLI',  # XLI Industrial SPDR Fund  
                       'XLP',  # XLP Consumer Staples SPDR Fund   
                       'XLB',  # XLB Materials SPDR Fund  
                       'XLU' ]

prices = p.DataFrame()

for stock in stocks:
    prices[stock] = web.DataReader(stock, 'yahoo', start, end)['Adj Close']

Reference:

Get Links

trigger: getlinks⇥

Get all links from given website and print them.

import urllib
import BeautifulSoup

htmlSource = urllib.urlopen("${1:http://sebsauvage.net/index.html}").read(200000)
soup = BeautifulSoup.BeautifulSoup(htmlSource)
for item in soup.fetch('a'):
    print item['href'] 

Graph Search

trigger: graphsearch⇥

Implementation of Graph search with Python.

class GraphSearch:

    """comments"""

    def __init__(self, graph):
        self.graph = graph

    def find_path(self, start, end, path=None):
        self.start = start
        self.end = end
        self.path = path if path else []

        self.path += [self.start]
        if self.start == self.end:
            return self.path
        if self.start not in self.graph:
            return None
        for node in self.graph[self.start]:
            if node not in self.path:
                newpath = self.find_path(node, self.end, self.path)
                if newpath:
                    return newpath
        return None

    def find_all_path(self, start, end, path=None):
        self.start = start
        self.end = end
        _path = path if path else []
        _path += [self.start]
        if self.start == self.end:
            return [_path]
        if self.start not in self.graph:
            return []
        paths = []
        for node in self.graph[self.start]:
            if node not in _path:
                newpaths = self.find_all_path(node, self.end, _path[:])
                for newpath in newpaths:
                    paths.append(newpath)
        return paths

    def find_shortest_path(self, start, end, path=None):
        self.start = start
        self.end = end
        _path = path if path else []

        _path += [self.start]
        if self.start == self.end:
            return _path
        if self.start not in self.graph:
            return None
        shortest = None
        for node in self.graph[self.start]:
            if node not in _path:
                newpath = self.find_shortest_path(node, self.end, _path[:])
                if newpath:
                    if not shortest or len(newpath) < len(shortest):
                        shortest = newpath
        return shortest

"""

# example of graph usage
graph = {'A': ['B', 'C'],
         'B': ['C', 'D'],
         'C': ['D'],
         'D': ['C'],
         'E': ['F'],
         'F': ['C']
         }

# initialization of new graph search object
graph1 = GraphSearch(graph)


print(graph1.find_path('A', 'D'))
print(graph1.find_all_path('A', 'D'))
print(graph1.find_shortest_path('A', 'D'))

### OUTPUT ###
# ['A', 'B', 'C', 'D']
# [['A', 'B', 'C', 'D'], ['A', 'B', 'D'], ['A', 'C', 'D']]
# ['A', 'B', 'D'] 

"""

FTP Send File

trigger: ftpsendfile⇥

Send a file by using the FTP.

import ftplib                                          # We import the FTP module

session = ftplib.FTP('adress like blabla.com','login','passord') # Connect to the FTP server
myfile = open('toto.txt','rb')                    # Open the file to send
session.storbinary('STOR toto.txt', myfile)       # Send the file

myfile.close()                                         # Close the file
session.quit()                                         # Close FTP session

Timestamped Filename

trigger: timestampedfilename⇥

import datetime, os

def timestamped_filename(file_name, date_time=None):
    date_time = date_time or datetime.datetime.now()
    root, ext = os.path.splitext(file_name)
    return '{}{:_%Y_%m_%d_%H_%M_%S}{}'.format(root, date_time, ext)

Merge Sort

trigger: mergesort⇥

def merge(left, right, lt):
    """Assumes left and right are sorted lists.
     lt defines an ordering on the elements of the lists.
     Returns a new sorted(by lt) list containing the same elements
     as (left + right) would contain."""
    result = []
    i,j = 0, 0
    while i < len(left) and j < len(right):
        if lt(left[i], right[j]):
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    while (i < len(left)):
        result.append(left[i])
        i += 1
    while (j < len(right)):
        result.append(right[j])
        j += 1
    return result
            
def sort(L, lt = lambda x,y: x < y):
    """Returns a new sorted list containing the same elements as L"""
    if len(L) < 2:
        return L[:]
    else:
        middle = int(len(L)/2)
        left = sort(L[:middle], lt)
        right = sort(L[middle:], lt)
        #print 'About to merge', left, 'and', right
        return merge(left, right, lt)
}());

Tree Data Structure

trigger: tree⇥

class Node:
    """
    Class Node
    """
    def __init__(self, value):
        self.left = None
        self.data = value
        self.right = None

class Tree:
    """
    Class tree will provide a tree as well as utility functions.
    """

    def createNode(self, data):
        """
        Utility function to create a node.
        """
        return Node(data)

    def insert(self, node , data):
        """
        Insert function will insert a node into tree.
        Duplicate keys are not allowed.
        """
        #if tree is empty , return a root node
        if node is None:
            return self.createNode(data)
        # if data is smaller than parent , insert it into left side
        if data < node.data:
            node.left = self.insert(node.left, data)
        elif data > node.data:
            node.right = self.insert(node.right, data)

        return node


    def search(self, node, data):
        """
        Search function will search a node into tree.
        """
        # if root is None or root is the search data.
        if node is None or node.data == data:
            return node

        if node.data < data:
            return self.search(node.right, data)
        else:
            return self.search(node.left, data)



    def deleteNode(self,node,data):
        """
        Delete function will delete a node into tree.
        Not complete , may need some more scenarion that we can handle
        Now it is handling only leaf.
        """

        # Check if tree is empty.
        if node is None:
            return None

        # searching key into BST.
        if data < node.data:
            node.left = self.deleteNode(node.left, data)
        elif data > node.data:
            node.right = self.deleteNode(node.right, data)
        else: # reach to the node that need to delete from BST.
            if node.left is None and node.right is None:
                del node
            if node.left == None:
                temp = node.right
                del node
                return  temp
            elif node.right == None:
                temp = node.left
                del node
                return temp

        return node

    def traverseInorder(self, root):
        """
        traverse function will print all the node in the tree.
        """
        if root is not None:
            self.traverseInorder(root.left)
            print root.data
            self.traverseInorder(root.right)

    def traversePreorder(self, root):
        """
        traverse function will print all the node in the tree.
        """
        if root is not None:
            print root.data
            self.traversePreorder(root.left)
            self.traversePreorder(root.right)

    def traversePostorder(self, root):
        """
        traverse function will print all the node in the tree.
        """
        if root is not None:
            self.traversePreorder(root.left)
            self.traversePreorder(root.right)
            print root.data

And we've much more samples but I think that's enough for now.

The MIT License (MIT)

Copyright (c) 2016 Yasin Toy

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

You can’t perform that action at this time.