This will replace the current stuff in thing_utils.py. The idea is that
by storing the various last modified timestamps for a thing in a single
row together, we can save Cassandra round trips and seeks per request.
This has a couple of advantages:
* interoperability with Cassandra tools (cassandra-cli / cqlsh)
* smaller by 5-6 bytes on every column
From here on out, date columns will be written in the Cassandra
standard 8-byte integer (number of milliseconds since epoch) format.
Old-style stringified epoch seconds will be read properly.
This relies on Pycassa's new UTC-based behaviour in 1.7.
Previously, invoice number was [user_id]T[link_id]C[campaign_id].
Since campaigns are represented as Things now, their ids are longer, putting
us over the 20 char limit for invoice numbers defined in the authorize.net
xml api.
(see https://api.authorize.net/xml/v1/schema/AnetApiSchema.xsd )
Now invoice number will be T[link_id]C[campaign_id], which is still unique
across campaigns since a link is always associated with only one user
First step of breaking campaigns out into their own data object.
Campaigns are still stored as an attribute on their promoted Link as before,
and all reads are still done from the link attribute, but writes (creation of
a campaign and edits to a campaign) are also written into a Thing table.
NOTE: This change has a configuration dependency in another repository.
The following lines must be added to the .ini file:
db_table_promocampaign = thing
db_servers_promocampaign = [YOUR SERVER NAMES HERE]
Since "+/-frontpage" became "subscribe" and "unsubscribe", the text is
no longer the same width. This causes the subreddits to be jagged on
/reddits listings. This fixes it by giving space (hopefully enough for
all languages) for the buttons.
Makes campaign id a part of the invoice number so self-serve users can create
multiple campaigns at the same bid amount without getting a duplicate
transaction error
Since we're using nginx in front of subreddit stylesheets
to protect ourselves from ponies, we need to make sure we
don't give a stale copy of the CSS when requested with the
new query param thereby poisoning nginx's cache.