Advertisement
Guest User

Untitled

a guest
Oct 28th, 2012
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.06 KB | None | 0 0
  1. from django.http import HttpResponse
  2. import re
  3. import json
  4.  
  5. general_expression = '\s*(?:url)?\(r?["|\'](?P<pattern>[^\'"]+)["|\'],(?P<main>[^\n]+)\),'
  6.  
  7. expressions = {
  8.     'view': '\s*(?:url)?\(r?["|\'](?P<pattern>[^\'"]+)["|\'],\s*["|\']?(?P<view>[^\'"]+)["|\']?\),',
  9.     'include': '\s*(?:url)?\(r?["|\'](?P<pattern>[^\'"]+)["|\'],\s*include\(["|\']?(?P<include>[^\'"]+)["|\']?\)\),',
  10.     'direct to template': '\s*(?:url)?\(r?["|\'](?P<pattern>[^\'"]+)["|\'],\s*["|\']?direct_to_template["|\']?,\s*{["|\']template["|\']:\s*["|\'](?P<template>[^\'"]+)["|\']}\),',
  11. }
  12.  
  13. myurlpatterns = """
  14. from django.conf.urls import patterns, url, include
  15.  
  16. urlpatterns = patterns('',
  17.    (r'^$', direct_to_template, {'template': 'home.html'}),
  18.    (r'^articles/(\d{4})/$', 'year_archive'),
  19.    (r'^articles/(\d{4})/(\d{2})/$', 'month_archive'),
  20.    (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'),
  21.    (r'^users/', include('users.urls')),
  22. )
  23. """
  24.  
  25. myurlpatterns = """from django.conf.urls import patterns, include, url
  26. from django.contrib.staticfiles.urls import staticfiles_urlpatterns
  27. from django.contrib import admin
  28. admin.autodiscover()
  29. from django.conf import settings
  30. import os
  31.  
  32. urlpatterns = patterns('',
  33.    (r'^$', direct_to_template, {'template': 'home.html'}),
  34.    (r'^urls/', 'urls.views.urls'),
  35.    (r'^admin/', include(admin.site.urls)),
  36. )
  37.  
  38. if settings.DEBUG:
  39.    urlpatterns += patterns('',
  40.        (r'^css/(?P<path>.*)$', 'django.views.static.serve',
  41.            {'document_root': os.path.join(settings.BASEDIR, 'static/css')}),
  42.        (r'^images/(?P<path>.*)$', 'django.views.static.serve',
  43.            {'document_root': os.path.join(settings.BASEDIR, 'static/images')}),
  44.        (r'^js/(?P<path>.*)$', 'django.views.static.serve',
  45.            {'document_root': os.path.join(settings.BASEDIR, 'static/js')}),
  46.    )"""
  47.  
  48. def process_line(urlpattern):
  49.     # find which type of urlpattern then parse it
  50.     for expression in expressions:
  51.         m = re.search(expressions[expression], urlpattern)
  52.         if m:
  53.             type = expression
  54.             groupdict = m.groupdict()
  55.            
  56.             urlpattern_dict = {'type': type}
  57.             urlpattern_dict.update(groupdict)
  58.             return urlpattern_dict
  59.             break
  60.     return
  61.    
  62. org = "    (r'^users/', include('users.urls')),"
  63. expression = '\s*[url]?\(r?["|\'](?P<pattern>[^\'"]+)["|\'],\s*include\(["|\'](?P<include>[^\'"]+)["|\']\)\),'
  64. newstr = org
  65. newgroupdict = {'pattern': '^new_users/$', 'include': 'users.urls'}
  66. for i, j in newgroupdict.items():
  67.     newstr = newstr.replace(re.search(expression, org).group(i), j)
  68. print newstr    
  69.    
  70. def process_urlpatterns(urlpatterns):
  71.     return [process_line(line) for line in urlpatterns.split('\n') if process_line(line)]
  72.  
  73. def urls(request):
  74.     if request.POST:
  75.         ids = []
  76.         for key in request.POST:
  77.             m = re.search('(?P<id>[\d]+)[\w_ ]+', key)
  78.             if m:
  79.                 ids.append(int(m.group('id')))
  80.         ids = list(set(ids))
  81.         urlpatterns_list = []
  82.         for i in range(len(ids)):
  83.             urlpatterns_list.append({})
  84.         for key, value in request.POST.items():
  85.             m = re.search('(?P<id>[\d]+)_(?P<key>[\w_ ]+)', key)
  86.             if m:
  87.                 urlpatterns_list[int(m.group('id'))].update({m.group('key'): value})
  88.         lines = request.POST['code'].split('\n')
  89.         new_lines = []
  90.         i = 0
  91.         s = ''
  92.         extra_import_line = ''
  93.         for line in lines:
  94.             print line
  95.             t = False
  96.             e = None
  97.             for expression in expressions:
  98.                 m = re.search(expressions[expression], line)
  99.                 if m:
  100.                     t = True
  101.                     e = expressions[expression]
  102.                     print '========================'
  103.                     break
  104.             if t:
  105.                
  106.                 newstr = line
  107.                 newgroupdict = urlpatterns_list[i]
  108.                 if expression != newgroupdict['type']:
  109.                     print 'new type'
  110.                     new_main = ''
  111.                     if newgroupdict['type'] == 'view':
  112.                         new_main = " '%s'" % (newgroupdict['view'])
  113.                     if newgroupdict['type'] == 'include':
  114.                         new_main = " include('%s')" % (newgroupdict['include'])
  115.                     if newgroupdict['type'] == 'direct to template':
  116.                         if not 'from django.views.generic.simple import direct_to_template' in request.POST['code']:
  117.                             extra_import_line = 'from django.views.generic.simple import direct_to_template\n'
  118.                            
  119.                         new_main = " direct_to_template, {'template': '%s'}" % (newgroupdict['template'])
  120.                        
  121.                     if re.search(general_expression, line):
  122.                         newstr = newstr.replace(re.search(general_expression, line).group('main'), new_main)
  123.                     else:
  124.                         newstr = line
  125.                 else:
  126.                     print newstr
  127.                     for key, value in newgroupdict.items():
  128.                     print newgroupdict
  129.                         try:
  130.                             newstr = newstr.replace(re.search(e, line).group(key), value)
  131.                         except:
  132.                             pass
  133.                    
  134.                 new_lines.append(newstr)
  135.                 i += 1
  136.             else:
  137.                 new_lines.append(line)
  138.         response_data = {'code': extra_import_line + '\n'.join(new_lines)}
  139.         return HttpResponse(json.dumps(response_data), mimetype="application/json")
  140.        
  141.     response_data = {'code': myurlpatterns, 'data': process_urlpatterns(myurlpatterns)}
  142.     return HttpResponse(json.dumps(response_data), mimetype="application/json")
  143.    
  144. def populate_fields(request):
  145.    
  146.     response_data = {'data': process_urlpatterns(request.POST['code'])}
  147.     return HttpResponse(json.dumps(response_data), mimetype="application/json")    
  148.    
  149. def modify(request, action):
  150.     code = request.POST['code']
  151.    
  152.     if action in ['add', 'delete']:
  153.        
  154.         urlpattern_id = int(request.POST['urlpattern_id'])
  155.        
  156.         lines = code.split('\n')
  157.         new_lines = []
  158.         i = 0
  159.         s = ''
  160.         for line in lines:
  161.             t = False
  162.             e = None
  163.             for expression in expressions:
  164.                 m = re.search(expressions[expression], line)
  165.                 if m:
  166.                     t = True
  167.                     e = expressions[expression]
  168.                     break
  169.             if t:
  170.                 newstr = line
  171.                 print i, urlpattern_id
  172.                 if i != urlpattern_id:
  173.                     print newstr
  174.                     new_lines.append(newstr)
  175.                 else:
  176.                     if action == 'add':
  177.                         new_lines.append(newstr)
  178.                         new_lines.append("    (r' ', ' '),")
  179.                 i += 1
  180.             else:
  181.                 new_lines.append(line)
  182.         code = '\n'.join(new_lines)
  183.     response_data = {'code': code, 'data': process_urlpatterns(code)}
  184.     return HttpResponse(json.dumps(response_data), mimetype="application/json")    
  185.        
  186. def reorder(request):
  187.     positions = [int(position[11:]) for i, position in enumerate(request.POST['positions'].split(',')) if i != int(position[11:])]
  188.     print [len(positions) - 1] + range(len(positions) - 1)
  189.     print positions
  190.     if [len(positions) - 1] + range(len(positions) - 1) == positions:
  191.         print 'passed test'
  192.         urlpattern_strings = []
  193.         code = request.POST['code']
  194.         new_lines_positions = []
  195.         lines = code.split('\n')
  196.         new_lines = []
  197.         i = 0
  198.         s = ''
  199.         for line in lines:
  200.             t = False
  201.             e = None
  202.             for expression in expressions:
  203.                 m = re.search(expressions[expression], line)
  204.                 if m:
  205.                     t = True
  206.                     e = expressions[expression]
  207.                     break
  208.             if t:
  209.                 newstr = line
  210.                 new_lines.append(newstr)
  211.                 #if i in positions:
  212.                 new_lines_positions.append(len(new_lines) - 1)
  213.                 i += 1
  214.                 urlpattern_strings.append(newstr)
  215.                
  216.             else:
  217.                 new_lines.append(line)
  218.         new_lines.insert(new_lines_positions[0], urlpattern_strings[-1])
  219.         del new_lines[new_lines_positions[-1] + 1]    
  220.     else:
  221.         positions = sorted([int(position[11:]) for i, position in enumerate(request.POST['positions'].split(',')) if i != int(position[11:])])
  222.         urlpattern_strings = []
  223.         code = request.POST['code']
  224.         new_lines_positions = []
  225.         lines = code.split('\n')
  226.         new_lines = []
  227.         i = 0
  228.         s = ''
  229.         for line in lines:
  230.             t = False
  231.             e = None
  232.             for expression in expressions:
  233.                 m = re.search(expressions[expression], line)
  234.                 if m:
  235.                     t = True
  236.                     e = expressions[expression]
  237.                     break
  238.             if t:
  239.                 newstr = line
  240.                 new_lines.append(newstr)
  241.                 #if i in positions:
  242.                 new_lines_positions.append(len(new_lines) - 1)
  243.                 i += 1
  244.                 urlpattern_strings.append(newstr)
  245.                
  246.             else:
  247.                 new_lines.append(line)
  248.        
  249.         print len(new_lines)
  250.         print 'nlp: ', new_lines_positions
  251.         new_lines[new_lines_positions[positions[0]]] = urlpattern_strings[positions[1]]
  252.         print 'positions', positions
  253.         print urlpattern_strings
  254.         print new_lines_positions
  255.         new_lines[new_lines_positions[positions[1]]] = urlpattern_strings[positions[0]]
  256.     response_data = {'code': '\n'.join(new_lines), 'data': process_urlpatterns('\n'.join(new_lines))}
  257.     return HttpResponse(json.dumps(response_data), mimetype="application/json")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement