Browse Source

Merge pull request #73 from gr3dman/hyde

---

Hi,

I made a simple plugin for paginating blog posts.
main
Lakshmi Vyas 13 years ago
parent
commit
e153b284a1
11 changed files with 788 additions and 0 deletions
  1. +148
    -0
      hyde/ext/plugins/paginator.py
  2. +129
    -0
      hyde/tests/ext/test_paginator.py
  3. +133
    -0
      hyde/tests/sites/test_paginator/content/blog/angry-post.html
  4. +87
    -0
      hyde/tests/sites/test_paginator/content/blog/another-sad-post.html
  5. +144
    -0
      hyde/tests/sites/test_paginator/content/blog/happy-post.html
  6. +93
    -0
      hyde/tests/sites/test_paginator/content/blog/sad-post.html
  7. +11
    -0
      hyde/tests/sites/test_paginator/content/custom_file_pattern.txt
  8. +10
    -0
      hyde/tests/sites/test_paginator/content/pages_of_one.txt
  9. +10
    -0
      hyde/tests/sites/test_paginator/content/pages_of_ten.txt
  10. +3
    -0
      hyde/tests/sites/test_paginator/layout/root.j2
  11. +20
    -0
      hyde/tests/sites/test_paginator/site.yaml

+ 148
- 0
hyde/ext/plugins/paginator.py View File

@@ -0,0 +1,148 @@
# -*- coding: utf-8 -*-
"""
Paginator plugin. Groups a sorted set of resources into pages and supplies
each page to a copy of the original resource.
"""
import os

from hyde.fs import File
from hyde.plugin import Plugin
from hyde.site import Resource
from hyde.util import pairwalk

class Page:
def __init__(self, posts, number):
self.posts = posts
self.number = number

class Paginator:
"""
Iterates resources which have pages associated with them.
"""

file_pattern = 'page$PAGE/$FILE$EXT'

def __init__(self, settings):
self.sorter = getattr(settings, 'sorter', None)
self.size = getattr(settings, 'size', 10)
self.file_pattern = getattr(settings, 'file_pattern', self.file_pattern)

def _relative_url(self, source_path, number, basename, ext):
"""
Create a new URL for a new page. The first page keeps the same name;
the subsequent pages are named according to file_pattern.
"""
path = File(source_path)
if number != 1:
filename = self.file_pattern.replace('$PAGE', str(number)) \
.replace('$FILE', basename) \
.replace('$EXT', ext)
path = path.parent.child(os.path.normpath(filename))
return path

def _new_resource(self, base_resource, node, page_number):
"""
Create a new resource as a copy of a base_resource, with a page of
resources associated with it.
"""
res = Resource(base_resource.source_file, node)
path = self._relative_url(base_resource.relative_path,
page_number,
base_resource.source_file.name_without_extension,
base_resource.source_file.extension)
res.set_relative_deploy_path(path)
return res

@staticmethod
def _attach_page_to_resource(page, resource):
"""
Hook up a page and a resource.
"""
resource.page = page
page.resource = resource

@staticmethod
def _add_dependencies_to_resource(dependencies, resource):
"""
Add a bunch of resources as dependencies to another resource.
"""
if not hasattr(resource, 'depends'):
resource.depends = []
resource.depends.extend([dep.relative_path for dep in dependencies
if dep.relative_path not in resource.depends])

def _walk_pages_in_node(self, node):
"""
Segregate each resource into a page.
"""
walker = 'walk_resources'
if self.sorter:
walker = 'walk_resources_sorted_by_%s' % self.sorter
walker = getattr(node, walker, getattr(node, 'walk_resources'))

posts = list(walker())
number = 1
while posts:
yield Page(posts[:self.size], number)
posts = posts[self.size:]
number += 1

def walk_paged_resources(self, node, resource):
"""
Group the resources and return the new page resources.
"""
added_resources = []
pages = list(self._walk_pages_in_node(node))
deps = reduce(list.__add__, [page.posts for page in pages], [])

Paginator._attach_page_to_resource(pages[0], resource)
Paginator._add_dependencies_to_resource(deps, resource)
for page in pages[1:]:
# make new resource
new_resource = self._new_resource(resource, node, page.number)
Paginator._attach_page_to_resource(page, new_resource)
new_resource.depends = resource.depends
added_resources.append(new_resource)

