[Zope3-checkins] SVN: Zope3/trunk/ convert importorder.py to a tool
in a package so there is a good place to
Fred L. Drake, Jr.
fdrake at gmail.com
Thu Aug 5 18:09:11 EDT 2004
Log message for revision 26930:
convert importorder.py to a tool in a package so there is a good place to
hang tests
(merged from ZopeX3-3.0 branch revision 26929)
Changed:
A Zope3/trunk/src/zope/importtool/order.py
A Zope3/trunk/utilities/importorder
D Zope3/trunk/utilities/importorder.py
-=-
Copied: Zope3/trunk/src/zope/importtool/order.py (from rev 26929, Zope3/branches/ZopeX3-3.0/src/zope/importtool/order.py)
Property changes on: Zope3/trunk/src/zope/importtool/order.py
___________________________________________________________________
Name: cvs2svn:cvs-rev
+ 1.1
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Copied: Zope3/trunk/utilities/importorder (from rev 26929, Zope3/branches/ZopeX3-3.0/utilities/importorder)
Property changes on: Zope3/trunk/utilities/importorder
___________________________________________________________________
Name: svn:executable
+ *
Deleted: Zope3/trunk/utilities/importorder.py
===================================================================
--- Zope3/trunk/utilities/importorder.py 2004-08-05 22:04:16 UTC (rev 26929)
+++ Zope3/trunk/utilities/importorder.py 2004-08-05 22:09:09 UTC (rev 26930)
@@ -1,387 +0,0 @@
-#! /usr/bin/env python2.3
-##############################################################################
-#
-# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""
-This tool basically can be used to rearrange and order imported
-python packages in a particular format for .py files.
-
-Import Order:-
- 1. import modules from standard python library/global packages
- 2. import modules from the zope package
- 3. import modules from the zope.app package
-
-.py [-dfhst] [file/directory]
-
--d / --dir
- It will sort all the .py files imported python packages in the
- entire directory .
-
--D / --display
- Displays Import oder for all .py files in the specified path.
-
--f / --file
- It will order all imported python packages in a file.
-
--s / --split
- It splits up multiple import modules in a single import statement
- into multiple import statements.
-
-
--t / --test
- It Displays Import order for all py files in the specified path and
- doesn't write importorder into .py file.
-
-$Id$
-"""
-
-import getopt
-import glob
-import os
-import string
-import sys
-import tokenize
-
-
-PYTHONFILE_FILTER = '*.py'
-FROMIMPORT = 'from '
-IMPORT = 'import '
-FROMIMPORT_ZOPE = 'from zope'
-IMPORT_ZOPE = 'import zope'
-FROMIMPORT_ZOPE_APP = 'from zope.app'
-IMPORT_ZOPE_APP = 'import zope.app'
-NO_CHARACTERS = 80
-
-
-def getPythonFiles(path):
- """returns list of .py files in the specified path"""
- pyfiles = []
- if not os.path.exists(path):
- print >> sys.stderr, '** Error: '+ path +' not a valid path **'
- sys.exit(0)
-
- #checking path is file
- if os.path.isfile(path):
- pyfiles.append(path)
-
- #checking path is a directory
- elif os.path.isdir(path):
- path = os.path.join(path, PYTHONFILE_FILTER)
- path, filter = os.path.split(path)
- pyfiles.extend(glob.glob(os.path.join(path, filter)))
-
- #checking in sub directories
- for root, dirs, files in os.walk(path):
- for dir in dirs:
- pyfiles.extend(glob.glob(\
- os.path.join(root, dir, filter)))
-
- return pyfiles
-
-
-def importOrderProcessing(path, display=None, write=None, split=None):
- """process import order for all .py files in the specified path."""
- pyfiles = getPythonFiles(path)
-
- print '*****************************************************************'
- for file in pyfiles:
- print '** File : %s **\n' % (file)
- import_block = getFileImportOrder(file, split)
- import_order = import_block['import_order']
- non_import_order = import_block['non_import_order']
- if display:
- print non_import_order
- print '**.......................................................**'
- print import_order
- if write:
- writeFormatedContent(file, import_order, non_import_order)
-
-
- print '*****************************************************************'
-
-
-def getFileImportOrder(file, split=None):
- """returns formatted imported packages content"""
- import_content = getFileImportContent(file)
- import_list = appendImportsToList(import_content)
-
- #separating from and import statements
- imp_list = filterList(import_list, 'import ')
- from_list = filterList(import_list, 'from ')
-
- #extracting non import content
- non_import_block = removeList(import_list, imp_list)
- non_import_block = removeList(non_import_block, from_list)
- non_import_block_fmt = formateBlock(non_import_block)
-
- #comma separated imports into individual import statements
- if split:
- imp_list = individualImportLines(imp_list)
- from_list = individualImportLines(from_list)
-
- #extracting zope.app package imports
- zope_app_imp_list = filterList(imp_list, IMPORT_ZOPE_APP)
- zope_app_from_list = filterList(from_list, FROMIMPORT_ZOPE_APP)
-
- rem_imp_list1 = removeList(imp_list, zope_app_imp_list)
- rem_from_list1 = removeList(from_list, zope_app_from_list)
-
- #extracting zope package imports
- zope_imp_list = filterList(rem_imp_list1, IMPORT_ZOPE)
- zope_from_list = filterList(rem_from_list1, FROMIMPORT_ZOPE)
-
- #extracting global package imports
- global_imp_list = removeList(rem_imp_list1, zope_imp_list)
- global_from_list = removeList(rem_from_list1, zope_from_list)
-
- #formating the global, zope and zope.app package imports
- format_import_content = mergeAllBlocks(global_imp_list,
- zope_imp_list,
- zope_app_imp_list,
- global_from_list,
- zope_from_list,
- zope_app_from_list)
-
- #merging import block and non import block
- non_import_block_fmt = string.strip(non_import_block_fmt)
- if len(non_import_block_fmt) > 0:
- non_import_block_fmt += '\n\n'
-
- fmt_content = format_import_content + non_import_block_fmt
-
- return {'import_order':fmt_content,
- 'non_import_order':import_content}
-
-
-
-def getFileImportContent(file):
- """returns the imports content available at the top in the .py file"""
- import_list = []
- lines = []
- import_block_start_indx = 0
- import_block_end_indx = 0
- index = 0
- for t in tokenize.generate_tokens(open(file, 'rU').readline):
- type, string, start, end, line = t
- line_no = start[0]
- line_len = len(line)
-
- if line_no not in lines:
- lines.append(line_no)
- index += line_len
- if string in ['from','import'] and line not in import_list:
- if len(import_list) == 0:
- import_block_start_indx = (index - line_len)
- import_list.append(line)
- import_block_end_indx = index
- elif string in ['def', 'class']:
- break
-
- fc = open(file, 'r').read()
- return fc[import_block_start_indx-4:import_block_end_indx-4]
-
-
-def appendImportsToList(import_content):
- """returns list of imports of the file"""
- import_list = import_content.split('\\')
- if len(import_list) > 1:
- import_list = concatinateBreakImports(import_list)
- else:
- import_list = import_content.split('\n')
-
- return import_list
-
-
-def concatinateBreakImports(import_list):
- """concatinate imports into single item in a list"""
- indx = 1
- concate_list = []
- for item in import_list:
- if indx == 1:
- concate_list += item.split('\n')
- else:
- concate_item = []
- item = string.lstrip(item)
- item_list = item.split('\n')
- concate_litem = concate_list[-1:][0]
- item_list_fitem = item_list[:1][0]
- concate_item.append(concate_litem + item_list_fitem)
- concate_list = concate_list[:-1] + concate_item + item_list[1:]
- indx += 1
-
- return concate_list
-
-
-def filterList(list, filter):
- """returns filtered list"""
- filter_list = [item for item in list
- if item.startswith(filter)]
- filter_list.sort()
- return filter_list
-
-def individualImportLines(import_list):
- """changes comma separated imports to individual import lines"""
- import_str = 'import '
- new_import_list = []
- for item in import_list:
- if item.find(',') > -1 and (item.startswith('from ') or
- item.startswith('import ')):
- import_item_split = item.split('import ')
- from_import_item = import_item_split[0]
- comma_imports = import_item_split[1].split(',')
- new_list = []
- for mod_item in comma_imports:
- mod_item = string.lstrip(mod_item)
- new_list.append(from_import_item + import_str + mod_item)
- new_import_list += new_list
- else:
- new_import_list.append(item)
-
- return new_import_list
-
-
-def removeList(list, rem_list):
- return [item for item in list
- if item not in rem_list]
-
-def mergeAllBlocks(global_imp_list, zope_imp_list, zope_app_imp_list,
- global_from_list, zope_from_list, zope_app_from_list):
- """merges global, zope and zope.app imports """
- import_block = ''
- global_imp_block = formateBlock(global_imp_list)
- global_from_block = formateBlock(global_from_list)
- zope_imp_block = formateBlock(zope_imp_list)
- zope_from_block = formateBlock(zope_from_list)
- zope_app_imp_block = formateBlock(zope_app_imp_list)
- zope_app_from_block = formateBlock(zope_app_from_list)
-
- import_block += formatsFromAndImportBlock(global_imp_block,
- global_from_block)
-
- import_block += formatsFromAndImportBlock(zope_imp_block,
- zope_from_block)
-
- import_block += formatsFromAndImportBlock(zope_app_imp_block,
- zope_app_from_block)
-
- return import_block
-
-
-def formatsFromAndImportBlock(imp_block, from_block):
- """formats from and import block"""
- import_block = ''
- if imp_block is not '' or from_block is not '':
- import_block += imp_block
- import_block += from_block
- import_block += '\n'
- return import_block
-
-
-def formateBlock(imp_list):
- """formats import blocks"""
- import_block = ''
- if imp_list is not None:
- for item in imp_list:
- if len(item) > NO_CHARACTERS:
- import_block += formatingLargerImports(item)
- else:
- import_block += str(item) + '\n'
- return import_block
-
-def formatingLargerImports(import_content):
- """formates if imports greater than 80 character"""
- formatted_line = ''
- import_fline = import_content[:NO_CHARACTERS]
-
- dot_indx = import_fline.rfind('.')
- blank_space_indx = import_fline.rfind(' ')
-
- split_line_indx = 0
- if dot_indx > -1:
- split_line_indx = dot_indx
- if blank_space_indx > -1 and blank_space_indx < dot_indx:
- split_line_indx = blank_space_indx
- elif blank_space_indx > -1:
- split_line_indx = blank_space_indx
- if dot_indx > -1 and dot_indx < blank_space_indx:
- split_line_indx = blank_space_indx
-
- split_line_indx += 1
-
- formatted_line += import_content[:split_line_indx] +'\\\n'
- if import_content.startswith(IMPORT):
- formatted_line += (' ' +
- import_content[split_line_indx:] + '\n')
- elif import_content.startswith(FROMIMPORT):
- formatted_line += (' ' +
- import_content[split_line_indx:] + '\n')
-
- return formatted_line
-
-
-
-def writeFormatedContent(file, fmt_content, non_fmt_content):
- """writes formatted content into the file"""
-
- fp = open(file, 'r')
- file_content = fp.read()
- fp.close()
-
- fp = open(file, 'w')
- rep_content = string.replace(file_content, non_fmt_content,
- fmt_content)
- fp.write(rep_content)
- fp.close()
-
-
-if __name__ == "__main__":
- try:
- opts, args = getopt.getopt(sys.argv[1:], "dDfhst",
- ["help", "dir", "file", "display",
- "split", "test"])
- except getopt.error, msg:
- print msg
- print "Try `python %s -h' for more information." % argv[0]
- sys.exit(2)
-
- path = None
- display = None
- write = True
- split = None
- opts.sort()
-
- for k, v in opts:
- if k in ("-h", "--help"):
- print __doc__
- sys.exit(0)
- elif k in ("-d", "--dir"):
- path = args[0]
- elif k in ("-f", "--file"):
- path = args[0]
- elif k in ("-D", "--display"):
- path = args[0]
- display = True
- elif k in ("-s", "--split"):
- path = args[0]
- split = True
- elif k in ("-t", "--test"):
- path = args[0]
- display = True
- write = False
-
- importOrderProcessing(path, display, write, split)
-
-
-
-
-
More information about the Zope3-Checkins
mailing list