Skip to content

Instantly share code, notes, and snippets.

@cjhanks
Last active December 17, 2015 06:29
Show Gist options
  • Select an option

  • Save cjhanks/5566207 to your computer and use it in GitHub Desktop.

Select an option

Save cjhanks/5566207 to your computer and use it in GitHub Desktop.
#!/bin/bash
package="$1"
version="$2"
curl -X GET http://127.0.0.1:5000/package/$package/$version
#!/usr/bin/env python2
import gevent
import gevent.monkey
gevent.monkey.patch_all()
from gevent.wsgi import WSGIServer
from cStringIO import StringIO
from boto import connect_s3
from boto.s3.key import Key
from flask import Flask, request, Response
app = Flask('version-serv')
S3_BUCKET = 'internal_distribution'
class Project(object):
Projects = {}
def __init__(self, project_name):
self.__proj_name = project_name
Project.Projects[project_name] = self
@staticmethod
def instance(name):
try:
return Project.Projects[name]
except KeyError:
return Project(name)
@property
def name(self):
return self.__proj_name
def put(self, version, file_path):
buf = StringIO()
file_path.save(buf)
buf = buf.getvalue()
app.logger.debug('len --> %d' % len(buf))
bucket = connect_s3().get_bucket(S3_BUCKET)
key = Key(bucket)
key.key = '%s/%s' % (self.name, version)
key.set_contents_from_string(buf)
ver = Key(bucket)
ver.key = '%s/%s' % (self.name, 'HEAD')
ver.set_contents_from_string(version)
return '', 201
def get(self, version):
bucket = connect_s3().get_bucket(S3_BUCKET)
if version == 'HEAD':
ver = Key(bucket)
ver.key = '%s/%s' % (self.name, 'HEAD')
version = ver.get_contents_as_string()
key = Key(bucket)
key.key = '%s/%s' % (self.name, version)
return key.get_contents_as_string()
@app.route('/package/<project>' , methods = ['GET', 'POST'])
@app.route('/package/<project>/<version>', methods = ['GET', 'POST'])
def project(project, version = 'HEAD'):
project = project.replace('.egg', '')
project = Project.instance(project)
if request.method == 'POST':
return project.put(version, request.files['target'])
else:
return Response(
project.get(version), mimetype = 'application/octet-stream'
)
app.run(debug = True)
#gevent.spawn(WSGIServer(('', 5000), app).serve_forever).join()
#!/bin/bash
eggfile="$1"
package="$2"
version="$3"
curl -X POST -i -F target=@$1 http://127.0.0.1:5000/package/$2/$3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment