5 from spm import core, __version__
6 from jinja2 import Environment, FileSystemLoader
8 from collections import OrderedDict
10 from ordereddict import OrderedDict
13 def generate_report(data):
14 template_dirs = os.path.join(os.path.dirname(spm.__file__), 'templates')
15 jinja2_env = Environment(loader=FileSystemLoader(template_dirs))
16 template = jinja2_env.get_template('report.html')
17 return template.render(data)
21 @functools.wraps(func)
23 splitted = func.__doc__.split('\n')
24 name = func.__name__.split('_')[0]
25 subpar = parser.add_parser(name, help=splitted[0],
26 description='\n'.join(splitted[1:]))
32 def install_parser(parser):
35 $ spm install -r http://download.tizen.org/tools/latest-release gbs
37 parser.add_argument('-r', '--repo', help='repo url')
38 parser.add_argument('pkg', help='package name')
42 distro.uninstall(args.pkg)
44 distro.make_repo('tools', args.repo)
45 print(distro.check_version(args.pkg))
48 distro.install(args.pkg)
50 parser.set_defaults(handler=handler)
55 def upgrade_parser(parser):
58 $ spm upgrade --from repo1 --to repo2 gbs
60 parser.add_argument('--from', dest='oldrepo', help='upgrade from repo url')
61 parser.add_argument('--to', help='upgrade to repo url')
62 parser.add_argument('pkg', help='package name')
63 parser.add_argument('--html-dir', help='html directory')
67 data['package'] = args.pkg
68 data['type'] = 'upgrade'
69 data['install_repo'] = args.oldrepo
70 data['upgrade_repo'] = args.to
71 data['package_list'] = OrderedDict()
73 distro.uninstall(args.pkg)
75 distro.make_repo('tools', args.to)
78 distro.install(args.pkg)
79 dependencies = distro.get_package_dependency(args.pkg)
81 for pkg in dependencies:
82 _, version = distro.check_version(pkg)
83 data['package_list'][pkg] = {'install': version}
84 distro.uninstall(args.pkg)
86 distro.make_repo('tools', args.oldrepo)
89 distro.install(args.pkg)
91 for pkg in dependencies:
92 _, version = distro.check_version(pkg)
93 data['package_list'][pkg].update(before=version)
95 distro.make_repo('tools', args.to)
97 distro.install(args.pkg)
99 for pkg in dependencies:
100 _, version = distro.check_version(pkg)
101 data['package_list'][pkg].update(after=version)
103 with open("%s/index.html" % args.html_dir, 'w') as f:
104 f.write(generate_report(data))
106 parser.set_defaults(handler=handler)
111 def version_parser(parser):
112 """query package version
116 parser.add_argument('pkg', help='package name')
120 packages = distro.get_package_dependency(args.pkg)
123 print(distro.check_version(pkg))
125 print(distro.check_version(args.pkg))
127 parser.set_defaults(handler=handler)
132 parser = argparse.ArgumentParser(
134 description='Smart package management tool on linux',
135 epilog='Try spm --help for help on specific subcommand')
136 parser.add_argument('-V', '--version',
137 action='version', version=__version__)
138 subparsers = parser.add_subparsers(title='subcommands')
139 for name, obj in globals().items():
140 if name.endswith('_parser') and callable(obj):
142 args = parser.parse_args()
145 if __name__ == '__main__':