scaffolded PySwiss microservice: Django 6.0 project at pyswiss/ (core/ settings, apps/charts/), GET /api/chart/ + GET /api/charts/ views, EphemerisSnapshot model + migration, populate_ephemeris management command, 41 ITs (integrated + unit, all green); separate .venv with pyswisseph 2.10.3.2
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-04-13 19:03:45 -04:00
parent 97ec2f6ee6
commit b8af0041cc
23 changed files with 780 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
from django.db import models
class EphemerisSnapshot(models.Model):
"""Pre-computed chart data for a single point in time.
Element counts are stored as denormalised columns for fast DB-level range
filtering. Full planet/house data lives in chart_data (JSONField) for
response serialisation.
"""
dt = models.DateTimeField(unique=True, db_index=True)
# Denormalised element counts — indexed for range queries
fire = models.PositiveSmallIntegerField()
water = models.PositiveSmallIntegerField()
earth = models.PositiveSmallIntegerField()
air = models.PositiveSmallIntegerField()
time_el = models.PositiveSmallIntegerField()
space_el = models.PositiveSmallIntegerField()
# Full chart payload
chart_data = models.JSONField()
class Meta:
ordering = ['dt']
def elements_dict(self):
return {
'Fire': self.fire,
'Water': self.water,
'Earth': self.earth,
'Air': self.air,
'Time': self.time_el,
'Space': self.space_el,
}