for prev, next in pairwalk(pages):
next.previous = prev
prev.next = next

return added_resources


class PaginatorPlugin(Plugin):
"""
Paginator plugin.

Configuration: in a resource's metadata:

paginator:
sorter: time
size: 5
file_pattern: page$PAGE/$FILE$EXT # optional

then in the resource's content:

{% for res in resource.page.posts %}
{% refer to res.url as post %}
{{ post }}
{% endfor %}

{{ resource.page.previous }}
{{ resource.page.next }}

"""
def __init__(self, site):
super(PaginatorPlugin, self).__init__(site)

def begin_site(self):
for node in self.site.content.walk():
added_resources = []
paged_resources = (res for res in node.resources
if hasattr(res.meta, 'paginator'))
for resource in paged_resources:
paginator = Paginator(resource.meta.paginator)
added_resources += paginator.walk_paged_resources(node, resource)

node.resources += added_resources

+ 129
- 0
hyde/tests/ext/test_paginator.py View File

@@ -0,0 +1,129 @@
# -*- coding: utf-8 -*-
"""
Use nose
`$ pip install nose`
`$ nosetests`
"""
from textwrap import dedent

from hyde.fs import File, Folder
from hyde.generator import Generator
from hyde.model import Expando
from hyde.site import Site

TEST_SITE = File(__file__).parent.parent.child_folder('_test')

class TestPaginator(object):

def setUp(self):
TEST_SITE.make()
TEST_SITE.parent.child_folder(
'sites/test_paginator').copy_contents_to(TEST_SITE)
self.s = Site(TEST_SITE)
self.deploy = TEST_SITE.child_folder('deploy')

self.gen = Generator(self.s)
self.gen.load_site_if_needed()
self.gen.load_template_if_needed()
self.gen.generate_all()


def tearDown(self):
TEST_SITE.delete()


def test_pages_of_one(self):
pages = ['pages_of_one.txt', 'page2/pages_of_one.txt',
'page3/pages_of_one.txt', 'page4/pages_of_one.txt']
files = [File(self.deploy.child(p)) for p in pages]
for f in files:
assert f.exists

page5 = File(self.deploy.child('page5/pages_of_one.txt'))
assert not page5.exists


def test_pages_of_one_content(self):
expected_page1_content = dedent('''\
Another Sad Post

page2/pages_of_one.txt''')
expected_page2_content = dedent('''\
A Happy Post
pages_of_one.txt
page3/pages_of_one.txt''')
expected_page3_content = dedent('''\
An Angry Post
page2/pages_of_one.txt
page4/pages_of_one.txt''')
expected_page4_content = dedent('''\
A Sad Post
page3/pages_of_one.txt
''')

page1 = self.deploy.child('pages_of_one.txt')
content = File(page1).read_all()
assert expected_page1_content == content

page2 = self.deploy.child('page2/pages_of_one.txt')
content = File(page2).read_all()
assert expected_page2_content == content

page3 = self.deploy.child('page3/pages_of_one.txt')
content = File(page3).read_all()
assert expected_page3_content == content

page4 = self.deploy.child('page4/pages_of_one.txt')
content = File(page4).read_all()
assert expected_page4_content == content


def test_pages_of_ten(self):
page1 = self.deploy.child('pages_of_ten.txt')
page2 = self.deploy.child('page2/pages_of_ten.txt')

assert File(page1).exists
assert not File(page2).exists


def test_pages_of_ten_depends(self):
depends = self.gen.deps['pages_of_ten.txt']

assert depends
assert len(depends) == 4
assert 'blog/sad-post.html' in depends
assert 'blog/another-sad-post.html' in depends
assert 'blog/angry-post.html' in depends
assert 'blog/happy-post.html' in depends


def test_pages_of_ten_content(self):
expected_content = dedent('''\
Another Sad Post
A Happy Post
An Angry Post
A Sad Post
''')

page = self.deploy.child('pages_of_ten.txt')
content = File(page).read_all()
assert expected_content == content


def test_pages_of_one_depends(self):
depends = self.gen.deps['pages_of_one.txt']

