Source code for arxiv.submission.services.classic.bootstrap

"""Generate synthetic data for testing and development purposes."""
from typing import List
import random
from datetime import datetime
from mimesis import Person, Internet, Datetime
from mimesis import config as mimesis_config

from arxiv import taxonomy
from . import models

LOCALES = list(mimesis_config.SUPPORTED_LOCALES.keys())

def _get_locale() -> str:
    return LOCALES[random.randint(0, len(LOCALES) - 1)]


def _epoch(t: datetime) -> int:
    return int((t - datetime.utcfromtimestamp(0)).total_seconds())


LICENSES = [
    {
        "name": "",
        "note": None,
        "label": "None of the above licenses apply",
        "active": 1,
        "sequence": 99
    },
    {
        "name": "http://arxiv.org/licenses/assumed-1991-2003/",
        "note": "",
        "label": "Assumed arXiv.org perpetual, non-exclusive license to" +
                 " distribute this article for submissions made before" +
                 " January 2004",
        "active": 0,
        "sequence": 9
    },
    {
        "name": "http://arxiv.org/licenses/nonexclusive-distrib/1.0/",
        "note": "(Minimal rights required by arXiv.org. Select this unless" +
                " you understand the implications of other licenses.)",
        "label": "arXiv.org perpetual, non-exclusive license to distribute" +
                 " this article",
        "active": 1,
        "sequence": 1
    },
    {
        "name": "http://creativecommons.org/licenses/by-nc-sa/3.0/",
        "note": "",
        "label": "Creative Commons Attribution-Noncommercial-ShareAlike" +
                 " license",
        "active": 0,
        "sequence": 3
    },
    {
        "name": "http://creativecommons.org/licenses/by-nc-sa/4.0/",
        "note": "",
        "label": "Creative Commons Attribution-Noncommercial-ShareAlike" +
                 " license (CC BY-NC-SA 4.0)",
        "active": 1,
        "sequence": 7
    },
    {
        "name": "http://creativecommons.org/licenses/by-sa/4.0/",
        "note": "",
        "label": "Creative Commons Attribution-ShareAlike license" +
                 " (CC BY-SA 4.0)",
        "active": 1,
        "sequence": 6
    },
    {
        "name": "http://creativecommons.org/licenses/by/3.0/",
        "note": "",
        "label": "Creative Commons Attribution license",
        "active": 0,
        "sequence": 2
    },
    {
        "name": "http://creativecommons.org/licenses/by/4.0/",
        "note": "",
        "label": "Creative Commons Attribution license (CC BY 4.0)",
        "active": 1,
        "sequence": 5
    },
    {
        "name": "http://creativecommons.org/licenses/publicdomain/",
        "note": "(Suitable for US government employees, for example)",
        "label": "Creative Commons Public Domain Declaration",
        "active": 0,
        "sequence": 4
    },
    {
        "name": "http://creativecommons.org/publicdomain/zero/1.0/",
        "note": "",
        "label": "Creative Commons Public Domain Declaration (CC0 1.0)",
        "active": 1,
        "sequence": 8
    }
]

POLICY_CLASSES = [
    {"name": "Administrator", "class_id": 1, "description": ""},
    {"name": "Public user", "class_id": 2, "description": ""},
    {"name": "Legacy user", "class_id": 3, "description": ""}
]


[docs]def categories() -> List[models.CategoryDef]: """Generate data for current arXiv categories.""" return [ models.CategoryDef( category=category, name=data['name'], active=1 ) for category, data in taxonomy.CATEGORIES.items() ]
[docs]def policy_classes() -> List[models.PolicyClass]: """Generate policy classes.""" return [models.PolicyClass(**datum) for datum in POLICY_CLASSES]
[docs]def users(count: int = 500) -> List[models.User]: """Generate a bunch of random users.""" _users = [] for i in range(count): locale = _get_locale() person = Person(locale) net = Internet(locale) ip_addr = net.ip_v4() _users.append(models.User( first_name=person.name(), last_name=person.surname(), suffix_name=person.title(), share_first_name=1, share_last_name=1, email=person.email(), share_email=8, email_bouncing=0, policy_class=2, # Public user. joined_date=_epoch(Datetime(locale).datetime()), joined_ip_num=ip_addr, joined_remote_host=ip_addr )) return _users
[docs]def licenses() -> List[models.License]: """Generate licenses.""" return [models.License(**datum) for datum in LICENSES]