PK \lM distributionPackage/VERSION0.5.0
PK VlMGc distributionPackage/__init__.py#
# Copyright 2017 Russell Smiley
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
"""
A packaging utility for creating packages of files for distribution based on a YAML manifest.
"""
import os.path
here = os.path.abspath( os.path.dirname( __file__ ) )
with open( os.path.join( here, 'VERSION' ) ) as versionFile :
version = versionFile.read()
__version__ = version.strip()
from .main import main
PK VlMӯ distributionPackage/main.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
import sys
from packageManifest import Manifest
from distributionPackage.app.arguments import parseArguments
from distributionPackage.package import Package
def main() :
packageOptions = parseArguments( sys.argv[ 1 : ] )
thisManifest = Manifest.from_yamlFile( packageOptions.manifestPath,
rootDirectory = packageOptions.projectRoot )
thisPackage = Package( thisManifest, packageOptions )
thisPackage.build()
if __name__ == '__main__' :
main()
PK VlM8I, , # distributionPackage/app/__init__.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
from .arguments import parseArguments
from .options import PackageOptionsPK VlMwWf $ distributionPackage/app/arguments.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
"""
Parse command line arguments.
"""
import argparse
from .options import PackageOptions
def parseArguments( arguments ) :
"""
Parse ``sys.argv[1:]`` style command line arguments.
:param arguments: Command line arguments.
:return: ``PackageOptions`` object.
"""
parser = argparse.ArgumentParser( description = 'Build a distribution package from a manifest' )
parser.add_argument( '-a', '--append',
action = 'store_true',
default = False,
dest = 'append',
help = 'Append to an existing distribution package, if it exists. Created otherwise. ('
'default disabled)' )
parser.add_argument( '-m', '--manifest',
default = 'manifest.yml',
dest = 'manifest',
help = 'Manifest file to use to build the package. (default manifest.yml)' )
parser.add_argument( '-o', '--output',
default = '.',
help = 'Directory to place the generated distribution files. Created if not present. ('
'default ./)' )
parser.add_argument( '-p', '--package',
default = 'distribution-out',
help = 'Filename stub of output package, not including suffix or version info. (default '
'distribution-out)' )
parser.add_argument( '-r', '--project-root',
default = '.',
dest = 'projectRoot',
help = 'Project root to package files from. (default ./)' )
parser.add_argument( '-n', '--no-tar',
action = 'store_false',
default = True,
dest = 'buildTar',
help = 'Disable tar, gzip output distribution. (default enabled)' )
parser.add_argument( '-z', '--zip',
action = 'store_true',
default = False,
dest = 'buildZip',
help = 'Enable zip output distribution. (default disabled)' )
args = parser.parse_args( arguments )
packageOptions = PackageOptions( args )
return packageOptions
PK VlMYG~ ~ " distributionPackage/app/options.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
"""
User specified packaging options.
"""
import os
class PackageOptions :
"""
Collect parsed argument values, producing "composited" values such as file paths as necessary.
"""
def __init__( self,
parsedArguments = None ) :
self.append = None
self.manifest = None
self.output = None
self.package = None
self.projectRoot = None
self.isTarFile = None
self.isZipFile = None
if parsedArguments is not None :
self.append = parsedArguments.append
self.manifest = parsedArguments.manifest
self.output = parsedArguments.output
self.package = parsedArguments.package
self.projectRoot = parsedArguments.projectRoot
self.isTarFile = parsedArguments.buildTar
self.isZipFile = parsedArguments.buildZip
@property
def manifestPath( self ) :
return self.manifest
@property
def tarPackagePath( self ) :
if self.isTarFile :
packagePath = os.path.join( self.output, '{0}.tar.gz'.format( self.package ) )
else :
packagePath = None
return packagePath
@property
def zipPackagePath( self ) :
if self.isZipFile :
packagePath = os.path.join( self.output, '{0}.zip'.format( self.package ) )
else :
packagePath = None
return packagePath
PK VlM_S ) distributionPackage/app/tests/__init__.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
PK VlMԬB 3 distributionPackage/app/tests/testAppendArgument.py#
# Copyright 2018 Russell Smiley
#
# This file is part of packager.
#
# packager is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# packager is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with packager. If not, see .
#
import unittest
from ..arguments import parseArguments
class TestAppendArgument( unittest.TestCase ) :
def testDefault( self ) :
expectedValue = False
packageOptions = parseArguments( list() )
actualValue = packageOptions.append
self.assertEqual( expectedValue, actualValue )
def testGoodValue( self ) :
expectedValue = True
packageOptions = parseArguments( [ '--append' ] )
actualValue = packageOptions.append
self.assertEqual( expectedValue, actualValue )
if __name__ == '__main__' :
unittest.main()
PK VlMx[
[
5 distributionPackage/app/tests/testManifestArgument.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
"""
Test package options relating to manifest specification.
"""
import os
import unittest
from ..arguments import parseArguments
class TestManifestArgument( unittest.TestCase ) :
def testDefaultManifest( self ) :
"""
Manifest defaults
"""
expectedDefaultManifestPath = 'manifest.yml'
packageOptions = parseArguments( list() )
actualManifestPath = packageOptions.manifestPath
self.assertEqual( expectedDefaultManifestPath, actualManifestPath )
def testShortFormManifest( self ) :
"""
Short form manifest option.
"""
manifestFile = 'some-manifest.yml'
expectedManifestPath = manifestFile
packageOptions = parseArguments( [ '-m', manifestFile ] )
actualManifestPath = packageOptions.manifestPath
self.assertEqual( expectedManifestPath, actualManifestPath )
def testLongFormManifest( self ) :
"""
Long form manifest option.
"""
manifestFile = 'some-manifest.yml'
expectedManifestPath = manifestFile
packageOptions = parseArguments( [ '--manifest', manifestFile ] )
actualManifestPath = packageOptions.manifestPath
self.assertEqual( expectedManifestPath, actualManifestPath )
def testManifestWithOutput( self ) :
"""
The user specified manifest must be used independently of other arguments.
"""
expectedManifestArgument = 'some/manifest.yml'
outputArgument = 'another/path'
inputArguments = [
'-m',
expectedManifestArgument,
'-o',
outputArgument,
]
packageOptions = parseArguments( inputArguments )
actualManifestPath = packageOptions.manifestPath
self.assertEqual( expectedManifestArgument, actualManifestPath )
if __name__ == '__main__' :
unittest.main()
PK VlM{ , distributionPackage/app/tests/testOptions.py#
# Copyright 2018 Russell Smiley
#
# This file is part of packager.
#
# packager is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# packager is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with packager. If not, see .
#
"""
Test user specified packaging options.
"""
import os
import unittest
from ..options import PackageOptions
class TestPackageOptions( unittest.TestCase ) :
def setUp( self ) :
self.optionsUnderTest = PackageOptions()
def testDefaults( self ) :
self.assertIsNone( self.optionsUnderTest.append )
self.assertIsNone( self.optionsUnderTest.manifest )
self.assertIsNone( self.optionsUnderTest.output )
self.assertIsNone( self.optionsUnderTest.package )
self.assertIsNone( self.optionsUnderTest.projectRoot )
self.assertIsNone( self.optionsUnderTest.isTarFile )
self.assertIsNone( self.optionsUnderTest.isZipFile )
def testManifestPath( self ) :
self.optionsUnderTest.manifest = 'some/path'
self.assertEqual( self.optionsUnderTest.manifest, self.optionsUnderTest.manifestPath )
def testTarPackagePathEnabled( self ) :
self.optionsUnderTest.isTarFile = True
self.optionsUnderTest.output = 'some/path'
self.optionsUnderTest.package = 'package-name'
expectedPath = os.path.join( self.optionsUnderTest.output, '{0}.tar.gz'.format( self.optionsUnderTest.package
) )
self.assertEqual( expectedPath, self.optionsUnderTest.tarPackagePath )
def testTarPackagePathDisabled( self ) :
self.optionsUnderTest.isTarFile = False
self.assertIsNone( self.optionsUnderTest.tarPackagePath )
def testZipPackagePathEnabled( self ) :
self.optionsUnderTest.isZipFile = True
self.optionsUnderTest.output = 'some/path'
self.optionsUnderTest.package = 'package-name'
expectedPath = os.path.join( self.optionsUnderTest.output, '{0}.zip'.format( self.optionsUnderTest.package ) )
self.assertEqual( expectedPath, self.optionsUnderTest.zipPackagePath )
def testZipPackagePathDisabled( self ) :
self.optionsUnderTest.isZipFile = False
self.assertIsNone( self.optionsUnderTest.zipPackagePath )
if __name__ == '__main__' :
unittest.main()
PK VlM$rH H 3 distributionPackage/app/tests/testOutputArgument.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
import os
import unittest
from ..arguments import parseArguments
class MyTestOutputArgument( unittest.TestCase ) :
def testDefaultOutput( self ) :
expectedDefaultOutput = '.'
packageOptions = parseArguments( list() )
actualPath = packageOptions.tarPackagePath
actualOutput = os.path.dirname( actualPath )
self.assertEqual( expectedDefaultOutput, actualOutput )
def testShortFormOutput( self ) :
expectedOutput = os.path.join( 'some', 'path' )
packageOptions = parseArguments( [ '-o', expectedOutput ] )
actualPath = packageOptions.tarPackagePath
actualOutput = os.path.dirname( actualPath )
self.assertEqual( expectedOutput, actualOutput )
def testLongFormOutput( self ) :
expectedOutput = os.path.join( 'some', 'path' )
packageOptions = parseArguments( [ '--output', expectedOutput ] )
actualPath = packageOptions.tarPackagePath
actualOutput = os.path.dirname( actualPath )
self.assertEqual( expectedOutput, actualOutput )
if __name__ == '__main__' :
unittest.main()
PK VlM!C 4 distributionPackage/app/tests/testPackageArgument.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
import os
import re
import unittest
from ..arguments import parseArguments
class TestPackageArgument( unittest.TestCase ) :
def testDefaultPackage( self ) :
expectedDefaultPackage = 'distribution-out'
packageOptions = parseArguments( list() )
tarPath = packageOptions.tarPackagePath
actualPackageFile = os.path.basename( tarPath )
self.assertIsNotNone( re.search( '^{0}'.format( expectedDefaultPackage ), actualPackageFile ) )
def testShortFormPackage( self ) :
expectedPackage = 'my-package'
packageOptions = parseArguments( [ '-p', expectedPackage ] )
tarPath = packageOptions.tarPackagePath
actualPackageFile = os.path.basename( tarPath )
self.assertIsNotNone( re.search( '^{0}'.format( expectedPackage ), actualPackageFile ) )
def testLongFormPackage( self ) :
expectedPackage = 'my-package'
packageOptions = parseArguments( [ '--package', expectedPackage ] )
tarPath = packageOptions.tarPackagePath
actualPackageFile = os.path.basename( tarPath )
self.assertIsNotNone( re.search( '^{0}'.format( expectedPackage ), actualPackageFile ) )
if __name__ == '__main__' :
unittest.main()
PK VlMu( 0 distributionPackage/app/tests/testProjectRoot.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
import os
import unittest
from ..arguments import parseArguments
class TestProjectRootArgument( unittest.TestCase ) :
def testDefault( self ) :
expectedProjectRoot = '.'
packageOptions = parseArguments( list() )
actualProjectRoot = packageOptions.projectRoot
self.assertEqual( expectedProjectRoot, actualProjectRoot )
def testShortFormProjectRoot( self ) :
expectedPath = os.path.join( 'some', 'path' )
packageOptions = parseArguments( [ '-r', expectedPath ] )
actualPath = packageOptions.projectRoot
self.assertEqual( expectedPath, actualPath )
def testLongFormProjectRoot( self ) :
expectedPath = os.path.join( 'some', 'path' )
packageOptions = parseArguments( [ '--project-root', expectedPath ] )
actualPath = packageOptions.projectRoot
self.assertEqual( expectedPath, actualPath )
if __name__ == '__main__' :
unittest.main()
PK VlMo 0 distributionPackage/app/tests/testTarArgument.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
"""
Test tar command line option.
"""
import os
import unittest
from ..arguments import parseArguments
class TestTarArgument( unittest.TestCase ) :
"""
Test tar package command line options.
"""
def testDefaultTarPackage( self ) :
expectedDefaultPackage = 'distribution-out.tar.gz'
packageOptions = parseArguments( list() )
actualPackage = os.path.basename( packageOptions.tarPackagePath )
self.assertEqual( expectedDefaultPackage, actualPackage )
self.assertTrue( packageOptions.isTarFile )
def testShortDisabledPackage( self ) :
packageOptions = parseArguments( [ '-n' ] )
self.assertFalse( packageOptions.isTarFile )
self.assertIsNone( packageOptions.tarPackagePath )
def testLongDisabledPackage( self ) :
packageOptions = parseArguments( [ '--no-tar' ] )
self.assertFalse( packageOptions.isTarFile )
self.assertIsNone( packageOptions.tarPackagePath )
if __name__ == '__main__' :
unittest.main()
PK VlM; 0 distributionPackage/app/tests/testZipArgument.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
"""
Test zip command line option.
"""
import os
import unittest
from ..arguments import parseArguments
class TestZipPackage( unittest.TestCase ) :
"""
Test zip package command line options.
"""
def testDefaultDisabledPackage( self ) :
packageOptions = parseArguments( list() )
self.assertFalse( packageOptions.isZipFile )
def testShortEnabledPackage( self ) :
expectedPackage = 'distribution-out.zip'
packageOptions = parseArguments( [ '-z' ] )
self.assertTrue( packageOptions.isZipFile )
actualPackage = os.path.basename( packageOptions.zipPackagePath )
self.assertEqual( expectedPackage, actualPackage )
def testLongEnabledPackage( self ) :
expectedPackage = 'distribution-out.zip'
packageOptions = parseArguments( [ '--zip' ] )
self.assertTrue( packageOptions.isZipFile )
actualPackage = os.path.basename( packageOptions.zipPackagePath )
self.assertEqual( expectedPackage, actualPackage )
if __name__ == '__main__' :
unittest.main()
PK VlM=br ' distributionPackage/package/__init__.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
from .package import Package
PK VlMl # distributionPackage/package/base.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
class PackageBase :
def __init__( self, fileName, projectRoot, append ) :
self.append = append
self.fileName = fileName
self.projectRoot = projectRoot
PK VlMH ( distributionPackage/package/directory.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
import os
class ChangeDirectory :
def __init__( self, directory ) :
self.newDirectory = directory
self.previousDirectory = None
def __enter__( self ) :
self.previousDirectory = os.path.realpath( os.path.abspath( os.path.curdir ) )
# Change to the new directory\
os.chdir( self.newDirectory )
def __exit__( self, exc_type, exc_val, exc_tb ) :
# Restore the original directory
os.chdir( self.previousDirectory )
PK VlMToq q ( distributionPackage/package/interface.py#
# Copyright 2018 Russell Smiley
#
# This file is part of distributionPackage.
#
# distributionPackage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# distributionPackage is distributed in the hope that it will be useful
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distributionPackage. If not, see .
#
import abc
class PackageInterface( metaclass = abc.ABCMeta ) :
@abc.abstractmethod
def build( self, filesToPackage ) :
pass
PK VlMI I &