assert depends
assert len(depends) == 4
assert 'blog/sad-post.html' in depends
assert 'blog/another-sad-post.html' in depends
assert 'blog/angry-post.html' in depends
assert 'blog/happy-post.html' in depends


def test_custom_file_pattern(self):
page1 = self.deploy.child('custom_file_pattern.txt')
page2 = self.deploy.child('custom_file_pattern-2.txt')

assert File(page1).exists
assert File(page2).exists

+ 133
- 0
hyde/tests/sites/test_paginator/content/blog/angry-post.html View File

@@ -0,0 +1,133 @@
---
title: An Angry Post
description: >
Temper. Temper. Temper.
created: !!timestamp '2011-01-01 10:00:00'
tags:
- angry
- thoughts
---

{% mark excerpt -%}

To complete the character-study of Mr. Worple, he was a man of extremely
uncertain temper, and his general tendency was to think that Corky was a poor
chump and that whatever step he took in any direction on his own account, was
just another proof of his innate idiocy. I should imagine Jeeves feels very
much the same about me.

{%- endmark %}

So when Corky trickled into my apartment one afternoon, shooing a girl in
front of him, and said, "Bertie, I want you to meet my fiancée, Miss Singer,"
the aspect of the matter which hit me first was precisely the one which he had
come to consult me about. The very first words I spoke were, "Corky, how about
your uncle?"

The poor chap gave one of those mirthless laughs. He was looking anxious and
worried, like a man who has done the murder all right but can't think what the
deuce to do with the body.

"We're so scared, Mr. Wooster," said the girl. "We were hoping that you might
suggest a way of breaking it to him."

Muriel Singer was one of those very quiet, appealing girls who have a way of
looking at you with their big eyes as if they thought you were the greatest
thing on earth and wondered that you hadn't got on to it yet yourself. She sat
there in a sort of shrinking way, looking at me as if she were saying to
herself, "Oh, I do hope this great strong man isn't going to hurt me." She
gave a fellow a protective kind of feeling, made him want to stroke her hand
and say, "There, there, little one!" or words to that effect. She made me feel
that there was nothing I wouldn't do for her. She was rather like one of those
innocent-tasting American drinks which creep imperceptibly into your system so
that, before you know what you're doing, you're starting out to reform the
world by force if necessary and pausing on your way to tell the large man in
the corner that, if he looks at you like that, you will knock his head off.
What I mean is, she made me feel alert and dashing, like a jolly old
knight-errant or something of that kind. I felt that I was with her in this
thing to the limit.

"I don't see why your uncle shouldn't be most awfully bucked," I said to
Corky. "He will think Miss Singer the ideal wife for you."

Corky declined to cheer up.

"You don't know him. Even if he did like Muriel he wouldn't admit it. That's
the sort of pig-headed guy he is. It would be a matter of principle with him
to kick. All he would consider would be that I had gone and taken an important
step without asking his advice, and he would raise Cain automatically. He's
always done it."

I strained the old bean to meet this emergency.

"You want to work it so that he makes Miss Singer's acquaintance without
knowing that you know her. Then you come along"

"But how can I work it that way?"

I saw his point. That was the catch.

"There's only one thing to do," I said.

"What's that?"

"Leave it to Jeeves."

And I rang the bell.

"Sir?" said Jeeves, kind of manifesting himself. One of the rummy things about
Jeeves is that, unless you watch like a hawk, you very seldom see him come
into a room. He's like one of those weird chappies in India who dissolve
themselves into thin air and nip through space in a sort of disembodied way
and assemble the parts again just where they want them. I've got a cousin
who's what they call a Theosophist, and he says he's often nearly worked the
thing himself, but couldn't quite bring it off, probably owing to having fed
in his boyhood on the flesh of animals slain in anger and pie.

The moment I saw the man standing there, registering respectful attention, a
weight seemed to roll off my mind. I felt like a lost child who spots his
father in the offing. There was something about him that gave me confidence.

Jeeves is a tallish man, with one of those dark, shrewd faces. His eye gleams
with the light of pure intelligence.

"Jeeves, we want your advice."

"Very good, sir."

I boiled down Corky's painful case into a few well-chosen words.

"So you see what it amount to, Jeeves. We want you to suggest some way by
which Mr. Worple can make Miss Singer's acquaintance without getting on to the
fact that Mr. Corcoran already knows her. Understand?"

"Perfectly, sir."

"Well, try to think of something."

"I have thought of something already, sir."

"You have!"

"The scheme I would suggest cannot fail of success, but it has what may seem
to you a drawback, sir, in that it requires a certain financial outlay."

"He means," I translated to Corky, "that he has got a pippin of an idea, but
it's going to cost a bit."

Naturally the poor chap's face dropped, for this seemed to dish the whole
thing. But I was still under the influence of the girl's melting gaze, and I
saw that this was where I started in as a knight-errant.

"You can count on me for all that sort of thing, Corky," I said. "Only too
glad. Carry on, Jeeves."

"I would suggest, sir, that Mr. Corcoran take advantage of Mr. Worple's
attachment to ornithology."

"How on earth did you know that he was fond of birds?"


[My Man Jeeves by PG Wodehouse][MMJ]

[MMJ]: http://www.gutenberg.org/cache/epub/8164/pg8164.html

+ 87
- 0
hyde/tests/sites/test_paginator/content/blog/another-sad-post.html View File

@@ -0,0 +1,87 @@
---
title: Another Sad Post
description: >
Something else sad happened.
created: !!timestamp '2011-03-01 10:00:00'
tags:
- sad
- events
---

{% mark excerpt -%}

I went and dressed sadly. It will show you pretty well how pipped I was when I
tell you that I near as a toucher put on a white tie with a dinner-jacket. I
sallied out for a bit of food more to pass the time than because I wanted it.
It seemed brutal to be wading into the bill of fare with poor old Bicky headed
for the breadline.

{%- endmark %}

When I got back old Chiswick had gone to bed, but Bicky was there, hunched up
in an arm-chair, brooding pretty tensely, with a cigarette hanging out of the
corner of his mouth and a more or less glassy stare in his eyes. He had the
aspect of one who had been soaked with what the newspaper chappies call "some
blunt instrument."

"This is a bit thick, old thing—what!" I said.

He picked up his glass and drained it feverishly, overlooking the fact that it
hadn't anything in it.

"I'm done, Bertie!" he said.

He had another go at the glass. It didn't seem to do him any good.

"If only this had happened a week later, Bertie! My next month's money was due
to roll in on Saturday. I could have worked a wheeze I've been reading about
in the magazine advertisements. It seems that you can make a dashed amount of
money if you can only collect a few dollars and start a chicken-farm. Jolly
sound scheme, Bertie! Say you buy a hen—call it one hen for the sake of
argument. It lays an egg every day of the week. You sell the eggs seven for
twenty-five cents. Keep of hen costs nothing. Profit practically twenty-five
cents on every seven eggs. Or look at it another way: Suppose you have a dozen
eggs. Each of the hens has a dozen chickens. The chickens grow up and have
more chickens. Why, in no time you'd have the place covered knee-deep in hens,
all laying eggs, at twenty-five cents for every seven. You'd make a fortune.
Jolly life, too, keeping hens!" He had begun to get quite worked up at the
thought of it, but he slopped back in his chair at this juncture with a good
deal of gloom. "But, of course, it's no good," he said, "because I haven't the
cash."

"You've only to say the word, you know, Bicky, old top."

"Thanks awfully, Bertie, but I'm not going to sponge on you."

That's always the way in this world. The chappies you'd like to lend money to
won't let you, whereas the chappies you don't want to lend it to will do
everything except actually stand you on your head and lift the specie out of
your pockets. As a lad who has always rolled tolerably free in the right
stuff, I've had lots of experience of the second class. Many's the time, back
in London, I've hurried along Piccadilly and felt the hot breath of the
toucher on the back of my neck and heard his sharp, excited yapping as he
closed in on me. I've simply spent my life scattering largesse to blighters I
didn't care a hang for; yet here was I now, dripping doubloons and pieces of
eight and longing to hand them over, and Bicky, poor fish, absolutely on his
uppers, not taking any at any price.

"Well, there's only one hope, then."

"What's that?"

"Jeeves."

"Sir?"

There was Jeeves, standing behind me, full of zeal. In this matter of
shimmering into rooms the chappie is rummy to a degree. You're sitting in the
old armchair, thinking of this and that, and then suddenly you look up, and
there he is. He moves from point to point with as little uproar as a jelly
fish. The thing startled poor old Bicky considerably. He rose from his seat
like a rocketing pheasant. I'm used to Jeeves now, but often in the days when
he first came to me I've bitten my tongue freely on finding him unexpectedly
in my midst.

[My Man Jeeves by PG Wodehouse][MMJ]

[MMJ]: http://www.gutenberg.org/cache/epub/8164/pg8164.html

+ 144
- 0
hyde/tests/sites/test_paginator/content/blog/happy-post.html View File

@@ -0,0 +1,144 @@
---
title: A Happy Post
description: >
Smile. Laugh.
created: !!timestamp '2011-02-01 10:00:00'
tags:
- happy
- thoughts
---

{% mark excerpt -%}

Lady Malvern was a hearty, happy, healthy, overpowering sort of dashed female,
not so very tall but making up for it by measuring about six feet from the
O.P. to the Prompt Side.

{%- endmark %}

She fitted into my biggest arm-chair as if it had
been built round her by someone who knew they were wearing arm-chairs tight
about the hips that season. She had bright, bulging eyes and a lot of yellow
hair, and when she spoke she showed about fifty-seven front teeth. She was one
of those women who kind of numb a fellow's faculties. She made me feel as if I
were ten years old and had been brought into the drawing-room in my Sunday
clothes to say how-d'you-do. Altogether by no means the sort of thing a
chappie would wish to find in his sitting-room before breakfast.

Motty, the son, was about twenty-three, tall and thin and meek-looking. He had
the same yellow hair as his mother, but he wore it plastered down and parted
in the middle. His eyes bulged, too, but they weren't bright. They were a dull
grey with pink rims. His chin gave up the struggle about half-way down, and he
didn't appear to have any eyelashes. A mild, furtive, sheepish sort of
blighter, in short.

"Awfully glad to see you," I said. "So you've popped over, eh? Making a long
stay in America?"

"About a month. Your aunt gave me your address and told me to be sure and call
on you."

I was glad to hear this, as it showed that Aunt Agatha was beginning to come
round a bit. There had been some unpleasantness a year before, when she had
sent me over to New York to disentangle my Cousin Gussie from the clutches of
a girl on the music-hall stage. When I tell you that by the time I had
finished my operations, Gussie had not only married the girl but had gone on
the stage himself, and was doing well, you'll understand that Aunt Agatha was
upset to no small extent. I simply hadn't dared go back and face her, and it
was a relief to find that time had healed the wound and all that sort of thing
enough to make her tell her pals to look me up. What I mean is, much as I
liked America, I didn't want to have England barred to me for the rest of my
natural; and, believe me, England is a jolly sight too small for anyone to
live in with Aunt Agatha, if she's really on the warpath. So I braced on
hearing these kind words and smiled genially on the assemblage.

"Your aunt said that you would do anything that was in your power to be of
assistance to us."

"Rather? Oh, rather! Absolutely!"

"Thank you so much. I want you to put dear Motty up for a little while."

I didn't get this for a moment.

"Put him up? For my clubs?"

"No, no! Darling Motty is essentially a home bird. Aren't you, Motty darling?"

Motty, who was sucking the knob of his stick, uncorked himself.

"Yes, mother," he said, and corked himself up again.

"I should not like him to belong to clubs. I mean put him up here. Have him to
live with you while I am away."

These frightful words trickled out of her like honey. The woman simply didn't
seem to understand the ghastly nature of her proposal. I gave Motty the swift
east-to-west. He was sitting with his mouth nuzzling the stick, blinking at
the wall. The thought of having this planted on me for an indefinite period
appalled me. Absolutely appalled me, don't you know. I was just starting to
say that the shot wasn't on the board at any price, and that the first sign
Motty gave of trying to nestle into my little home I would yell for the
police, when she went on, rolling placidly over me, as it were.

There was something about this woman that sapped a chappie's will-power.

