Package org.pyant.tasks

Source Code of org.pyant.tasks.PythonDocTask

/*
* Created on May 7, 2004
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
package org.pyant.tasks;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.FileSet;


/**
* @author Ron Smith
*
* <py-doc pythonpathref="project.python.path" defaultexcludes="true"
*   destdir="docs">
*   <fileset dir="testscripts2">
*     <include name="** /*"/>
*    </fileset>
* </py-doc>
*/
public class PythonDocTask extends PythonInteractiveBaseTask
{
  protected ArrayList filesets = new ArrayList();
  protected boolean defaultExcludes = true;
  protected File destdir = null;
 
  private final static String FAIL_MSG = "Documentation generation failed; See output for details";
 
  public void execute()
  {
    Project project = getProject();
    project.log("PythonDocTask.execute()", Project.MSG_DEBUG);
    project.log("destdir=" + destdir);
   
    // TODO: Fail if destdir not set

    String modulesArg = getModulesArg(project);

    String script = "import pydoc;import sys;sys.argv=['aa','-w', " + modulesArg + "];pydoc.cli()";

    project.log("modules: " + modulesArg);

    this.script = script;
   
    executeScript(project, this.destdir, FAIL_MSG);

   
  }

  public void setDestdir(File destdir)
  {
    this.destdir = destdir;
  }
 
  /**
   *
   * @param project
   */
  protected String getModulesArg(Project project) {
    StringBuffer modulesArg = new StringBuffer();
    boolean isFirst = true;
    Iterator fsIter = filesets.iterator();
    while(fsIter.hasNext())
    {
      FileSet fs = (FileSet)fsIter.next();
      DirectoryScanner ds = fs.getDirectoryScanner(project);
      String[] files = ds.getIncludedFiles();
      for(int i = 0; i < files.length; i++)
      {
        String fileName = files[i];
       
        if(defaultExcludes)
        {
          // Exclude .pyc and .pyo files
          if(fileName.endsWith(".pyc") || fileName.endsWith(".pyo"))
          {
            continue;
          }
        }
        if(fileName.endsWith(".py"))
        {
          fileName = fileName.substring(0, fileName.length() - 3);
        }
       
        if(isFirst)
        {
          modulesArg.append("'" + fileName + "'");
          isFirst = false;
        }
        else
        {
          modulesArg.append(",'" + fileName + "'");
        }
      }
     
      String[] dirs = ds.getIncludedDirectories();
      for(int i = 0; i < dirs.length; i++)
      {
        String dirName = dirs[i];
        if(isFirst)
        {
          modulesArg.append("'" + dirName + "'");
          isFirst = false;
        }
        modulesArg.append(",'" + dirName + "'");       
      }
    }

    String retVal = modulesArg.toString();
    retVal = retVal.replace('\\', '.');
    retVal = retVal.replace('/', '.');
    return (retVal);
  }

  public void addFileSet(FileSet fs)
  {
    this.filesets.add(fs);
  }

  /**
   * @return Returns the defaultExcludes.
   */
  public boolean isDefaultExcludes() {
    return defaultExcludes;
  }
  /**
   * @param defaultExcludes The defaultExcludes to set.
   */
  public void setDefaultExcludes(boolean defaultExcludes) {
    this.defaultExcludes = defaultExcludes;
  }

}
TOP

Related Classes of org.pyant.tasks.PythonDocTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.