[tools] Store beats info in a pickle add functionality to add suggested reading, packages, and contacts to b
Pete Travis
immanetize at fedoraproject.org
Sun Mar 2 21:12:10 UTC 2014
commit f968c86011329c2486682a5eb9480c99a332c88e
Author: Pete Travis <immanetize at fedoraproject.org>
Date: Sun Mar 2 14:12:04 2014 -0700
Store beats info in a pickle
add functionality to add suggested reading, packages, and contacts to beats info
misc other function adjustments
tools/pybeats/beats.py | 243 ++++++++++++++++++++++++++++--------------------
1 files changed, 141 insertions(+), 102 deletions(-)
---
diff --git a/tools/pybeats/beats.py b/tools/pybeats/beats.py
index 7cb5008..f03f5c6 100644
--- a/tools/pybeats/beats.py
+++ b/tools/pybeats/beats.py
@@ -2,109 +2,46 @@
import mwclient
import sys
import os
+import argparse
+import pickle
def beats_list():
- beat_list = ( "Documentation_Beats_Installer",
- "Documentation_Architecture_Specific_Content_Beat",
- "Documentation_x86_Specific_Content_Beat",
- "Documentation_x86_64_Specific_Beat",
- "Documentation_Cloud_Specific_Content_Beat",
- "Documentation_ARM_Specific_Content_Beat",
- "Documentation_Desktop_Beat",
- "Documentation_Productivity_Beat",
- "Documentation_Networking_Beat",
- "Documentation_Printing_Beat",
- "Documentation_I18n_Beat",
- "Documentation_Multimedia_Beat",
- "Documentation_Entertainment_Beat",
- "Documentation_Live_Image_Beat",
- "Documentation_Kernel_Beat",
- "Documentation_Boot_Beat",
- "Documentation_Security_Beat",
- "Documentation_Virtualization_Beat",
- "Documentation_Web_Servers_Beat",
- "Documentation_Cloud_Beat",
- "Documentation_Mail_Servers_Beat",
- "Documentation_Database_Servers_Beat",
- "Documentation_File_Servers_Beat",
- "Documentation_Samba_Beat",
- "Documentation_System_Daemons_Beat",
- "Documentation_Server_Configuration_Tools_Beat",
- "Documentation_File_Systems_Beat",
- "Documentation_Xorg_Beat",
- "Documentation_Cluster_Beat",
- "Documentation_Development_Beat",
- "Documentation_Development_Runtime_Beat",
- "Documentation_Development_Tools_Beat",
- "Documentation_Development_GCC_Tools_Beat",
- "Documentation_Java_Beat",
- "Documentation_Development_D_Beat",
- "Documentation_Development_Haskell_Beat",
- "Documentation_Development_Eclipse_Beat",
- "Documentation_Backwards_Compatibility_Beat",
- "Documentation_Development_OCaml_Beat",
- "Documentation_Development_Web_Beat",
- "Documentation_Scientific_and_Technical_Beat"
- "Documentation_EDA_Beat",
- "Documentation_Embedded_Development_Beat",
- "Documentation_Circuit_Design_Beat",
- "Documentation_Robotics_Beat",
- "Documentation_Amateur_Radio_Beat",
- "Documentation_Musicians_Beat",
- "Documentation_Monitoring_Beat"
- )
+ fyle = open('beat_pickle', 'r')
+ beat_list = pickle.load(fyle)
+ fyle.close()
return beat_list
-# this just doesn't work
-#beatlist = beats_list()
-#sys.path.append( '%s/beats_info' % os.getcwd() )
-#for beat in beatlist:
-# print("importing %s" % beat)
-# try:
-# module_object = __import__(beat)
-# except:
-# print("failed to open module object for %s" % beat)
-# try:
-# locals()[beat] = module_object
-# except:
-# print("import of %s beat failed" % beat)
-
-
-def create_beats_skeleton():
- beatlist = beats_list()
+def create_beat_skeleton(beat):
if not os.path.isdir("beats_info"):
os.mkdir("beats_info")
- initfile = "beats_info/__init__.py"
- doinit = open(initfile, 'w')
- doinit.write('#!/usr/bin/python')
- doinit.close()
- for beat in beatlist:
- filename = "beats_info/" + beat + ".py"
- # filename = beat + ".py"
- f = open(filename, 'w')
- f.write('#!/usr/bin/python\n\n')
- f.write('###\n# Beat definition and guidance for %s\n###\n\n' % beat)
- f.write('def return_beat():\n')
- f.write(' beat = {}\n')
- f.write(' beat[\'beat_name\'] = "%s"\n' % beat)
- f.write(' beat[\'beat_overview\'] = ""\n')
- f.write(' beat[\'suggested_packages\'] = ()\n')
- f.write(' beat[\'suggested_contacts\'] = ()\n')
- f.write(' beat[\'suggested_reading\'] = ()\n')
- f.write(' return(beat)\n')
- f.close()
-#try:
-# import_beats()
-## import beats_info
-#except:
-# print("import fail")
-# create_beats_skeleton()
-#
+ filename = "beats_info/" + beat + ".pickled_beet"
+ if not os.path.exists(filename):
+ pick = open(filename, 'w')
+ beet = {}
+ beet['beat_name'] = beat
+ beet['beat_overview'] = ""
+ beet['suggested_packages'] = ()
+ beet['suggested_contacts'] = ()
+ beet['suggested_reading'] = ()
+ pickle.dump(beet, pick)
+ pick.close()
+ else:
+ print("pickled_beet exists for %s, aborting" % beat)
-def setup_wiki_connection(username, password):
- site = mwclient.Site('fedoraproject.org', path = '/w/')
- if username and password:
+def setup_wiki_connection(username=None, password=None):
+ if not username:
+ username = raw_input("FAS Username: ")
+ if not password:
+ import getpass
+ password = getpass.getpass("FAS Password: ")
+ try:
+ site = mwclient.Site('fedoraproject.org', path = '/w/')
+ except:
+ print("Failed to open wiki connection")
+ try:
site.login(username, password)
+ except:
+ print("Unable to log in to wiki")
return site
footer = """
@@ -115,16 +52,41 @@ footer = """
header = "{{header|docs}}"
docs_beat_open = "{{Docs_beat_open}}"
-def clearbeats(beats, string):
- for beat in beats:
- page = site.Pages[beat]
- text = page.edit()
+def clear_beats(site, beat=None, *beats):
+ def clearbeat(beat):
+ try:
+ page = site.Pages[beat]
+ except:
+ print("unable to load %s page" % beat)
string = header + docs_beat_open + footer
+ print("Clearing %s" % beat)
+ print("content will be: \n%s" % string)
page.save(string)
+ if beat == "all" and beats:
+ for beat in beats:
+ clearbeat(beat)
+ elif beat and not beats:
+ clearbeat(beat)
+
+def add_beat(beat, **credentials):
+ fyle = open('beat_pickle','r+')
+ beat_list = pickle.load(fyle)
+ print("Adding %s to beats list")
+ beat_list.append(beat)
+ pickle.dump(beat_list, fyle)
+ fyle.close()
+ create_beat_skeleton(beat)
+ response = raw_input("Beat added locally. Open beat on wiki? (Y/N) : ")
+ if response in ('Y', 'y', 'Yes', 'yes'):
+ if username, password:
+ site = setup_wiki_connection(username, password)
+ else:
+ site = setup_wiki_connection()
+ clear_beats(site, beat)
-def update_talk():
- beatlist = beats_list()
- for beat in beatlist:
+
+def update_talk(site, beat=None, *beats):
+ def write_talk():
module = __import__(beat)
info = module.return_beat()
talk_page = "Talk:" + beat
@@ -144,8 +106,85 @@ def update_talk():
for person in info['suggested_contacts']:
if person:
talk_string += "* %s\n" % person
+ if beat == "all" and beats:
+ for beat in beats:
+ write_talk(beat)
+ elif beat and not beats:
+ write_talk(beat)
+
+#add functions for adding things to talk page
+#
+def add_thing(thing, beat, string):
+ if not thing in ('suggested_package', 'suggested_contact', 'suggested_reading')
+ print("Unable to add to %s for %s" % (thing, beat))
+ sys.exit()
+ filename = "beats_info/" + beat + ".pickled_beet"
+ try:
+ fyle = open(filename, 'r+')
+ except:
+ print("Unable to open beat info")
+ sys.exit()
+ beat_info = pickle.load(fyle)
+ beat_info[thing].append(package)
+ pickle.dump(beat_info, fyle)
+ fyle.close()
+def main():
+ parser = argparse.ArgumentParser(description="Manipulate Fedora Docs Beats table!")
+ parser.add_argument('action', help="Action to perform on beats table")
+ parser.add_argument('-b', '--beat', help = "Beat to act on, or all")
+ parser.add_argument('-U', '--username', help = "FAS Username, for wiki login")
+ parser.add_argument('-P', '--password', help = "FAS Password, for wiki login")
+ parser.add_argument('--all', help="Act on all beats", action="store_true")
+ parser.add_argument('-p', '--package', help = "Package to add to list, use with add-package")
+ parser.add_argument('-c', '--contact', help = "Contact to add to list, use with add-contact")
+ args = parser.parse_args()
+ if args.action == 'list-beats':
+ for beat in beats_list():
+ print beat
+ elif args.action == 'add-package':
+ try:
+ add_thing('suggested_package', args.beat, args.package)
+ except:
+ print("Failed to add %s to %s" % (package, beat))
+ sys.exit()
+ elif args.action == 'add-contact':
+ try:
+ add_thing('suggested_contact', args.beat, args.contact)
+ except:
+ print("Failed to add %s to %s" % (args.beat, args.contact))
+ sys.exit()
+ elif args.action == 'add-reading':
+ try:
+ add_thing('suggested_reading', args.beat, args.contact)
+ except:
+ print("Failed to add %s to %s" % (args.beat, args.contact)
+ elif args.action == 'clear':
+ try:
+ site = setup_wiki_connection(args.username, args.password)
+ except:
+ site = setup_wiki_connection()
+ if args.all:
+ response = raw_input("Type \"I Am Sure\" to confirm you want to clear *all* beats: ")
+ if response = 'I Am Sure':
+ beats = beats_list()
+ clear_beats(site, 'all', beats)
+ else:
+ print("You are not sure, so exiting.")
+ else:
+ if args.beat in beats_list():
+ clear_beats(site, args.beat)
+ else:
+ print("Beat not defined")
+ elif args.action == 'add-beat':
+ try:
+ add_beat(beat, username=args.username, password=args.password)
+ except:
+ add_beat(beat)
+ elif args.action == 'update_talk':
+ if args.all:
+main()
More information about the docs-commits
mailing list