diff --git a/env/.gitignore b/env/.gitignore new file mode 100644 index 000000000..e340628a0 --- /dev/null +++ b/env/.gitignore @@ -0,0 +1,7 @@ +/bin +/share +/selenium +/etc +/local +/lib +/include diff --git a/ietf/settings.py b/ietf/settings.py index 2ff9b2cef..38186e7be 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -382,7 +382,7 @@ TEST_URL_COVERAGE_EXCLUDE = [ r"^\^admin/", ] -# Tese are filename globs +# These are filename globs. They are fed directly to the coverage code checker. TEST_CODE_COVERAGE_EXCLUDE = [ "*/tests*", "*/admin.py", @@ -660,8 +660,7 @@ USER_PREFERENCE_DEFAULTS = { } TRAC_MASTER_DIR = "/a/www/trac-setup/" -TRAC_WIKI_DIR_ROOT = "/a/www/www6s/trac/" -TRAC_WIKI_DIR_PATTERN = os.path.join(TRAC_WIKI_DIR_ROOT, "%s") +TRAC_WIKI_DIR_PATTERN = "/a/www/www6s/trac/%s" TRAC_WIKI_URL_PATTERN = "https://trac.ietf.org/trac/%s/wiki" TRAC_ISSUE_URL_PATTERN = "https://trac.ietf.org/trac/%s/report/1" TRAC_SVN_DIR_PATTERN = "/a/svn/group/%s" diff --git a/ietf/utils/management/commands/create_group_wikis.py b/ietf/utils/management/commands/create_group_wikis.py index 13795298d..6accb1353 100644 --- a/ietf/utils/management/commands/create_group_wikis.py +++ b/ietf/utils/management/commands/create_group_wikis.py @@ -4,16 +4,14 @@ import os import copy import syslog import pkg_resources +from optparse import make_option #from optparse import make_option -from trac.admin.api import AdminCommandManager from trac.core import TracError from trac.env import Environment from trac.perm import PermissionSystem from trac.ticket.model import Component, Milestone, Severity from trac.util.text import unicode_unquote -from trac.versioncontrol.api import RepositoryManager -from trac.wiki.admin import WikiAdmin from trac.wiki.model import WikiPage from django.conf import settings @@ -33,8 +31,9 @@ class Command(BaseCommand): help = "Create group wikis for WGs, RGs and Areas which don't have one." option_list = BaseCommand.option_list + ( + make_option('--wiki-dir-pattern', dest='wiki_dir_pattern', help='File containing email (default: stdin)'), ) - #verbosity = 1 + verbosity = 2 def note(self, msg): if self.verbosity > 1: @@ -238,12 +237,13 @@ class Command(BaseCommand): def handle(self, *filenames, **options): self.verbosity = options['verbosity'] self.errors = 0 + self.wiki_dir_pattern = options.get('wiki_dir_pattern', settings.TRAC_WIKI_DIR_PATTERN) - if self.verbosity.isdigit(): + if isinstance(self.verbosity, (type(""), type(u""))) and self.verbosity.isdigit(): self.verbosity = int(self.verbosity) - if not os.path.exists(settings.TRAC_WIKI_DIR_ROOT): - raise CommandError('The Wiki base direcory specified in settings.TRAC_WIKI_DIR_ROOT (%s) does not exist.' % settings.TRAC_WIKI_DIR_ROOT) + if not os.path.exists(os.path.dirname(self.wiki_dir_pattern)): + raise CommandError('The Wiki base direcory specified for the wiki directories (%s) does not exist.' % os.path.dirname(self.wiki_dir_pattern)) groups = Group.objects.filter( type__slug__in=['wg','rg','area'], @@ -253,7 +253,7 @@ class Command(BaseCommand): for group in groups: try: self.note("Processing group %s" % group.acronym) - group.trac_dir = settings.TRAC_WIKI_DIR_PATTERN % group.acronym + group.trac_dir = self.wiki_dir_pattern % group.acronym group.svn_dir = settings.TRAC_SVN_DIR_PATTERN % group.acronym if not os.path.exists(group.svn_dir): diff --git a/ietf/utils/tests.py b/ietf/utils/tests.py index 6bf4d7336..76929800a 100644 --- a/ietf/utils/tests.py +++ b/ietf/utils/tests.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- import os.path import types -#import json -#from pathlib import Path +import shutil +from StringIO import StringIO +from pipe import pipe from textwrap import dedent from email.mime.text import MIMEText @@ -10,6 +11,7 @@ from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from django.conf import settings +from django.core.management import call_command from django.template import Context from django.template.defaulttags import URLNode from django.templatetags.static import StaticNode @@ -21,7 +23,9 @@ import debug # pyflakes:ignore import ietf.urls from ietf.utils.management.commands import pyflakes from ietf.utils.mail import send_mail_text, send_mail_mime, outbox +from ietf.utils.test_data import make_test_data from ietf.utils.test_runner import get_template_paths +from ietf.group.models import Group class PyFlakesTestCase(TestCase): @@ -186,6 +190,46 @@ class TemplateChecksTestCase(TestCase): settings.DEBUG = saved_debug +class TestWikiGlueManagementCommand(TestCase): + + def setUp(self): + self.wiki_dir_pattern = os.path.abspath('tmp-wiki-dir-root/%s') + if not os.path.exists(self.wiki_dir_pattern): + os.mkdir(os.path.dirname(self.wiki_dir_pattern)) + + def tearDown(self): + shutil.rmtree(os.path.dirname(self.wiki_dir_pattern)) + + def test_wiki_create_output(self): + make_test_data() + groups = Group.objects.filter( + type__slug__in=['wg','rg','area'], + state__slug='active' + ).order_by('acronym') + out = StringIO() + call_command('create_group_wikis', stdout=out, verbosity=2, wiki_dir_pattern=self.wiki_dir_pattern) + command_output = out.getvalue() + for group in groups: + self.assertIn("Processing group %s" % group.acronym, command_output) + # Do a bit of verification using trac-admin, too + admin_code, admin_output, admin_error = pipe('trac-admin %s permission list' % (self.wiki_dir_pattern % group.acronym)) + self.assertEqual(admin_code, 0) + roles = group.role_set.filter(name_id__in=['chair', 'secr', 'ad']) + for role in roles: + user = role.email.address.lower() + self.assertIn("Granting admin permission for %s" % user, command_output) + self.assertIn(user, admin_output) + docs = group.document_set.filter(stats_slug='active', type_id='draft') + for doc in docs: + name = doc.name + name = name.replace('draft-','') + name = name.replace(group.stream+'-', '') + name = name.replace(group.acronym+'-', '') + self.assertIn("Adding component %s"%name, command_output) + for page in settings.TRAC_WIKI_PAGES_TEMPLATES: + self.assertIn("Adding page %s" % os.path.basename(page), command_output) + self.assertIn("Indexing default repository", command_output) + ## One might think that the code below would work, but it doesn't ... # def list_static_files(path):