Skip to content

Commit

Permalink
Incorporated slicing (sudar) with some testing
Browse files Browse the repository at this point in the history
  • Loading branch information
robertkrimen committed Aug 23, 2011
1 parent cef358b commit 3a3803b
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 5 deletions.
17 changes: 15 additions & 2 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,18 @@

import gist_it

'''
Take a (line) slice of content, based on a start/end index
'''
def take_slice(content, start_line = 0, end_line = 0):
if (start_line == 0 and end_line == 0):
return content

if (end_line == 0):
return '\n'.join(content.splitlines()[start_line:])

return '\n'.join(content.splitlines()[start_line:end_line])

def render_gist_html( base, gist, document ):
result = jinja2.get_template( 'gist.jinja.html' ).render( cgi = cgi, base = base, gist = gist, document = document )
return result
Expand Down Expand Up @@ -72,7 +84,7 @@ def get( self, location ):
return

else:
gist = gist_it.Gist.parse( location )
gist = gist_it.Gist.parse( location, slice = self.request.get( 'slice' ) )
if not gist:
self.response.set_status( 500 )
self.response.out.write( "Unable to parse \"%s\": Not a valid repository path?" % ( location ) )
Expand All @@ -98,7 +110,8 @@ def get( self, location ):
self.response.out.write( "Unable to fetch \"%s\": (%i)" % ( gist.raw_url, response.status_code ) )
return
else:
gist_html = str( render_gist_html( base, gist, response.content ) ).strip()
gist_content = take_slice( response.content, gist.start_line, gist.end_line )
gist_html = str( render_gist_html( base, gist, gist_content ) ).strip()
callback = self.request.get( 'callback' );
if callback != '':
result = render_gist_js_callback( callback, gist, gist_html )
Expand Down
12 changes: 9 additions & 3 deletions gist_it.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@
def match( location ):
return Gist.match( location )

def parse( location ):
return Gist.parse( location )
def parse( location, **arguments ):
return Gist.parse( location, **arguments )

def parse_slice( slice_ ):
match = re.match( r'^(\d*):?(\d*)$', slice_ )
if match is None:
return ( 0, 0 )
return map( lambda _: int(_) if len(_) else 0, match.groups(0) )

class Gist:

Expand All @@ -18,7 +24,7 @@ def match( self, location ):
return match

@classmethod
def parse( self, location ):
def parse( self, location, slice_ = '' ):
match = self.match( location )
if not match:
return None
Expand Down
2 changes: 2 additions & 0 deletions test/test_gist_it.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,7 @@ def runTest( self ):
self.assertEqual( gist.user_repository_branch_path, 'robertkrimen/yzzy-projection/master/src/yzzy/projection/View.as' )
self.assertEqual( gist.user_repository_url, 'https://github.com/robertkrimen/yzzy-projection' )

gist = gist_it.parse( 'github/robertkrimen/yzzy-projection/raw/master/src/yzzy/projection/View.as', slice_ = '1:' )

if __name__ == '__main__':
unittest2.main()
54 changes: 54 additions & 0 deletions test/test_slice.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/usr/bin/env python
# vim: ft=python:
import random
import unittest2
import sys;
import os;

sys.path.append( os.path.join( sys.path[0], ".." ) )
import gist_it

class t( unittest2.TestCase ):
def runTest( self ):
slice_ = gist_it.parse_slice( '' )
self.assertEqual( len( slice_ ), 2 )
self.assertEqual( slice_[0], 0 )
self.assertEqual( slice_[1], 0 )

slice_ = gist_it.parse_slice( '1' )
self.assertEqual( len( slice_ ), 2 )
self.assertEqual( slice_[0], 1 )
self.assertEqual( slice_[1], 0 )

slice_ = gist_it.parse_slice( '1:' )
self.assertEqual( len( slice_ ), 2 )
self.assertEqual( slice_[0], 1 )
self.assertEqual( slice_[1], 0 )

slice_ = gist_it.parse_slice( '1:0' )
self.assertEqual( len( slice_ ), 2 )
self.assertEqual( slice_[0], 1 )
self.assertEqual( slice_[1], 0 )

slice_ = gist_it.parse_slice( ':1' )
self.assertEqual( len( slice_ ), 2 )
self.assertEqual( slice_[0], 0 )
self.assertEqual( slice_[1], 1 )

slice_ = gist_it.parse_slice( '0:1' )
self.assertEqual( len( slice_ ), 2 )
self.assertEqual( slice_[0], 0 )
self.assertEqual( slice_[1], 1 )

slice_ = gist_it.parse_slice( '1:1' )
self.assertEqual( len( slice_ ), 2 )
self.assertEqual( slice_[0], 1 )
self.assertEqual( slice_[1], 1 )

slice_ = gist_it.parse_slice( ':' )
self.assertEqual( len( slice_ ), 2 )
self.assertEqual( slice_[0], 0 )
self.assertEqual( slice_[1], 0 )

if __name__ == '__main__':
unittest2.main()

0 comments on commit 3a3803b

Please sign in to comment.