Skip to content

Commit

Permalink
Merge pull request #36 from prezi/py3-migration
Browse files Browse the repository at this point in the history
Migrating from python2 to python3, upgrading nodejs
  • Loading branch information
andraskalman-prezi authored Dec 7, 2023
2 parents 7835799 + 9187371 commit 708a728
Show file tree
Hide file tree
Showing 12 changed files with 3,914 additions and 2,023 deletions.
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
virtualenv
changelog.db
node_modules
static
46 changes: 29 additions & 17 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,25 +1,37 @@
FROM ubuntu:17.04
FROM ubuntu:jammy

WORKDIR /opt/changelog
ADD . /opt/changelog
ENV DEBIAN_FRONTEND=noninteractive

# Install system-level dependencies
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
python python-dev virtualenv \
nodejs npm nodejs-legacy \
RUN apt-get update && \
apt-get install -y --no-install-recommends \
python3 python3-dev python3-pip \
sqlite3 \
libmysqlclient-dev mysql-client \
build-essential libpq-dev \
netbase
netbase \
gzip \
curl && \
rm -rf /var/lib/apt/lists/*


ARG NODEJS_VERSION=v20.10.0
# Installing nodejs from nodesource.com installs unwanted python distributions as dependencies
# Downloading gzipped distribution instead
RUN curl https://nodejs.org/dist/$NODEJS_VERSION/node-$NODEJS_VERSION-linux-x64.tar.gz -fsS | tar -xz --strip-components=1 -C /usr/local

WORKDIR /opt/changelog

COPY requirements*.txt .

# Install application-level dependencies and build frontend
RUN set -x \
&& /opt/changelog/setup.sh \
&& /opt/changelog/virtualenv/bin/pip install -r requirements-mysql.txt -r requirements-postgres.txt gunicorn eventlet \
&& cd /opt/changelog \
&& npm run build
RUN python3 -m pip install -r requirements.txt -r requirements-mysql.txt -r requirements-postgres.txt gunicorn eventlet

COPY package*json .
COPY npm-shrinkwrap.json .
COPY webpack*js .

RUN npm install
COPY . /opt/changelog
RUN npm run build

# Default configuration
ENV CHANGELOG_SETTINGS_PATH=/tmp/custom_settings.py \
Expand All @@ -28,4 +40,4 @@ ENV CHANGELOG_SETTINGS_PATH=/tmp/custom_settings.py \
LISTEN_PORT=5000

EXPOSE $LISTEN_PORT
CMD /opt/changelog/run.sh
CMD ["/opt/changelog/run.sh"]
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ sudo docker run -p 5000:5000 -it prezi/changelog
Prerequisites:

- a relational database
- python 2
- python 3
- virtualenv
- optionally: a [Sentry](https://getsentry.com/) server for collecting exceptions; not that there'll be any :)

Expand Down
33 changes: 17 additions & 16 deletions application.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,21 @@
from flask import Flask
import calendar
from datetime import datetime
from flask.ext.restful import reqparse, Api, Resource
from raven.contrib.flask import Sentry
from flask.ext.sqlalchemy import SQLAlchemy
from flask_restful import reqparse, Api, Resource
import sentry_sdk
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Table, Column, distinct, select
from sqlalchemy.exc import IntegrityError
import settings
from sqlalchemy.ext.declarative import declarative_base
from flask.ext.cors import CORS
from sqlalchemy.orm import declarative_base
from flask_cors import CORS
from flask_compress import Compress

app = Flask(__name__)
Compress(app)

if settings.USE_SENTRY:
app.config['SENTRY_DSN'] = settings.SENTRY_DSN
sentry = Sentry(app)
sentry_sdk.init(dsn=settings.SENTRY_DSN, enable_tracing=True)

try:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+settings.DB_PATH
Expand All @@ -31,15 +30,15 @@
json_parser = reqparse.RequestParser()
json_parser.add_argument('criticality', type=int, required=True, location='json')
json_parser.add_argument('unix_timestamp', type=int, required=True, location='json')
json_parser.add_argument('category', type=unicode, required=True, location='json')
json_parser.add_argument('description', type=unicode, required=True, location='json')
json_parser.add_argument('category', type=str, required=True, location='json')
json_parser.add_argument('description', type=str, required=True, location='json')

query_parser = reqparse.RequestParser()
query_parser.add_argument('criticality', type=unicode)
query_parser.add_argument('hours_ago', type=float, required=True)
query_parser.add_argument('until', type=int)
query_parser.add_argument('category', type=unicode)
query_parser.add_argument('description', type=unicode)
query_parser.add_argument('criticality', type=str, location='args')
query_parser.add_argument('hours_ago', type=float, location='args', required=True)
query_parser.add_argument('until', type=int, location='args')
query_parser.add_argument('category', type=str, location='args')
query_parser.add_argument('description', type=str, location='args')

annotation_query_parser = reqparse.RequestParser()
annotation_query_parser.add_argument('range', type=dict, required=True, location='json')
Expand All @@ -54,7 +53,9 @@
Column('category', db.String(30), index=True),
Column('description', db.String(1000), index=True)
)
Base.metadata.create_all(db.engine)

with app.app_context():
Base.metadata.create_all(db.engine)


class Event(db.Model):
Expand Down Expand Up @@ -160,7 +161,7 @@ def healthcheck():
return "1 FAIL: No record is found in the database."
else:
return "0 OK: There is at least one record in the database."
except Exception, e:
except Exception as e:
return ("1 FAIL: Some exception occured:\n %s" % str(e))

@app.route('/')
Expand Down
Loading

0 comments on commit 708a728

Please sign in to comment.