Coverage for portality / models / __init__.py: 90%
60 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 00:09 +0100
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 00:09 +0100
1from typing import Any
2# import the versioned objects, so that the current version is the default one
3from portality.models.v2 import shared_structs
4from portality.models.v2.bibjson import JournalLikeBibJSON
5from portality.models.v2.journal import JournalLikeObject, Journal, JournalQuery, IssnQuery, PublisherQuery, TitleQuery, ContinuationException
6from portality.models.v2.application import Application, SuggestionQuery, OwnerStatusQuery, DraftApplication, AllPublisherApplications
8from portality.models.v2.application import Application as Suggestion
10# non versioned imports for convenience and consistency
11from portality.models.lcc import LCC
12from portality.models.account import Account
13from portality.models.editors import EditorGroup, EditorGroupMemberQuery, EditorGroupQuery
14from portality.models.uploads import FileUpload, ExistsFileQuery, OwnerFileQuery, ValidFileQuery, BulkArticles
15from portality.models.lock import Lock
16from portality.models.history import ArticleHistory, JournalHistory
17from portality.models.article import Article, ArticleBibJSON, ArticleQuery, ArticleVolumesQuery, DuplicateArticleQuery, NoJournalException, ArticleTombstone
18from portality.models.oaipmh import OAIPMHRecord, OAIPMHJournal, OAIPMHArticle
19from portality.models.atom import AtomRecord
20from portality.models.search import JournalArticle, JournalStatsQuery, ArticleStatsQuery
21from portality.models.cache import Cache
22from portality.models.openurl import OpenURLRequest
23from portality.models.provenance import Provenance
24from portality.models.background import BackgroundJob
25from portality.models.preservation import PreservationState
26from portality.models.news import News
27from portality.models.harvester import HarvestState
28from portality.models.event import Event
29from portality.models.notifications import Notification
30from portality.models.autocheck import Autocheck
31from portality.models.export import Export
32from portality.models.ur_review_route import URReviewRoute
33from portality.models.admin_alert import AdminAlert
34from portality.models.shortened_url import ShortenedUrl, CountWithinDaysQuery
35from portality.models.data_dump import DataDump
36from portality.models.journal_csv import JournalCSV
37from portality.models.ris_export import RISExport
39import sys
42def lookup_model(name='', capitalize=True, split_on="_"):
43 parts = name.split(split_on)
44 if capitalize:
45 parts = [p.capitalize() for p in parts]
46 name = "".join(parts)
47 try:
48 return getattr(sys.modules[__name__], name)
49 except:
50 return None
53def lookup_models_by_type(name: str, parent: Any):
54 """ Inspect this (models) module, retrieve model for given type """
55 import inspect
56 current_module = sys.modules[__name__]
57 for classname, obj in inspect.getmembers(current_module):
58 if not inspect.isclass(obj):
59 continue
60 if not issubclass(obj, parent):
61 continue
62 if obj.__type__ == name:
63 return obj
66############################################################################
67# Generic/Utility classes and functions
68############################################################################
69class ObjectDict(object):
70 """WTForms requires an object in order to work properly, not a dict or an unpacked dict."""
71 def __init__(self, d):
72 super(ObjectDict, self).__setattr__('data', d)
74 def __getattr__(self, item):
75 return self.data[item]
77 def __setattr__(self, key, value):
78 self.data[key] = value