models.py
# Copyright (C) 2017 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
# Generated from:
# cd swh_deposit && \
# python3 -m manage inspectdb
from django.contrib.postgres.fields import JSONField
from django.db import models
from django.utils.timezone import now
class Dbversion(models.Model):
"""Db version
"""
version = models.IntegerField(primary_key=True)
release = models.DateTimeField(default=now, null=True)
description = models.TextField(blank=True, null=True)
class Meta:
db_table = 'dbversion'
def __str__(self):
return str({
'version': self.version,
'release': self.release,
'description': self.description
})
DEPOSIT_STATUS = [
('partial', 'partial'), # the deposit is new or partially received
# since it can be done in multiple requests
('expired', 'expired'), # deposit has been there too long and is now
# deemed ready to be garbage collected
('ready', 'ready'), # deposit is fully received and ready for
# injection
('injecting', 'injecting'), # injection is ongoing on swh's side
('success', 'success'), # injection successful
('failure', 'failure'), # injection failure
]
class Deposit(models.Model):
"""Deposit reception table
"""
id = models.BigAutoField(primary_key=True)
# First deposit reception date
reception_date = models.DateTimeField(auto_now_add=True)
# Date when the deposit is deemed complete and ready for injection
complete_date = models.DateTimeField(null=True)
# Deposit reception source type
type = models.ForeignKey(
'DepositType', models.DO_NOTHING, db_column='type')
# Deposit's unique external identifier
external_id = models.TextField(unique=True)
# Deposit client
client = models.ForeignKey(
'auth.User', models.DO_NOTHING)
# SWH's injection result identifier
swh_id = models.TextField(blank=True, null=True)
# Deposit's status regarding injection
status = models.TextField(
choices=DEPOSIT_STATUS,
default='partial')
class Meta:
db_table = 'deposit'
def __str__(self):
return str({
'id': self.id,
'reception_date': self.reception_date,
'type': self.type,
'external_id': self.external_id,
'client_id': self.client_id,
'status': self.status
})
class DepositRequest(models.Model):
"""Deposit request made by clients
"""
id = models.BigAutoField(primary_key=True)
# Deposit concerned by the request
deposit = models.ForeignKey(Deposit, models.DO_NOTHING)
date = models.DateTimeField(auto_now_add=True)
# Deposit request information on the data to inject
metadata = JSONField(null=True)
class Meta:
db_table = 'deposit_request'
def __str__(self):
from json import dumps
return str({
'id': self.id,
'deposit': self.deposit,
'metadata': dumps(self.metadata),
})
class DepositType(models.Model):
id = models.BigAutoField(primary_key=True)
# Human readable name for the deposit type e.g HAL, arXiv, etc...
name = models.TextField()
class Meta:
db_table = 'deposit_type'
def __str__(self):
return str({'id': self.id, 'name': self.name})