Skip to content

Commit

Permalink
Cleanup converting from UDP to DP
Browse files Browse the repository at this point in the history
  • Loading branch information
Clue88 committed Dec 17, 2023
1 parent cd74711 commit 458d5a2
Show file tree
Hide file tree
Showing 9 changed files with 234 additions and 155 deletions.
8 changes: 5 additions & 3 deletions backend/degree/management/commands/fetch_degrees.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,14 @@ def add_arguments(self, parser):
)

def handle(self, *args, **kwargs):
print(dedent(
"""
print(
dedent(
"""
Note: this script deletes any existing degres in the database that overlap with the
degrees fetched from degreeworks.
"""
))
)
)

since_year = kwargs["since_year"]
to_year = kwargs["to_year"] or int(get_current_semester()[:4])
Expand Down
5 changes: 3 additions & 2 deletions backend/degree/management/commands/load_degrees.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ def handle(self, *args, **kwargs):

for degree_file in listdir(directory):
year, program, degree, major, concentration = re.match(
r"(\d+)-(\w+)-(\w+)-(\w+)(?:-(\w+))?", degree_file).groups()
r"(\d+)-(\w+)-(\w+)-(\w+)(?:-(\w+))?", degree_file
).groups()
if program not in program_code_to_name:
print(f"Skipping {degree_file} because {program} is not an applicable program code")
continue
Expand All @@ -47,7 +48,7 @@ def handle(self, *args, **kwargs):
degree=degree,
major=major,
concentration=concentration,
year=year
year=year,
).delete()

degree = Degree(
Expand Down
239 changes: 168 additions & 71 deletions backend/degree/migrations/0007_auto_20231213_1757.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,142 +10,239 @@ class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('degree', '0006_auto_20231201_1713'),
("degree", "0006_auto_20231201_1713"),
]

operations = [
migrations.CreateModel(
name='Degree',
name="Degree",
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('program', models.CharField(choices=[('EU_BSE', 'Engineering BSE'), ('EU_BAS', 'Engineering BAS'), ('AU_BA', 'College BA'), ('WU_BS', 'Wharton BS')], help_text='\nThe program code for this degree, e.g., EU_BSE\n', max_length=10)),
('degree', models.CharField(help_text='\nThe degree code for this degree, e.g., BSE\n', max_length=4)),
('major', models.CharField(help_text='\nThe major code for this degree, e.g., BIOL\n', max_length=4)),
('concentration', models.CharField(help_text='\nThe concentration code for this degree, e.g., BMAT\n', max_length=4, null=True)),
('year', models.IntegerField(help_text='\nThe effective year of this degree, e.g., 2023\n')),
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
(
"program",
models.CharField(
choices=[
("EU_BSE", "Engineering BSE"),
("EU_BAS", "Engineering BAS"),
("AU_BA", "College BA"),
("WU_BS", "Wharton BS"),
],
help_text="\nThe program code for this degree, e.g., EU_BSE\n",
max_length=10,
),
),
(
"degree",
models.CharField(
help_text="\nThe degree code for this degree, e.g., BSE\n", max_length=4
),
),
(
"major",
models.CharField(
help_text="\nThe major code for this degree, e.g., BIOL\n", max_length=4
),
),
(
"concentration",
models.CharField(
help_text="\nThe concentration code for this degree, e.g., BMAT\n",
max_length=4,
null=True,
),
),
(
"year",
models.IntegerField(
help_text="\nThe effective year of this degree, e.g., 2023\n"
),
),
],
),
migrations.CreateModel(
name='SatisfactionStatus',
name="SatisfactionStatus",
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('satisfied', models.BooleanField(default=False, help_text='Whether the rule is satisfied')),
('last_updated', models.DateTimeField(auto_now=True)),
('last_checked', models.DateTimeField(default=django.utils.timezone.now)),
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
(
"satisfied",
models.BooleanField(default=False, help_text="Whether the rule is satisfied"),
),
("last_updated", models.DateTimeField(auto_now=True)),
("last_checked", models.DateTimeField(default=django.utils.timezone.now)),
],
),
migrations.RemoveField(
model_name='userdegreeplan',
name='degree_plan',
model_name="userdegreeplan",
name="degree_plan",
),
migrations.RemoveField(
model_name='userdegreeplan',
name='person',
model_name="userdegreeplan",
name="person",
),
migrations.RemoveConstraint(
model_name='degreeplan',
name='unique degreeplan',
model_name="degreeplan",
name="unique degreeplan",
),
migrations.RemoveField(
model_name='degreeplan',
name='concentration',
model_name="degreeplan",
name="concentration",
),
migrations.RemoveField(
model_name='degreeplan',
name='major',
model_name="degreeplan",
name="major",
),
migrations.RemoveField(
model_name='degreeplan',
name='program',
model_name="degreeplan",
name="program",
),
migrations.RemoveField(
model_name='degreeplan',
name='year',
model_name="degreeplan",
name="year",
),
migrations.RemoveField(
model_name='doublecountrestriction',
name='degree_plan',
model_name="doublecountrestriction",
name="degree_plan",
),
migrations.RemoveField(
model_name='fulfillment',
name='user_degree_plan',
model_name="fulfillment",
name="user_degree_plan",
),
migrations.RemoveField(
model_name='rule',
name='degree_plan',
model_name="rule",
name="degree_plan",
),
migrations.AddField(
model_name='degreeplan',
name='created_at',
model_name="degreeplan",
name="created_at",
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AddField(
model_name='degreeplan',
name='name',
field=models.CharField(default='', help_text="The user's nickname for the degree plan.", max_length=255),
model_name="degreeplan",
name="name",
field=models.CharField(
default="", help_text="The user's nickname for the degree plan.", max_length=255
),
preserve_default=False,
),
migrations.AddField(
model_name='degreeplan',
name='person',
field=models.ForeignKey(default='', help_text='The user the schedule belongs to.', on_delete=django.db.models.deletion.CASCADE, to='auth.user'),
model_name="degreeplan",
name="person",
field=models.ForeignKey(
default="",
help_text="The user the schedule belongs to.",
on_delete=django.db.models.deletion.CASCADE,
to="auth.user",
),
preserve_default=False,
),
migrations.AddField(
model_name='degreeplan',
name='updated_at',
model_name="degreeplan",
name="updated_at",
field=models.DateTimeField(auto_now=True),
),
migrations.AddField(
model_name='fulfillment',
name='degree_plan',
field=models.ForeignKey(default='', help_text='The degree plan with which this fulfillment is associated', on_delete=django.db.models.deletion.CASCADE, related_name='fulfillments', to='degree.degreeplan'),
model_name="fulfillment",
name="degree_plan",
field=models.ForeignKey(
default="",
help_text="The degree plan with which this fulfillment is associated",
on_delete=django.db.models.deletion.CASCADE,
related_name="fulfillments",
to="degree.degreeplan",
),
preserve_default=False,
),
migrations.AlterField(
model_name='fulfillment',
name='full_code',
field=models.CharField(blank=True, db_index=True, help_text='The dash-joined department and code of the course, e.g., `CIS-120`', max_length=16),
model_name="fulfillment",
name="full_code",
field=models.CharField(
blank=True,
db_index=True,
help_text="The dash-joined department and code of the course, e.g., `CIS-120`",
max_length=16,
),
),
migrations.AlterField(
model_name='rule',
name='parent',
field=models.ForeignKey(help_text="\nThis rule's parent Rule if it has one. Null if this is a top level rule\n(i.e., degree is not null).\n", null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='degree.rule'),
model_name="rule",
name="parent",
field=models.ForeignKey(
help_text="\nThis rule's parent Rule if it has one. Null if this is a top level rule\n(i.e., degree is not null).\n",
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="children",
to="degree.rule",
),
),
migrations.AddConstraint(
model_name='degreeplan',
constraint=models.UniqueConstraint(fields=('name', 'person'), name='degreeplan_name_person'),
model_name="degreeplan",
constraint=models.UniqueConstraint(
fields=("name", "person"), name="degreeplan_name_person"
),
),
migrations.DeleteModel(
name='UserDegreePlan',
name="UserDegreePlan",
),
migrations.AddField(
model_name='satisfactionstatus',
name='degree_plan',
field=models.ForeignKey(help_text='The degree plan that leads to the satisfaction of the rule', on_delete=django.db.models.deletion.CASCADE, related_name='satisfactions', to='degree.degreeplan'),
model_name="satisfactionstatus",
name="degree_plan",
field=models.ForeignKey(
help_text="The degree plan that leads to the satisfaction of the rule",
on_delete=django.db.models.deletion.CASCADE,
related_name="satisfactions",
to="degree.degreeplan",
),
),
migrations.AddField(
model_name='satisfactionstatus',
name='rule',
field=models.ForeignKey(help_text='The rule that is satisfied', on_delete=django.db.models.deletion.CASCADE, related_name='+', to='degree.rule'),
model_name="satisfactionstatus",
name="rule",
field=models.ForeignKey(
help_text="The rule that is satisfied",
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="degree.rule",
),
),
migrations.AddConstraint(
model_name='degree',
constraint=models.UniqueConstraint(fields=('program', 'degree', 'major', 'concentration', 'year'), name='unique degree'),
model_name="degree",
constraint=models.UniqueConstraint(
fields=("program", "degree", "major", "concentration", "year"), name="unique degree"
),
),
migrations.AddField(
model_name='rule',
name='degree',
field=models.ForeignKey(help_text='\nThe degree plan that has this rule. Null if this rule has a parent.\n', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rules', to='degree.degree'),
model_name="rule",
name="degree",
field=models.ForeignKey(
help_text="\nThe degree plan that has this rule. Null if this rule has a parent.\n",
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="rules",
to="degree.degree",
),
),
migrations.AlterField(
model_name='degreeplan',
name='degree',
field=models.ForeignKey(help_text='The degree this is associated with.', on_delete=django.db.models.deletion.CASCADE, to='degree.degree'),
model_name="degreeplan",
name="degree",
field=models.ForeignKey(
help_text="The degree this is associated with.",
on_delete=django.db.models.deletion.CASCADE,
to="degree.degree",
),
),
migrations.AddConstraint(
model_name='satisfactionstatus',
constraint=models.UniqueConstraint(fields=('degree_plan', 'rule'), name='unique_satisfaction'),
model_name="satisfactionstatus",
constraint=models.UniqueConstraint(
fields=("degree_plan", "rule"), name="unique_satisfaction"
),
),
]
22 changes: 22 additions & 0 deletions backend/degree/migrations/0008_alter_rule_q.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 3.2.23 on 2023-12-14 21:23

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("degree", "0007_auto_20231213_1757"),
]

operations = [
migrations.AlterField(
model_name="rule",
name="q",
field=models.TextField(
blank=True,
help_text="\nString representing a Q() object that returns the set of courses\nsatisfying this rule. Only non-empty if this is a Rule leaf.\nThis Q object is expected to be normalized before it is serialized\nto a string.\n",
max_length=1000,
),
),
]
Loading

0 comments on commit 458d5a2

Please sign in to comment.