Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proforma: reuse existing files on import, if possible #2538

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

kkoehn
Copy link
Collaborator

@kkoehn kkoehn commented Sep 18, 2024

Use xml_id_path to recreate proforma structure with tests and model_solutions containing multiple files

also sets xml_id_path for exported files, if it is not set. (similiar to uuid)

@kkoehn kkoehn self-assigned this Sep 18, 2024
Copy link

codecov bot commented Sep 18, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 69.61%. Comparing base (d99a715) to head (ebef98c).
Report is 13 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #2538      +/-   ##
==========================================
+ Coverage   69.52%   69.61%   +0.09%     
==========================================
  Files         202      202              
  Lines        6360     6379      +19     
==========================================
+ Hits         4422     4441      +19     
  Misses       1938     1938              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@kkoehn kkoehn force-pushed the proforma-reuse-existing-file-on-import branch 2 times, most recently from 218f9b9 to a7affb4 Compare September 23, 2024 20:53
@kkoehn kkoehn added enhancement ruby Pull requests that update Ruby code labels Sep 23, 2024
@kkoehn kkoehn requested a review from MrSerth September 23, 2024 21:13
@kkoehn kkoehn marked this pull request as ready for review September 23, 2024 21:13
Copy link
Member

@MrSerth MrSerth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done a first round of my review, during which I found a few questions. Let's check these first and I'll continue with a second round.

While reviewing, I also got one extra question: Given the changes in CodeOcean to the XML Path ID and the updated metadata, would you recommend to reexport all exercises to CodeHarbor after merging this PR?

db/schema.rb Outdated Show resolved Hide resolved
app/services/proforma_service/convert_exercise_to_task.rb Outdated Show resolved Hide resolved
app/services/proforma_service/convert_exercise_to_task.rb Outdated Show resolved Hide resolved
app/services/proforma_service/convert_exercise_to_task.rb Outdated Show resolved Hide resolved
app/services/proforma_service/convert_task_to_exercise.rb Outdated Show resolved Hide resolved
app/services/proforma_service/convert_task_to_exercise.rb Outdated Show resolved Hide resolved
app/services/proforma_service/convert_exercise_to_task.rb Outdated Show resolved Hide resolved
@kkoehn
Copy link
Collaborator Author

kkoehn commented Sep 24, 2024

While reviewing, I also got one extra question: Given the changes in CodeOcean to the XML Path ID and the updated metadata, would you recommend to reexport all exercises to CodeHarbor after merging this PR?

Yes that would absolutely make sense!

@kkoehn kkoehn force-pushed the proforma-reuse-existing-file-on-import branch from a7affb4 to 4d3198e Compare September 24, 2024 20:07
@MrSerth

This comment was marked as resolved.

@kkoehn kkoehn force-pushed the proforma-reuse-existing-file-on-import branch from 4d3198e to ac0fe42 Compare September 24, 2024 21:09
@kkoehn

This comment was marked as resolved.

@kkoehn kkoehn force-pushed the proforma-reuse-existing-file-on-import branch from 38f45b0 to 20a2705 Compare September 24, 2024 22:45
@kkoehn kkoehn requested a review from MrSerth September 24, 2024 22:47
@MrSerth

This comment was marked as resolved.

Copy link
Member

@MrSerth MrSerth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nicely done, thank you! The current code changes look good and I've understand them.

Unfortunately, I still had issues verifying the code changes. Once again, I was using the already well-known file changes from here:

First of all, when the new version was in CodeHarbor and I tried uploading the old version, I got an exception there (the other direction from old to new works). Then, even when resolving this in CodeHarbor, I still couldn't import the old version in CodeOcean if the new version was stored already.

The error I got was: Validation failed: Files feedback message must be blank. The problematic file is:

#<CodeOcean::File id: 67823922, content: "# actual tests here (in functions)\r\nfrom z_helpers...", context_id: 1101, context_type: "Exercise", file_id: nil, file_type_id: 8, hidden: true, name: "p51test", read_only: true, created_at: "2024-09-25 19:28:50.331358000 +0000", updated_at: "2024-09-25 19:29:34.363568000 +0000", native_file: nil, role: "regular_file", hashed_content: "70721d58fcbac5c9570e63633e778d9c", feedback_message: "Feedback", weight: nil, path: nil, file_template_id: nil, hidden_feedback: false, xml_id_path: ["63332861"]>

Despite the listed issue, I also found an issue with the proglang method. Below is the fixed entry that also works if no execution_environment has been selected:

    def proglang
      regex = %r{^openhpi/co_execenv_(?<language>[^:]*):(?<version>[^-]*)(?>-.*)?$}
      match = regex.match @exercise&.execution_environment&.docker_image
      match ? {name: match[:language], version: match[:version]} : nil
    end

Could you include that, too, please (ideally with a test)?

app/services/proforma_service/convert_exercise_to_task.rb Outdated Show resolved Hide resolved
@kkoehn kkoehn force-pushed the proforma-reuse-existing-file-on-import branch 5 times, most recently from 0d6d275 to 708bb5d Compare October 8, 2024 19:27
kkoehn and others added 3 commits October 8, 2024 21:30
Use xml_id_path to recreate proforma structure with tests and model_solutions containing multiple files
@kkoehn kkoehn force-pushed the proforma-reuse-existing-file-on-import branch from 708bb5d to ebef98c Compare October 8, 2024 19:30
@kkoehn
Copy link
Collaborator Author

kkoehn commented Oct 8, 2024

please note that import_spec.rb:129 is flaky right now - will look into it tomorrow

Copy link
Member

@MrSerth MrSerth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I started reviewing tonight, but noticed another issue: Some files can be left unreferenced.

Specifically, consider an update form the "old" to the "new" version of task 845 (ZIP files attached above). As part of the update, I see the following query in CodeOcean:

  CodeOcean::File Update All (1.0ms)  UPDATE "files" SET "context_id" = $1, "context_type" = $2 WHERE ("files"."id") IN (SELECT "files"."id" FROM "files" WHERE "files"."context_id" = $3 AND "files"."context_type" = $4 AND ("files"."id" = $5 OR "files"."id" = $6) ORDER BY "files"."path" ASC, "files"."name" ASC)  [["context_id", nil], ["context_type", nil], ["context_id", 1101], ["context_type", "Exercise"], ["id", 67824363], ["id", 67824368]]

And indeed, as expected after this query, some files were updated to have a context_id and context_type of NULL. This shouldn't be the case, I think, and files no longer referenced should be deleted completely.

Otherwise, the functionality seems to work fine. I'll continue my review once the functionality is fixed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement ruby Pull requests that update Ruby code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants