Documentation additions. Fixes to compilation. Made true passthrough which works.
This commit is contained in:
		
							parent
							
								
									1093636728
								
							
						
					
					
						commit
						3922b13fb1
					
				
					 24 changed files with 181 additions and 9 deletions
				
			
		
							
								
								
									
										1
									
								
								MANIFEST.in
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								MANIFEST.in
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
include pixywerk2/defaults/*.yaml
 | 
			
		||||
							
								
								
									
										69
									
								
								READMES/project-layout.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								READMES/project-layout.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
# Project Layout #
 | 
			
		||||
 | 
			
		||||
It is recommended that in general your project for PixyWerk2 site be layed out like:
 | 
			
		||||
```
 | 
			
		||||
project_top/
 | 
			
		||||
   Makefile              - Convenient for building your site
 | 
			
		||||
   src/                  - All "source" pages are contained in here.
 | 
			
		||||
     .meta               - Top-level default metadata is set here
 | 
			
		||||
     templates/          - Templates go in here
 | 
			
		||||
       default.jinja2    - Default template that will be used if none are specified
 | 
			
		||||
   publish/              - The path the build process will create, where the post-processed files go.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Makefile ##
 | 
			
		||||
 | 
			
		||||
Makefile is suggested, but not essential, for encapsulating your build commands to produce your
 | 
			
		||||
site. Something as simple as:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
build: src/templates/* src/*
 | 
			
		||||
	python -mpixywerk2 src publish
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## src/ ##
 | 
			
		||||
 | 
			
		||||
This is the top level path that all of your templates, page fragments, images, etc. will be stored. This is basically the "source code" for your site.
 | 
			
		||||
 | 
			
		||||
## src/.meta ##
 | 
			
		||||
 | 
			
		||||
This is the top level metadata that is used as the default for all subsidiary metadata. It is in JSON format (with JS style comments). See <METADATA.md> for more information.
 | 
			
		||||
 | 
			
		||||
Example .meta file:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
{
 | 
			
		||||
	"title": "My Website", // this is the default title applied if none are specified
 | 
			
		||||
	"author": "Super Web Dude",
 | 
			
		||||
	"site_root": "http://example.com",
 | 
			
		||||
	"uuid-oid-root": "example.com-", // this is used to generate UUIDs
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## src/templates/ ##
 | 
			
		||||
 | 
			
		||||
Templates are all stored here, as this is the search path for Jinja.
 | 
			
		||||
 | 
			
		||||
## templates/default.jinja2 ##
 | 
			
		||||
 | 
			
		||||
If a page specifies a `template` metadata key, the named template is used, however, if not this template is used. Generally speaking this is a complete HTML file, with the `{{ content }}` template string placed where the content of subsidiary pages will be embedded.
 | 
			
		||||
 | 
			
		||||
A simple default.jinja2 example:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
<title>{{ title }}</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
{{content}}
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## publish/ ##
 | 
			
		||||
 | 
			
		||||
This is arbitrary, and will be created by pixywerk at build time, but it will be the root path that should be published to your web server.
 | 
			
		||||
							
								
								
									
										2
									
								
								TODO.md
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								TODO.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
# TODO #
 | 
			
		||||
 | 
			
		||||
* Pygments pretty printing of source code et al. including exposing that to the template API.
 | 
			
		||||
* Pygments pretty printing of source code et al. including exposing that to the template API (`pygment_format(get_file_content('whatever.py'))`).
 | 
			
		||||
* Smart CSS things (fill in the processors)
 | 
			
		||||
 | 
			
		||||
# Maybe #
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								examples/pixywerk.com/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								examples/pixywerk.com/Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
build: src/templates/* src/* src/images/* src/posts/*
 | 
			
		||||
	python -mpixywerk2 src publish
 | 
			
		||||
							
								
								
									
										4
									
								
								examples/pixywerk.com/README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								examples/pixywerk.com/README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
# Pixywerk.com Example #
 | 
			
		||||
 | 
			
		||||
This is an example blog system with the features most blogs would have (posts, tag cloud, atom/rss feeds,
 | 
			
		||||
index with images).
 | 
			
		||||
							
								
								
									
										0
									
								
								examples/pixywerk.com/foo
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								examples/pixywerk.com/foo
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										3
									
								
								examples/pixywerk.com/publish/css/main.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								examples/pixywerk.com/publish/css/main.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
body { margin: 10% 10% 0 10% }
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								examples/pixywerk.com/publish/images/20190415-0.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								examples/pixywerk.com/publish/images/20190415-0.jpg
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 72 KiB  | 
							
								
								
									
										0
									
								
								examples/pixywerk.com/publish/images/placeholder
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								examples/pixywerk.com/publish/images/placeholder
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										13
									
								
								examples/pixywerk.com/publish/index.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								examples/pixywerk.com/publish/index.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
    <title></title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="css/main.css">
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <p>This is my index!!</p>
 | 
			
		||||
 | 
			
		||||
for i in posts[:5]:
 | 
			
		||||
 | 
			
		||||
get metadata, fill in post image/text summary with link
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										18
									
								
								examples/pixywerk.com/publish/posts/2019-04-15.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								examples/pixywerk.com/publish/posts/2019-04-15.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
    <title>My first post</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="css/main.css">
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <img src="../images/20190415-0.jpg" class="featured">
 | 
			
		||||
<div class="byline">
 | 
			
		||||
  <p>Author: Cas Rusnov</p>
 | 
			
		||||
  <p>Published: 2019-04-16T01:42:27.156392+00:00
 | 
			
		||||
    
 | 
			
		||||
  </p>
 | 
			
		||||
</div>
 | 
			
		||||
<p>This is an example post!</p>
 | 
			
		||||
<p>yo fresh</p>
 | 
			
		||||
<p>There are many posts like it but this one is mine.</p>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										9
									
								
								examples/pixywerk.com/publish/templates/default.jinja2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								examples/pixywerk.com/publish/templates/default.jinja2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
    <title>{{ metadata.title }}</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="css/main.css">
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    {{ content }}
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										6
									
								
								examples/pixywerk.com/src/.meta
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								examples/pixywerk.com/src/.meta
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
{
 | 
			
		||||
"author": "Cas Rusnov",
 | 
			
		||||
"author_email": "rusnovn@gmail.com",
 | 
			
		||||
"uuid-oid-root": "pixywerk.com/",
 | 
			
		||||
"site_root": "https://pixywerk.com/"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								examples/pixywerk.com/src/css/main.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								examples/pixywerk.com/src/css/main.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
body { margin: 10% 10% 0 10% }
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								examples/pixywerk.com/src/images/20190415-0.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								examples/pixywerk.com/src/images/20190415-0.jpg
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 72 KiB  | 
							
								
								
									
										0
									
								
								examples/pixywerk.com/src/images/placeholder
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								examples/pixywerk.com/src/images/placeholder
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										5
									
								
								examples/pixywerk.com/src/index.thtml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								examples/pixywerk.com/src/index.thtml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
<p>This is my index!!</p>
 | 
			
		||||
 | 
			
		||||
for i in posts[:5]:
 | 
			
		||||
 | 
			
		||||
get metadata, fill in post image/text summary with link
 | 
			
		||||
							
								
								
									
										12
									
								
								examples/pixywerk.com/src/posts/2019-04-15.thtml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								examples/pixywerk.com/src/posts/2019-04-15.thtml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
<img src="{{ metadata.featured }}" class="featured">
 | 
			
		||||
<div class="byline">
 | 
			
		||||
  <p>Author: {{ metadata.author }}</p>
 | 
			
		||||
  <p>Published: {{ get_time_iso8601(metadata.stat.ctime) }}
 | 
			
		||||
    {% if metadata.stat.mtime-metadata.stat.ctime > 512 %}
 | 
			
		||||
    Updated: {{ get_time_iso8601(metadata.stat.mtime) }}
 | 
			
		||||
    {% endif %}
 | 
			
		||||
  </p>
 | 
			
		||||
</div>
 | 
			
		||||
<p>This is an example post!</p>
 | 
			
		||||
<p>yo fresh</p>
 | 
			
		||||
<p>There are many posts like it but this one is mine.</p>
 | 
			
		||||
							
								
								
									
										4
									
								
								examples/pixywerk.com/src/posts/2019-04-15.thtml.meta
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								examples/pixywerk.com/src/posts/2019-04-15.thtml.meta
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
"title":"My first post",
 | 
			
		||||
"featured":"../images/20190415-0.jpg"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								examples/pixywerk.com/src/templates/default.jinja2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								examples/pixywerk.com/src/templates/default.jinja2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
    <title>{{ metadata.title }}</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="css/main.css">
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    {{ content }}
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,12 +8,14 @@
 | 
			
		|||
import argparse
 | 
			
		||||
import logging
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
import sys
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
from typing import Dict, List, cast
 | 
			
		||||
 | 
			
		||||
from .processchain import ProcessorChains
 | 
			
		||||
from .processors.processors import PassthroughException
 | 
			
		||||
from .metadata import MetaTree
 | 
			
		||||
from .template_tools import file_list, file_name, file_content, file_metadata, time_iso8601
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -73,8 +75,11 @@ def main() -> int:
 | 
			
		|||
        "dir-template": "default-dir.jinja2",
 | 
			
		||||
        "filters": {},
 | 
			
		||||
        "build-time": time.time(),
 | 
			
		||||
        "build-datetime": time.ctime(),
 | 
			
		||||
        "uuid-oid-root": "pixywerk",
 | 
			
		||||
        "summary": "",
 | 
			
		||||
        "description": "",
 | 
			
		||||
        "author": "",
 | 
			
		||||
        "author_email": ""
 | 
			
		||||
    }
 | 
			
		||||
    meta_tree = MetaTree(args.root, default_metadata)
 | 
			
		||||
    file_list_cache = cast(Dict, {})
 | 
			
		||||
| 
						 | 
				
			
			@ -109,9 +114,13 @@ def main() -> int:
 | 
			
		|||
            chain = process_chains.get_chain_for_filename(os.path.join(root, f), ctx=metadata)
 | 
			
		||||
            print("process {} -> {}".format(os.path.join(root, f), os.path.join(target_dir, chain.output_filename)))
 | 
			
		||||
            if not args.dry_run:
 | 
			
		||||
                with open(os.path.join(target_dir, chain.output_filename), "w") as outfile:
 | 
			
		||||
                    for line in chain.output:
 | 
			
		||||
                        outfile.write(line)
 | 
			
		||||
                try:
 | 
			
		||||
                    with open(os.path.join(target_dir, chain.output_filename), "w") as outfile:
 | 
			
		||||
                        for line in chain.output:
 | 
			
		||||
                            outfile.write(line)
 | 
			
		||||
                except PassthroughException:
 | 
			
		||||
                    shutil.copyfile(os.path.join(root, f), os.path.join(target_dir, chain.output_filename))
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
from .processors import Processor
 | 
			
		||||
from .processors import Processor, PassthroughException
 | 
			
		||||
from ..utils import guess_mime
 | 
			
		||||
from typing import Iterable, Optional, Dict, cast
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ class PassThrough(Processor):
 | 
			
		|||
        Returns:
 | 
			
		||||
            iterable: The post-processed output stream
 | 
			
		||||
        """
 | 
			
		||||
        return input_file
 | 
			
		||||
        raise PassthroughException("passthrough")
 | 
			
		||||
 | 
			
		||||
    def extension(self, oldname: str, ctx: Optional[Dict] = None) -> str:
 | 
			
		||||
        """Return the mimetype of the post-processed file.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,10 @@ import abc
 | 
			
		|||
from typing import Iterable, Optional, Dict
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PassthroughException(Exception):
 | 
			
		||||
    """Raised when the processor would like the file to pass through unchanged."""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ProcessorException(Exception):  # pragma: no cover
 | 
			
		||||
    """A base exception class to be used by processor objects."""
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								setup.py
									
										
									
									
									
								
							
							
						
						
									
										5
									
								
								setup.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -43,12 +43,13 @@ setup(
 | 
			
		|||
    #        'cookbook = spicerack.cookbook:main',
 | 
			
		||||
    #    ],
 | 
			
		||||
    # },
 | 
			
		||||
    include_package_data=True,
 | 
			
		||||
    extras_require=EXTRAS_REQUIRE,
 | 
			
		||||
    install_requires=INSTALL_REQUIRES,
 | 
			
		||||
    keywords=["cms", "website", "compiler"]
 | 
			
		||||
    keywords=["cms", "website", "compiler"],
 | 
			
		||||
    license="MIT",
 | 
			
		||||
    long_description=LONG_DESCRIPTION,
 | 
			
		||||
    name="pixywerk2",  # Must be the same used for __version__ in __init__.py
 | 
			
		||||
    name="pixywerk2",
 | 
			
		||||
    packages=find_packages(exclude=["*.tests", "*.tests.*"]),
 | 
			
		||||
    platforms=["GNU/Linux"],
 | 
			
		||||
    setup_requires=SETUP_REQUIRES,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue