Skip to content

Commit

Permalink
Add pre-commit config, and run it over everything (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
shaldengeki authored Jul 28, 2022
1 parent b4d4b07 commit 6daa4b7
Show file tree
Hide file tree
Showing 11 changed files with 172 additions and 103 deletions.
16 changes: 16 additions & 0 deletions proto-registry/.pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.3.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: no-commit-to-branch
args: [--branch, staging, --branch, main]
- id: requirements-txt-fixer
- repo: https://github.com/psf/black
rev: 22.6.0
hooks:
- id: black
166 changes: 98 additions & 68 deletions proto-registry/registry/api/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,19 @@
from .config import app, db
from . import models


@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"

@app.route("/subjects")

@app.route("/subjects/")
def get_subjects():
subjects = models.Subject.query.order_by(asc(models.Subject.id)).all()
return json.dumps([
subject.name for subject in subjects
])
return json.dumps([subject.name for subject in subjects])


@app.route("/subjects/<subject_name>", methods=['DELETE'])
@app.route("/subjects/<subject_name>/", methods=["DELETE"])
def delete_subject(subject_name: str) -> str:
subject = models.Subject.query.filter(models.Subject.name == subject_name).first()
if subject is None:
Expand All @@ -29,7 +30,8 @@ def delete_subject(subject_name: str) -> str:

return versions

@app.route("/subjects/<subject_name>", methods=['POST'])

@app.route("/subjects/<subject_name>/", methods=["POST"])
def check_subject_schema(subject_name: str) -> str:
subject = models.Subject.query.filter(models.Subject.name == subject_name).first()
if subject is None:
Expand All @@ -48,43 +50,47 @@ def check_subject_schema(subject_name: str) -> str:
schema_type = models.SchemaType[schema_type_name]

references: list[dict] = data.get("references", [])
reference_names = set([f"{reference['subject']}/{reference['version']}" for reference in references])
reference_names = set(
[f"{reference['subject']}/{reference['version']}" for reference in references]
)

version = models.SubjectVersion.query\
.filter(
models.SubjectVersion.schema == schema and \
models.SubjectVersion.schema_type == schema_type
)\
.first()
version = models.SubjectVersion.query.filter(
models.SubjectVersion.schema == schema
and models.SubjectVersion.schema_type == schema_type
).first()

if version is None:
abort(404)

version_reference_names = set([
f"{reference['subject']}/{reference['version']}" for reference in version.references
])
version_reference_names = set(
[
f"{reference['subject']}/{reference['version']}"
for reference in version.references
]
)
if reference_names != version_reference_names:
abort(404)

return json.dumps({
"subject": version.subject.name,
"id": version.id,
"version": version.version_id,
"schema": version.schema,
})
return json.dumps(
{
"subject": version.subject.name,
"id": version.id,
"version": version.version_id,
"schema": version.schema,
}
)


@app.route("/subjects/<subject_name>/versions")
@app.route("/subjects/<subject_name>/versions/")
def get_subject_versions(subject_name: str) -> str:
subject = models.Subject.query.filter(models.Subject.name == subject_name).first()
if subject is None:
abort(404)

return json.dumps([
version.version_id
for version in subject.versions
])
return json.dumps([version.version_id for version in subject.versions])

@app.route("/subjects/<subject_name>/versions", methods=["POST"])

@app.route("/subjects/<subject_name>/versions/", methods=["POST"])
def create_subject_version(subject_name: str) -> str:
subject = models.Subject.query.filter(models.Subject.name == subject_name).first()
if subject is None:
Expand All @@ -105,16 +111,28 @@ def create_subject_version(subject_name: str) -> str:

references: list[dict] = json_data.get("references", [])

reference_subjects = models.Subject.query.filter(models.Subject.name in [reference['subject'] for reference in references]).all()

reference_names = [f"{reference['subject']}/{reference['version']}" for reference in references]
reference_versions = models.SubjectVersion.query\
.join(models.Subject, models.SubjectVersion.subject_id == models.Subject.id)\
reference_subjects = models.Subject.query.filter(
models.Subject.name in [reference["subject"] for reference in references]
).all()

reference_names = [
f"{reference['subject']}/{reference['version']}" for reference in references
]
reference_versions = (
models.SubjectVersion.query.join(
models.Subject, models.SubjectVersion.subject_id == models.Subject.id
)
.filter(
models.SubjectVersion.subject_id in [subject.id for subject in reference_subjects]
)\
models.SubjectVersion.subject_id
in [subject.id for subject in reference_subjects]
)
.all()
reference_versions = [version for version in reference_versions if f"{version.subject.name}/{version.version_id}" in reference_names]
)
reference_versions = [
version
for version in reference_versions
if f"{version.subject.name}/{version.version_id}" in reference_names
]
if len(reference_versions) != len(references):
abort(400)

Expand All @@ -134,62 +152,74 @@ def create_subject_version(subject_name: str) -> str:
db.session.add(new_version)
db.session.commit()

return json.dumps({
"id": subject.id,
})
return json.dumps(
{
"id": subject.id,
}
)


@app.route("/subjects/<subject_name>/versions/<int:version_id>")
@app.route("/subjects/<subject_name>/versions/<int:version_id>/")
def get_subject_version(subject_name: str, version_id: int) -> str:
version = models.SubjectVersion.query\
.join(models.Subject, models.SubjectVersion.subject_id == models.Subject.id)\
version = (
models.SubjectVersion.query.join(
models.Subject, models.SubjectVersion.subject_id == models.Subject.id
)
.filter(
models.Subject.name == subject_name and \
models.SubjectVersion.version_id == version_id
)\
models.Subject.name == subject_name
and models.SubjectVersion.version_id == version_id
)
.first()
)

if version is None:
abort(404)

reference_names = [reference.unique_name() for reference in version.references]

return json.dumps({
"subject": version.subject.name,
"id": version.id,
"version": version.version_id,
"schemaType": version.schema_type.name,
"schema": version.schema,
"references": reference_names,
})
return json.dumps(
{
"subject": version.subject.name,
"id": version.id,
"version": version.version_id,
"schemaType": version.schema_type.name,
"schema": version.schema,
"references": reference_names,
}
)


@app.route("/subjects/<subject_name>/versions/<int:version_id>/referencedby")
@app.route("/subjects/<subject_name>/versions/<int:version_id>/referencedby/")
def get_subject_version_referencedby(subject_name: str, version_id: int) -> str:
version = models.SubjectVersion.query\
.join(models.Subject, models.SubjectVersion.subject_id == models.Subject.id)\
version = (
models.SubjectVersion.query.join(
models.Subject, models.SubjectVersion.subject_id == models.Subject.id
)
.filter(
models.Subject.name == subject_name and \
models.SubjectVersion.version_id == version_id
)\
models.Subject.name == subject_name
and models.SubjectVersion.version_id == version_id
)
.first()
)

if version is None:
abort(404)

return json.dumps([
referer.id for referer in version.referrers
])
return json.dumps([referer.id for referer in version.referrers])


@app.route("/subjects/<subject_name>/versions/<int:version_id>/schema")
@app.route("/subjects/<subject_name>/versions/<int:version_id>/schema/")
def get_subject_version_schema(subject_name: str, version_id: int) -> str:
version = models.SubjectVersion.query\
.join(models.Subject, models.SubjectVersion.subject_id == models.Subject.id)\
version = (
models.SubjectVersion.query.join(
models.Subject, models.SubjectVersion.subject_id == models.Subject.id
)
.filter(
models.Subject.name == subject_name and \
models.SubjectVersion.version_id == version_id
)\
models.Subject.name == subject_name
and models.SubjectVersion.version_id == version_id
)
.first()
)

