def buildPDF(self, bookPath, inputDirectory, outputPath): """ Build a PDF from the given a LaTeX book document. @type bookPath: L{FilePath} @param bookPath: The location of a LaTeX document defining a book. @type inputDirectory: L{FilePath} @param inputDirectory: The directory which the inputs of the book are relative to. @type outputPath: L{FilePath} @param outputPath: The location to which to write the resulting book. """ if not bookPath.basename().endswith(".tex"): raise ValueError("Book filename must end with .tex") workPath = FilePath(mkdtemp()) try: startDir = os.getcwd() try: os.chdir(inputDirectory.path) texToDVI = [ "latex", "-interaction=nonstopmode", "-output-directory=" + workPath.path, bookPath.path ] # What I tell you three times is true! # The first two invocations of latex on the book file allows it # correctly create page numbers for in-text references. Why this is # the case, I could not tell you. -exarkun for i in range(3): self.run(texToDVI) bookBaseWithoutExtension = bookPath.basename()[:-4] dviPath = workPath.child(bookBaseWithoutExtension + ".dvi") psPath = workPath.child(bookBaseWithoutExtension + ".ps") pdfPath = workPath.child(bookBaseWithoutExtension + ".pdf") self.run([ "dvips", "-o", psPath.path, "-t", "letter", "-Ppdf", dviPath.path ]) self.run(["ps2pdf13", psPath.path, pdfPath.path]) pdfPath.moveTo(outputPath) workPath.remove() finally: os.chdir(startDir) except: workPath.moveTo(bookPath.parent().child(workPath.basename())) raise
def buildPDF(self, bookPath, inputDirectory, outputPath): """ Build a PDF from the given a LaTeX book document. @type bookPath: L{FilePath} @param bookPath: The location of a LaTeX document defining a book. @type inputDirectory: L{FilePath} @param inputDirectory: The directory which the inputs of the book are relative to. @type outputPath: L{FilePath} @param outputPath: The location to which to write the resulting book. """ if not bookPath.basename().endswith(".tex"): raise ValueError("Book filename must end with .tex") workPath = FilePath(mkdtemp()) try: startDir = os.getcwd() try: os.chdir(inputDirectory.path) texToDVI = [ "latex", "-interaction=nonstopmode", "-output-directory=" + workPath.path, bookPath.path] # What I tell you three times is true! # The first two invocations of latex on the book file allows it # correctly create page numbers for in-text references. Why this is # the case, I could not tell you. -exarkun for i in range(3): self.run(texToDVI) bookBaseWithoutExtension = bookPath.basename()[:-4] dviPath = workPath.child(bookBaseWithoutExtension + ".dvi") psPath = workPath.child(bookBaseWithoutExtension + ".ps") pdfPath = workPath.child(bookBaseWithoutExtension + ".pdf") self.run([ "dvips", "-o", psPath.path, "-t", "letter", "-Ppdf", dviPath.path]) self.run(["ps2pdf13", psPath.path, pdfPath.path]) pdfPath.moveTo(outputPath) workPath.remove() finally: os.chdir(startDir) except: workPath.moveTo(bookPath.parent().child(workPath.basename())) raise
def buildAllTarballs(checkout, destination): """ Build complete tarballs (including documentation) for Twisted and all subprojects. This should be called after the version numbers have been updated and NEWS files created. @type checkout: L{FilePath} @param checkout: The SVN working copy from which a pristine source tree will be exported. @type destination: L{FilePath} @param destination: The directory in which tarballs will be placed. @raise UncleanWorkingDirectory: if there are modifications to the working directory of C{checkout}. @raise NotWorkingDirectory: if the checkout path is not an SVN checkout. """ if not checkout.child(".svn").exists(): raise NotWorkingDirectory( "%s does not appear to be an SVN working directory." % (checkout.path, )) if runCommand(["svn", "st", checkout.path]).strip(): raise UncleanWorkingDirectory( "There are local modifications to the SVN checkout in %s." % (checkout.path, )) workPath = FilePath(mkdtemp()) export = workPath.child("export") runCommand(["svn", "export", checkout.path, export.path]) twistedPath = export.child("twisted") version = Project(twistedPath).getVersion() versionString = version.base() apiBaseURL = "http://twistedmatrix.com/documents/%s/api/%%s.html" % ( versionString) if not destination.exists(): destination.createDirectory() db = DistributionBuilder(export, destination, apiBaseURL=apiBaseURL) db.buildCore(versionString) for subproject in twisted_subprojects: if (subproject not in db.blacklist and twistedPath.child(subproject).exists()): db.buildSubProject(subproject, versionString) db.buildTwisted(versionString) workPath.remove()
def buildAllTarballs(checkout, destination): """ Build complete tarballs (including documentation) for Twisted and all subprojects. This should be called after the version numbers have been updated and NEWS files created. @type checkout: L{FilePath} @param checkout: The SVN working copy from which a pristine source tree will be exported. @type destination: L{FilePath} @param destination: The directory in which tarballs will be placed. @raise UncleanWorkingDirectory: if there are modifications to the working directory of C{checkout}. @raise NotWorkingDirectory: if the checkout path is not an SVN checkout. """ if not checkout.child(".svn").exists(): raise NotWorkingDirectory( "%s does not appear to be an SVN working directory." % (checkout.path,)) if runCommand(["svn", "st", checkout.path]).strip(): raise UncleanWorkingDirectory( "There are local modifications to the SVN checkout in %s." % (checkout.path,)) workPath = FilePath(mkdtemp()) export = workPath.child("export") runCommand(["svn", "export", checkout.path, export.path]) twistedPath = export.child("twisted") version = Project(twistedPath).getVersion() versionString = version.base() apiBaseURL = "http://twistedmatrix.com/documents/%s/api/%%s.html" % ( versionString) if not destination.exists(): destination.createDirectory() db = DistributionBuilder(export, destination, apiBaseURL=apiBaseURL) db.buildCore(versionString) for subproject in twisted_subprojects: if (subproject not in db.blacklist and twistedPath.child(subproject).exists()): db.buildSubProject(subproject, versionString) db.buildTwisted(versionString) workPath.remove()
def test_getScriptsTopLevel(self): """ Passing the empty string to getScripts returns scripts that are (only) in the top level bin directory. """ basedir = FilePath(self.mktemp()) basedir.createDirectory() bindir = basedir.child("bin") bindir.createDirectory() included = bindir.child("included") included.setContent("yay included") subdir = bindir.child("subdir") subdir.createDirectory() subdir.child("not-included").setContent("not included") scripts = dist.getScripts("", basedir=basedir.path) self.assertEquals(scripts, [included.path])
class FormatDiscoveryTests(unittest.TestCase): """ Tests which discover the parsing method based on the imported module name. """ def setUp(self): """ Create a temporary directory with a package structure in it. """ self.entry = FilePath(self.mktemp()) self.preTestModules = sys.modules.copy() sys.path.append(self.entry.path) pkg = self.entry.child("twisted_python_versions_package") pkg.makedirs() pkg.child("__init__.py").setContent( "from reqs.twisted.python.versions import Version\n" "version = Version('twisted_python_versions_package', 1, 0, 0)\n") self.svnEntries = pkg.child(".svn") self.svnEntries.makedirs() def tearDown(self): """ Remove the imported modules and sys.path modifications. """ sys.modules.clear() sys.modules.update(self.preTestModules) sys.path.remove(self.entry.path) def checkSVNFormat(self, formatVersion, entriesText, expectedRevision): """ Check for the given revision being detected after setting the SVN entries text and format version of the test directory structure. """ self.svnEntries.child("format").setContent(formatVersion + "\n") self.svnEntries.child("entries").setContent(entriesText) self.assertEqual(self.getVersion()._getSVNVersion(), expectedRevision) def getVersion(self): """ Import and retrieve the Version object from our dynamically created package. """ import twisted_python_versions_package return twisted_python_versions_package.version def test_detectVersion4(self): """ Verify that version 4 format file will be properly detected and parsed. """ self.checkSVNFormat("4", VERSION_4_ENTRIES, '18211') def test_detectVersion8(self): """ Verify that version 8 format files will be properly detected and parsed. """ self.checkSVNFormat("8", VERSION_8_ENTRIES, '22715') def test_detectVersion9(self): """ Verify that version 9 format files will be properly detected and parsed. """ self.checkSVNFormat("9", VERSION_9_ENTRIES, '22715') def test_detectVersion10(self): """ Verify that version 10 format files will be properly detected and parsed. Differing from previous formats, the version 10 format lacks a I{format} file and B{only} has the version information on the first line of the I{entries} file. """ self.svnEntries.child("entries").setContent(VERSION_10_ENTRIES) self.assertEquals(self.getVersion()._getSVNVersion(), '22715') def test_detectUnknownVersion(self): """ Verify that a new version of SVN will result in the revision 'Unknown'. """ self.checkSVNFormat("some-random-new-version", "ooga booga!", 'Unknown')
class FormatDiscoveryTests(unittest.TestCase): """ Tests which discover the parsing method based on the imported module name. """ def setUp(self): """ Create a temporary directory with a package structure in it. """ self.entry = FilePath(self.mktemp()) self.preTestModules = sys.modules.copy() sys.path.append(self.entry.path) pkg = self.entry.child("twisted_python_versions_package") pkg.makedirs() pkg.child("__init__.py").setContent( "from reqs.twisted.python.versions import Version\n" "version = Version('twisted_python_versions_package', 1, 0, 0)\n") self.svnEntries = pkg.child(".svn") self.svnEntries.makedirs() def tearDown(self): """ Remove the imported modules and sys.path modifications. """ sys.modules.clear() sys.modules.update(self.preTestModules) sys.path.remove(self.entry.path) def checkSVNFormat(self, formatVersion, entriesText, expectedRevision): """ Check for the given revision being detected after setting the SVN entries text and format version of the test directory structure. """ self.svnEntries.child("format").setContent(formatVersion+"\n") self.svnEntries.child("entries").setContent(entriesText) self.assertEqual(self.getVersion()._getSVNVersion(), expectedRevision) def getVersion(self): """ Import and retrieve the Version object from our dynamically created package. """ import twisted_python_versions_package return twisted_python_versions_package.version def test_detectVersion4(self): """ Verify that version 4 format file will be properly detected and parsed. """ self.checkSVNFormat("4", VERSION_4_ENTRIES, '18211') def test_detectVersion8(self): """ Verify that version 8 format files will be properly detected and parsed. """ self.checkSVNFormat("8", VERSION_8_ENTRIES, '22715') def test_detectVersion9(self): """ Verify that version 9 format files will be properly detected and parsed. """ self.checkSVNFormat("9", VERSION_9_ENTRIES, '22715') def test_detectVersion10(self): """ Verify that version 10 format files will be properly detected and parsed. Differing from previous formats, the version 10 format lacks a I{format} file and B{only} has the version information on the first line of the I{entries} file. """ self.svnEntries.child("entries").setContent(VERSION_10_ENTRIES) self.assertEquals(self.getVersion()._getSVNVersion(), '22715') def test_detectUnknownVersion(self): """ Verify that a new version of SVN will result in the revision 'Unknown'. """ self.checkSVNFormat("some-random-new-version", "ooga booga!", 'Unknown')