annotate manage.py @ 9:61687c1c0ce8

Added to TODO file.
author Atul Varma <varmaa@toolness.com>
date Thu, 21 Aug 2008 21:08:44 -0700
parents 66b00b4c37a6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
1 import os
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
2 import sys
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 import xml.dom.minidom
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
4 import subprocess
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
5 import shutil
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6 import zipfile
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
7 from ConfigParser import ConfigParser
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9 # Path to the root of the extension, relative to where this script is
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 # located.
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
11 EXT_SUBDIR = "ambnews"
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
12
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
13 def find_profile_dir(name):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
14 """
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
15 Given the name of a Firefox profile, attempts to find the absolute
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
16 path to its directory. If it can't be found, None is returned.
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
17 """
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
18
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
19 base_path = None
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
20 if sys.platform == "darwin":
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
21 base_path = os.path.expanduser(
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
22 "~/Library/Application Support/Firefox/"
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
23 )
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
24 elif sys.platform.startswith("win"):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
25 # TODO: This only works on 2000/XP/Vista, not 98/Me.
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
26 appdata = os.environ["APPDATA"]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
27 base_path = os.path.join(appdata, "Mozilla\\Firefox")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
28 else:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
29 base_path = os.path.expanduser("~/.mozilla/firefox/")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
30 inifile = os.path.join(base_path, "profiles.ini")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
31 config = ConfigParser()
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
32 config.read(inifile)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
33 profiles = [section for section in config.sections()
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
34 if section.startswith("Profile")]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
35 for profile in profiles:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
36 if config.get(profile, "Name") == name:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
37 # TODO: Look at IsRelative?
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
38 path = config.get(profile, "Path")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
39 if not os.path.isabs(path):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
40 path = os.path.join(base_path, path)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
41 print "Found profile '%s' at %s." % (name, path)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
42 return path
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
43 print "Couldn't find a profile called '%s'." % name
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
44 return None
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
45
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
46 def get_install_rdf_dom(path_to_extension_root):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
47 rdf_path = os.path.join(path_to_extension_root, "install.rdf")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
48 rdf = xml.dom.minidom.parse(rdf_path)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
49 return rdf
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
50
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
51 def get_install_rdf_property(path_to_extension_root, property):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
52 rdf = get_install_rdf_dom(path_to_extension_root)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
53 element = rdf.documentElement.getElementsByTagName(property)[0]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
54 return element.firstChild.nodeValue
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
55
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
56 if __name__ == "__main__":
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
57 args = sys.argv[1:]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
58 if not args:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
59 print "usage: %s <command>" % sys.argv[0]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
60 print
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
61 print "'command' can be one of the following:"
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
62 print
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
63 print " test - run unit tests"
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
64 print " install - install to the given profile"
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
65 print " uninstall - uninstall from the given profile"
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
66 print " build-xpi - build an xpi of the addon"
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
67 print
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
68 sys.exit(1)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
69
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
70 main = __import__("__main__")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
71 mydir = os.path.abspath(os.path.split(main.__file__)[0])
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
72
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
73 path_to_extension_root = os.path.join(mydir, EXT_SUBDIR)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
74
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
75 cmd = args[0]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
76
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
77 if cmd == "test":
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
78 print "No unit tests."
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
79 sys.exit(1)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
80 elif cmd in ["install", "uninstall"]:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
81 if len(args) != 2:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
82 print "Attempting to find location of default profile..."
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
83
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
84 profile_dir = find_profile_dir("default")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
85 else:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
86 profile_dir = args[1]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
87 if not os.path.exists(profile_dir):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
88 print "Attempting to find a profile with the name '%s'." % (
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
89 profile_dir
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
90 )
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
91 profile_dir = find_profile_dir(profile_dir)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
92
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
93 if not (profile_dir and os.path.exists(profile_dir) and
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
94 os.path.isdir(profile_dir)):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
95 print "Can't resolve profile directory; aborting."
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
96 sys.exit(1)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
97
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
98 extension_id = get_install_rdf_property(path_to_extension_root,
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
99 "em:id")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
100
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
101 extension_file = os.path.join(profile_dir,
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
102 "extensions",
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
103 extension_id)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
104 files_to_remove = ["compreg.dat",
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
105 "xpti.dat"]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
106 for filename in files_to_remove:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
107 abspath = os.path.join(profile_dir, filename)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
108 if os.path.exists(abspath):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
109 os.remove(abspath)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
110 if os.path.exists(extension_file):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
111 if os.path.isdir(extension_file):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
112 shutil.rmtree(extension_file)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
113 else:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
114 os.remove(extension_file)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
115 if cmd == "install":
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
116 fileobj = open(extension_file, "w")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
117 fileobj.write(path_to_extension_root)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
118 fileobj.close()
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
119 print "Extension '%s' installed." % extension_id
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
120 else:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
121 print "Extension '%s' uninstalled." % extension_id
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
122 elif cmd == "build-xpi":
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
123 version = get_install_rdf_property(path_to_extension_root,
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
124 "em:version")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
125 extname = get_install_rdf_property(path_to_extension_root,
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
126 "em:name").lower()
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
127 extname = extname.replace(" ", "")
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
128 zfname = "%s-%s.xpi" % (extname, version)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
129 zf = zipfile.ZipFile(zfname,
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
130 "w",
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
131 zipfile.ZIP_DEFLATED)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
132 for dirpath, dirnames, filenames in os.walk(path_to_extension_root):
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
133 for filename in filenames:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
134 abspath = os.path.join(dirpath, filename)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
135 arcpath = abspath[len(path_to_extension_root)+1:]
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
136 zf.write(abspath, arcpath)
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
137 print "Created %s." % zfname
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
138 else:
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
139 print "Unknown command '%s'" % cmd
66b00b4c37a6 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
140 sys.exit(1)