if version is None:
abort(404)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,22 @@


# revision identifiers, used by Alembic.
revision = '009086ba9d09'
down_revision = '86ac1c2d94b4'
revision = "009086ba9d09"
down_revision = "86ac1c2d94b4"
branch_labels = None
depends_on = None


def upgrade():
op.create_table(
'subject_version_references',
sa.Column('referrer_id', sa.Integer),
sa.Column('referred_id', sa.Integer),
"subject_version_references",
sa.Column("referrer_id", sa.Integer),
sa.Column("referred_id", sa.Integer),
)
op.create_unique_constraint(
"subject_version_references_referrer_referred", "subject_version_references", ["referrer_id", "referred_id"]
"subject_version_references_referrer_referred",
"subject_version_references",
["referrer_id", "referred_id"],
)
op.create_foreign_key(
"subject_version_references_subject_versions_referrer_id",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@


# revision identifiers, used by Alembic.
revision = '86ac1c2d94b4'
down_revision = '9da1de15cd6a'
revision = "86ac1c2d94b4"
down_revision = "9da1de15cd6a"
branch_labels = None
depends_on = None


class SchemaType(enum.Enum):
AVRO = 1
PROTOBUF = 2
Expand All @@ -25,13 +26,17 @@ class SchemaType(enum.Enum):

def upgrade():
op.create_table(
'subject_versions',
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('created', sa.DateTime, nullable=False, default=datetime.datetime.utcnow),
sa.Column('version_id', sa.Integer, nullable=False),
sa.Column('subject_id', sa.Integer, nullable=False),
sa.Column('schema_type', sa.Enum(SchemaType), nullable=False, default=SchemaType.AVRO),
sa.Column('schema', sa.Unicode(20000), nullable=False),
"subject_versions",
sa.Column("id", sa.Integer, primary_key=True),
sa.Column(
"created", sa.DateTime, nullable=False, default=datetime.datetime.utcnow
),
sa.Column("version_id", sa.Integer, nullable=False),
sa.Column("subject_id", sa.Integer, nullable=False),
sa.Column(
"schema_type", sa.Enum(SchemaType), nullable=False, default=SchemaType.AVRO
),
sa.Column("schema", sa.Unicode(20000), nullable=False),
)
op.create_unique_constraint(
"subject_versions_version_id", "subject_versions", ["subject_id", "version_id"]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""create subjects table
Revision ID: 9da1de15cd6a
Revises:
Revises:
Create Date: 2022-07-21 04:15:20.943034
"""
Expand All @@ -11,18 +11,20 @@


# revision identifiers, used by Alembic.
revision = '9da1de15cd6a'
revision = "9da1de15cd6a"
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
op.create_table(
'subjects',
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('created', sa.DateTime, nullable=False, default=datetime.datetime.utcnow),
sa.Column('name', sa.Unicode(2000), nullable=False),
"subjects",
sa.Column("id", sa.Integer, primary_key=True),
sa.Column(
"created", sa.DateTime, nullable=False, default=datetime.datetime.utcnow
),
sa.Column("name", sa.Unicode(2000), nullable=False),
)
op.create_index(
"subjects_name",
Expand Down
2 changes: 1 addition & 1 deletion proto-registry/registry/api/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
from .subject import Subject
from .subject_version import SubjectVersion, SchemaType
from .subject_version import SubjectVersion, SchemaType
4 changes: 3 additions & 1 deletion proto-registry/registry/api/models/subject.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ class Subject(db.Model):
)
name = db.Column(db.Unicode(2000), nullable=False, unique=True)
versions = db.relationship(
"SubjectVersion", back_populates="subject", order_by="desc(SubjectVersion.version_id)"
"SubjectVersion",
back_populates="subject",
order_by="desc(SubjectVersion.version_id)",
)

def __repr__(self):
Expand Down
Loading

0 comments on commit 6daa4b7

Please sign in to comment.