From 021b66f44e7c6f245da047e43b62ec67815a6a66 Mon Sep 17 00:00:00 2001 From: Charles Leifer Date: Sat, 14 Aug 2010 14:02:41 -0500 Subject: [PATCH 1/2] Moving conf scraping into its own function --- projects/constants.py | 9 +++++++++ projects/tasks.py | 35 +++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/projects/constants.py b/projects/constants.py index 6c1b8d3eb..33d791009 100644 --- a/projects/constants.py +++ b/projects/constants.py @@ -20,3 +20,12 @@ SAMPLE_FILES = ( ('Installation', 'projects/samples/installation.rst.html'), ('Getting started', 'projects/samples/getting_started.rst.html'), ) + +SCRAPE_CONF_SETTINGS = [ + 'copyright', + 'project', + 'version', + 'release', + 'source_suffix', + 'html_theme', +] diff --git a/projects/tasks.py b/projects/tasks.py index e8db192a3..b6e98b126 100644 --- a/projects/tasks.py +++ b/projects/tasks.py @@ -2,6 +2,7 @@ from celery.decorators import task from celery.task.schedules import crontab from celery.decorators import periodic_task +from projects.constants import SCRAPE_CONF_SETTINGS from projects.models import Project, Conf from projects.utils import find_file, run @@ -18,6 +19,7 @@ def update_docs(pk): project = Project.objects.get(pk=pk) if project.is_imported: update_imported_docs(project) + scrape_conf_file(project) else: updated_created_docs(project) @@ -52,26 +54,13 @@ def update_imported_docs(project): run(command) -def update_created_docs(project): - # grab the root path for the generated docs to live at - path = self.user_doc_path - - doc_root = os.path.join(path, project.slug, 'docs') - - # TODO: write files - - -def build_docs(project): - """ - A helper function for the celery task to do the actual doc building. - """ +def scrape_conf_file(project): conf_dir = project.find('conf.py')[0].replace('/conf.py', '') os.chdir(conf_dir) lines = open('conf.py').readlines() data = {} for line in lines: - for we_care in ['copyright', 'project', 'version', 'release', - 'source_suffix', 'html_theme']: + for we_care in SCRAPE_CONF_SETTINGS: match = ghetto_hack.search(line) if match: data[match.group(1).strip()] = match.group(2).strip() @@ -85,6 +74,20 @@ def build_docs(project): project.version = data.get('version', '0.1.0') project.save() + +def update_created_docs(project): + # grab the root path for the generated docs to live at + path = self.user_doc_path + + doc_root = os.path.join(path, project.slug, 'docs') + + # TODO: write files + + +def build_docs(project): + """ + A helper function for the celery task to do the actual doc building. + """ project.write_conf() try: @@ -94,7 +97,7 @@ def build_docs(project): print make_dir os.system('make html') except IndexError: - os.chdir(conf_dir) + os.chdir(project.conf.path) os.system('sphinx-build -b html . _build') From 263e633e8f0e781b7d91dee142e9c8f1f4618814 Mon Sep 17 00:00:00 2001 From: Charles Leifer Date: Sat, 14 Aug 2010 14:17:54 -0500 Subject: [PATCH 2/2] Committing first stab at generating created docs --- projects/models.py | 17 +++++++++++++++++ projects/tasks.py | 12 +++++++++++- projects/templates/projects/doc_file.rst.html | 4 ++++ projects/templates/projects/index.rst.html | 12 ++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 projects/templates/projects/doc_file.rst.html create mode 100644 projects/templates/projects/index.rst.html diff --git a/projects/models.py b/projects/models.py index 348293fcd..e9c11cf93 100644 --- a/projects/models.py +++ b/projects/models.py @@ -80,6 +80,15 @@ class Project(models.Model): conf_py = file(os.path.join(self.conf.path, 'conf.py'), 'w') conf_py.write(self.get_rendered_conf()) conf_py.close() + + def get_rendered_index(self): + return render_to_string('projects/index.rst.html', {'project': self}) + + def write_index(self): + if not self.is_imported: + fh = open(os.path.join(self.conf.path, 'index.rst'), 'w') + fh.write(self.get_rendered_index()) + fh.close() @property def is_imported(self): @@ -164,6 +173,14 @@ class File(models.Model): def revert_to(self, revision_number): revision = self.revisions.get(revision_number=revision_number) revision.apply() + + def get_rendered(self): + return render_to_string('projects/doc_file.rst.html', {'file': self}) + + def write_to_disk(self): + fh = open(os.path.join(self.project.conf.path, '%s.rst' % self.slug), 'w') + fh.write(self.get_rendered()) + fh.close() class FileRevision(models.Model): diff --git a/projects/tasks.py b/projects/tasks.py index b6e98b126..ea1b54384 100644 --- a/projects/tasks.py +++ b/projects/tasks.py @@ -80,8 +80,18 @@ def update_created_docs(project): path = self.user_doc_path doc_root = os.path.join(path, project.slug, 'docs') + + if not os.path.exists(doc_root) + os.makedirs(doc_root) + + project.conf.path = doc_root + project.conf.save() + + project.write_index() - # TODO: write files + # TODO: make this more flexible + for file in project.files.all(): + file.write_to_disk() def build_docs(project): diff --git a/projects/templates/projects/doc_file.rst.html b/projects/templates/projects/doc_file.rst.html new file mode 100644 index 000000000..2f9cde678 --- /dev/null +++ b/projects/templates/projects/doc_file.rst.html @@ -0,0 +1,4 @@ +{{ file.heading }} +======================= + +{{ file.contents }} diff --git a/projects/templates/projects/index.rst.html b/projects/templates/projects/index.rst.html new file mode 100644 index 000000000..98820d915 --- /dev/null +++ b/projects/templates/projects/index.rst.html @@ -0,0 +1,12 @@ +{{ project.name }} v{{ project.version }} +================================== + +{{ project.description }} + +Contents: + +.. toctree:: + :maxdepth: 2 + :glob: + + *