"I am leaving New York by the midday train, as I have to pay a visit to
Sing-Sing prison. I am extremely interested in prison conditions in America.
After that I work my way gradually across to the coast, visiting the points of
interest on the journey. You see, Mr. Wooster, I am in America principally on
business. No doubt you read my book, India and the Indians? My publishers are
anxious for me to write a companion volume on the United States. I shall not
be able to spend more than a month in the country, as I have to get back for
the season, but a month should be ample. I was less than a month in India, and
my dear friend Sir Roger Cremorne wrote his America from Within after a stay
of only two weeks. I should love to take dear Motty with me, but the poor boy
gets so sick when he travels by train. I shall have to pick him up on my
return."

From where I sat I could see Jeeves in the dining-room, laying the
breakfast-table. I wished I could have had a minute with him alone. I felt
certain that he would have been able to think of some way of putting a stop to
this woman.

"It will be such a relief to know that Motty is safe with you, Mr. Wooster. I
know what the temptations of a great city are. Hitherto dear Motty has been
sheltered from them. He has lived quietly with me in the country. I know that
you will look after him carefully, Mr. Wooster. He will give very little
trouble." She talked about the poor blighter as if he wasn't there. Not that
Motty seemed to mind. He had stopped chewing his walking-stick and was sitting
there with his mouth open. "He is a vegetarian and a teetotaller and is
devoted to reading. Give him a nice book and he will be quite contented." She
got up. "Thank you so much, Mr. Wooster! I don't know what I should have done
without your help. Come, Motty! We have just time to see a few of the sights
before my train goes. But I shall have to rely on you for most of my
information about New York, darling. Be sure to keep your eyes open and take
notes of your impressions! It will be such a help. Good-bye, Mr. Wooster. I
will send Motty back early in the afternoon."

They went out, and I howled for Jeeves.

"Jeeves! What about it?"

"Sir?"

"What's to be done? You heard it all, didn't you? You were in the dining-room
most of the time. That pill is coming to stay here."

"Pill, sir?"

"The excrescence."

"I beg your pardon, sir?"

I looked at Jeeves sharply. This sort of thing wasn't like him. It was as if
he were deliberately trying to give me the pip. Then I understood. The man was
really upset about that tie. He was trying to get his own back.

"Lord Pershore will be staying here from to-night, Jeeves," I said coldly.

"Very good, sir. Breakfast is ready, sir."

[My Man Jeeves by PG Wodehouse][MMJ]

[MMJ]: http://www.gutenberg.org/cache/epub/8164/pg8164.html

+ 93
- 0
hyde/tests/sites/test_paginator/content/blog/sad-post.html View File

@@ -0,0 +1,93 @@
---
title: A Sad Post
description: >
Something sad happened.
created: !!timestamp '2010-12-01 10:00:00'
tags:
- sad
- thoughts
---

{% mark image -%}

![A Dark Image]([[!!images/dark.png]])

{%- endmark %}

{% mark excerpt -%}

I went and dressed sadly. It will show you pretty well how pipped I was when I
tell you that I near as a toucher put on a white tie with a dinner-jacket. I
sallied out for a bit of food more to pass the time than because I wanted it.
It seemed brutal to be wading into the bill of fare with poor old Bicky headed
for the breadline.

{%- endmark %}

When I got back old Chiswick had gone to bed, but Bicky was there, hunched up
in an arm-chair, brooding pretty tensely, with a cigarette hanging out of the
corner of his mouth and a more or less glassy stare in his eyes. He had the
aspect of one who had been soaked with what the newspaper chappies call "some
blunt instrument."

"This is a bit thick, old thing—what!" I said.

He picked up his glass and drained it feverishly, overlooking the fact that it
hadn't anything in it.

"I'm done, Bertie!" he said.

He had another go at the glass. It didn't seem to do him any good.

