PK mM?i
A A build.xml
PK mM?F; ; commands.py# Here you can create play commands that are specific to the module, and extend existing commands
MODULE = 's3blobs'
# Commands that are specific to your module
COMMANDS = ['s3blobs:hello']
def execute(**kargs):
command = kargs.get("command")
app = kargs.get("app")
args = kargs.get("args")
env = kargs.get("env")
if command == "s3blobs:hello":
print "~ Hello"
# This will be executed before any command (new, run...)
def before(**kargs):
command = kargs.get("command")
app = kargs.get("app")
args = kargs.get("args")
env = kargs.get("env")
# This will be executed after any command (new, run...)
def after(**kargs):
command = kargs.get("command")
app = kargs.get("app")
args = kargs.get("args")
env = kargs.get("env")
if command == "new":
pass
PK mM?- - commands.pyc
V
Nc @ s. d Z d g Z d Z d Z d Z d S( t s3blobss
s3blobs:helloc K sT | j d } | j d } | j d } | j d } | d k rP d GHn d S( Nt commandt appt argst envs
s3blobs:hellos ~ Hello( t get( t kargsR R R R ( ( s+ /Users/roderik/Projects/s3blobs/commands.pyt execute s c K s@ | j d } | j d } | j d } | j d } d S( NR R R R ( R ( R R R R R ( ( s+ /Users/roderik/Projects/s3blobs/commands.pyt before s c K sO | j d } | j d } | j d } | j d } | d k rK n d S( NR R R R t new( R ( R R R R R ( ( s+ /Users/roderik/Projects/s3blobs/commands.pyt after s N( t MODULEt COMMANDSR R R
( ( ( s+ /Users/roderik/Projects/s3blobs/commands.pyt s PK N@NK$ $ manifestversion=0.1
frameworkVersions=1.2.3
PK mM?T
conf/messages# Default s3blobs messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file
#s3blobs.name=s3blobsPK Y4@H") conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# * / module:s3blobs
#
# ~~~~
# GET /assets s3blobs.Files.uploadForm
PK i4@jLY Y conf/dependencies.ymlself: play -> s3blobs 0.1
require:
- play
- com.amazonaws -> aws-java-sdk 1.3.0
PK WX4@qh h , samples-and-tests/plays3upload/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK X4@ ~ 4 samples-and-tests/plays3upload/conf/dependencies.yml# Application dependencies
require:
- play
- localModule -> s3blobs 0.1
repositories:
- localModule:
type: local
artifact: "${application.path}/../../dist/[module]-[revision].zip"
contains:
- localModule -> *
PK Z4@$ 4 samples-and-tests/plays3upload/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=plays3upload
# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod
# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=3FzoStHct1r7kzn2hbg6glaVA1MmqPZkDfowLJjkrjdwGrzRyTkhnnOV6soHZyQ2
# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja
# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy
# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/
# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false
# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com
# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5
# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off
# Database configuration
# ~~~~~
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
# - mem : for a transient in memory database (H2 in memory)
# - fs : for a simple file written database (H2 file stored)
db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close
# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments
# Memcached configuration
# ~~~~~
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=
# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600
# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true
# Custom mime types
# mimetype.xpi=application/x-xpinstall
# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo
# Mail configuration
# ~~~~~
# Default is to use a mock Mailer
mail.smtp=mock
# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl
# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/
# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10
# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3
# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s
# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock
s3.bucket=${S3_BUCKET}
aws.access.key=${AWS_ACCESS_KEY}
aws.secret.key=${AWS_SECRET_KEY}PK 4@C
D D * samples-and-tests/plays3upload/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / Files.uploadForm
GET /listUploads Files.listUploads
GET /downloadFile Files.downloadFile
POST /doUpload Files.doUpload
# Ignore favicon requests
GET /favicon.ico 404
# Map static resources from the /app/public folder to the /public path
GET /public/ staticDir:public
PK TZ4@k 9 samples-and-tests/plays3upload/app/controllers/Files.javapackage controllers;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;
import models.Document;
import play.libs.MimeTypes;
import play.modules.s3blobs.S3Blob;
import play.mvc.Controller;
public class Files extends Controller
{
public static void uploadForm()
{
render();
}
public static void doUpload(File file, String comment) throws FileNotFoundException
{
final Document doc = new Document();
doc.fileName = file.getName();
doc.comment = comment;
doc.file = new S3Blob();
doc.file.set(new FileInputStream(file), MimeTypes.getContentType(file.getName()));
doc.save();
listUploads();
}
public static void listUploads()
{
List docs = Document.findAll();
render(docs);
}
public static void downloadFile(long id)
{
final Document doc = Document.findById(id);
notFoundIfNull(doc);
response.setContentTypeIfNotSet(doc.file.type());
renderBinary(doc.file.get(), doc.fileName);
}
}
PK {Y4@ 8 samples-and-tests/plays3upload/app/views/errors/404.html
Not found
#{if play.mode.name() == 'DEV'}
#{404 result /}
#{/if}
#{else}