update_32.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python3
  2. # Contest Management System - http://cms-dev.github.io/
  3. # Copyright © 2018 Stefano Maggiolo <s.maggiolo@gmail.com>
  4. #
  5. # This program is free software: you can redistribute it and/or modify
  6. # it under the terms of the GNU Affero General Public License as
  7. # published by the Free Software Foundation, either version 3 of the
  8. # License, or (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU Affero General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU Affero General Public License
  16. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. """A class to update a dump created by CMS.
  18. Used by DumpImporter and DumpUpdater.
  19. This updater updates time and memory limit to enforce the constraint of being
  20. positive or null (for no limit).
  21. """
  22. import logging
  23. logger = logging.getLogger(__name__)
  24. class Updater:
  25. def __init__(self, data):
  26. assert data["_version"] == 31
  27. self.objs = data
  28. def run(self):
  29. for k, v in self.objs.items():
  30. if k.startswith("_"):
  31. continue
  32. if v["_class"] == "Dataset":
  33. limit = v["time_limit"]
  34. # Zero explicitly meant no limits.
  35. if limit == 0.0:
  36. limit = None
  37. # Negative was undefined though.
  38. if limit is not None and limit <= 0.0:
  39. logger.warning("Previous time limit %s was updated, "
  40. "no time limit is enforced now.",
  41. limit)
  42. limit = None
  43. v["time_limit"] = limit
  44. limit = v["memory_limit"]
  45. # Zero explicitly meant no limits.
  46. if limit == 0:
  47. limit = None
  48. # Negative was undefined though.
  49. if limit is not None and limit <= 0:
  50. logger.warning("Previous memory limit %s was updated, "
  51. "no memory limit is enforced now.",
  52. limit)
  53. limit = None
  54. v["memory_limit"] = limit
  55. return self.objs