"If only this had happened a week later, Bertie! My next month's money was due
to roll in on Saturday. I could have worked a wheeze I've been reading about
in the magazine advertisements. It seems that you can make a dashed amount of
money if you can only collect a few dollars and start a chicken-farm. Jolly
sound scheme, Bertie! Say you buy a hen—call it one hen for the sake of
argument. It lays an egg every day of the week. You sell the eggs seven for
twenty-five cents. Keep of hen costs nothing. Profit practically twenty-five
cents on every seven eggs. Or look at it another way: Suppose you have a dozen
eggs. Each of the hens has a dozen chickens. The chickens grow up and have
more chickens. Why, in no time you'd have the place covered knee-deep in hens,
all laying eggs, at twenty-five cents for every seven. You'd make a fortune.
Jolly life, too, keeping hens!" He had begun to get quite worked up at the
thought of it, but he slopped back in his chair at this juncture with a good
deal of gloom. "But, of course, it's no good," he said, "because I haven't the
cash."

"You've only to say the word, you know, Bicky, old top."

"Thanks awfully, Bertie, but I'm not going to sponge on you."

That's always the way in this world. The chappies you'd like to lend money to
won't let you, whereas the chappies you don't want to lend it to will do
everything except actually stand you on your head and lift the specie out of
your pockets. As a lad who has always rolled tolerably free in the right
stuff, I've had lots of experience of the second class. Many's the time, back
in London, I've hurried along Piccadilly and felt the hot breath of the
toucher on the back of my neck and heard his sharp, excited yapping as he
closed in on me. I've simply spent my life scattering largesse to blighters I
didn't care a hang for; yet here was I now, dripping doubloons and pieces of
eight and longing to hand them over, and Bicky, poor fish, absolutely on his
uppers, not taking any at any price.

"Well, there's only one hope, then."

"What's that?"

"Jeeves."

"Sir?"

There was Jeeves, standing behind me, full of zeal. In this matter of
shimmering into rooms the chappie is rummy to a degree. You're sitting in the
old armchair, thinking of this and that, and then suddenly you look up, and
there he is. He moves from point to point with as little uproar as a jelly
fish. The thing startled poor old Bicky considerably. He rose from his seat
like a rocketing pheasant. I'm used to Jeeves now, but often in the days when
he first came to me I've bitten my tongue freely on finding him unexpectedly
in my midst.

[My Man Jeeves by PG Wodehouse][MMJ]

[MMJ]: http://www.gutenberg.org/cache/epub/8164/pg8164.html

+ 11
- 0
hyde/tests/sites/test_paginator/content/custom_file_pattern.txt View File

@@ -0,0 +1,11 @@
---
paginator:
sorter: time
size: 2
file_pattern: $FILE-$PAGE$EXT
---
{% for res in resource.page.posts %}
{{ res.meta.title }}
{% endfor %}
{{ resource.page.previous.resource.url }}
{{ resource.page.next.resource.url }}

+ 10
- 0
hyde/tests/sites/test_paginator/content/pages_of_one.txt View File

@@ -0,0 +1,10 @@
---
paginator:
sorter: time
size: 1
---
{% for res in resource.page.posts %}
{{ res.meta.title }}
{% endfor %}
{{ resource.page.previous.resource.url }}
{{ resource.page.next.resource.url }}

+ 10
- 0
hyde/tests/sites/test_paginator/content/pages_of_ten.txt View File

@@ -0,0 +1,10 @@
---
paginator:
sorter: time
size: 10
---
{% for res in resource.page.posts %}
{{ res.meta.title }}
{% endfor %}
{{ resource.page.previous.resource.url -}}
{{ resource.page.next.resource.url -}}

+ 3
- 0
hyde/tests/sites/test_paginator/layout/root.j2 View File

@@ -0,0 +1,3 @@
{% block content -%}

{%- endblock %}

+ 20
- 0
hyde/tests/sites/test_paginator/site.yaml View File

@@ -0,0 +1,20 @@
mode: development
media_root: media # Relative path from content folder.
media_url: /media # URL where the media files are served from.
base_url: / # The base url for autogenerated links.
plugins:
- hyde.ext.plugins.meta.MetaPlugin
- hyde.ext.plugins.sorter.SorterPlugin
- hyde.ext.plugins.paginator.PaginatorPlugin
meta:
nodemeta: meta.yaml
created: !!timestamp 2010-01-01 00:00:00
extends: root.j2
default_block: content
sorter:
time:
attr:
- meta.created
reverse: true
filters:
source.kind: html

Loading…
Cancel
Save