dataclass_models package#
Submodules#
dataclass_models.abstract_base_dataclass module#
- class academic_metrics.dataclass_models.abstract_base_dataclass.AbstractBaseDataClass[source]#
Bases:
ABCAbstract base class for all data model classes providing common functionality.
- to_dict()[source]#
Converts the dataclass to a dictionary, handling Set conversion for JSON serialization.
- to_dict(exclude_keys=None)[source]#
Convert the dataclass to a dictionary, handling Set conversion for JSON serialization.
- Returns:
A dictionary representation of the dataclass.
- Return type:
- set_params(params, debug=False)[source]#
Updates the dataclass fields, merging sets and handling nested updates.
It handles: 1. Converting lists to sets for fields annotated as Set 2. Merging sets instead of overwriting 3. Ignoring keys that don’t match attributes 4. Handling nested dataclass updates
- Parameters:
params (Dict[str, Any]) – A dictionary of parameters to update the dataclass fields.
- Return type:
Examples
>>> class MyClass(AbstractBaseDataClass): ... items: Set[str] = field(default_factory=set) >>> obj = MyClass() >>> obj.set_params({"items": ["a", "b"]}) >>> obj.set_params({"items": ["c", "d"]}) >>> sorted(list(obj.items)) # Contains all items ['a', 'b', 'c', 'd']
dataclass_models.concrete_dataclasses module#
- class academic_metrics.dataclass_models.concrete_dataclasses.CategoryInfo(_id='', url='', category_name='', faculty_count=0, department_count=0, article_count=0, files=<factory>, faculty=<factory>, departments=<factory>, titles=<factory>, tc_count=0, citation_average=0, doi_list=<factory>, themes=<factory>)[source]#
Bases:
AbstractBaseDataClassA dataclass representing information about an academic category.
This class stores various metrics and details related to an academic category, including counts of faculty, departments, and articles, as well as sets of related entities and citation information.
- class academic_metrics.dataclass_models.concrete_dataclasses.GlobalFacultyStats(_id='', name='', total_citations=0, article_count=0, average_citations=0, department_affiliations=<factory>, dois=<factory>, titles=<factory>, categories=<factory>, top_level_categories=<factory>, mid_level_categories=<factory>, low_level_categories=<factory>, category_urls=<factory>, top_category_urls=<factory>, mid_category_urls=<factory>, low_category_urls=<factory>, themes=<factory>, citation_map=<factory>, journals=<factory>)[source]#
Bases:
AbstractBaseDataClassA dataclass representing all of a faculty member’s articles across all categories.
- class academic_metrics.dataclass_models.concrete_dataclasses.FacultyInfo(_id='', name='', category='', category_url='', total_citations=0, article_count=0, average_citations=0, titles=<factory>, dois=<factory>, department_affiliations=<factory>, doi_citation_map=<factory>)[source]#
Bases:
AbstractBaseDataClassA dataclass representing detailed information about a faculty member.
- class academic_metrics.dataclass_models.concrete_dataclasses.FacultyStats(faculty_stats=<factory>)[source]#
Bases:
AbstractBaseDataClassA dataclass representing statistics for all faculty members.
- faculty_stats#
Maps faculty names to their info
- Type:
Dict[str, FacultyInfo]
-
faculty_stats:
Dict[str,FacultyInfo]#
- refine_faculty_stats(*, faculty_name_unrefined, variations)[source]#
Refines faculty statistics by updating faculty names based on variations.
- get_refined_faculty_name(unrefined_name, variations)[source]#
Gets the refined name for a faculty member.
- set_params(params)[source]#
Override set_params to handle the nested FacultyInfo dictionary.
- Parameters:
params (Dict[str, Any])
members. (- Dictionary that can include either a full faculty_stats dictionary or direct updates to individual faculty)
- Return type:
Examples
Case 1 - Full faculty_stats dictionary: >>> faculty_stats = DataClassFactory.get_dataclass(DataClassTypes.FACULTY_STATS) >>> faculty_stats.set_params({ … “faculty_stats”: { … “Dr. Smith”: {“total_citations”: 100, “article_count”: 5}, … “Dr. Jones”: {“total_citations”: 50, “article_count”: 3} … } … })
Case 2 - Direct faculty member updates: >>> faculty_stats = DataClassFactory.get_dataclass(DataClassTypes.FACULTY_STATS) >>> faculty_stats.set_params({ … “Dr. Smith”: {“total_citations”: 100, “article_count”: 5} … })
- class academic_metrics.dataclass_models.concrete_dataclasses.ArticleDetails(tc_count=0, faculty_members=<factory>, faculty_affiliations=<factory>, abstract='', license_url='', date_published_print='', date_published_online='', journal='', download_url='', doi='')[source]#
Bases:
AbstractBaseDataClassA dataclass representing details about an individual article.
- class academic_metrics.dataclass_models.concrete_dataclasses.ArticleStats(article_citation_map=<factory>)[source]#
Bases:
AbstractBaseDataClassA dataclass representing statistics for all articles.
- article_citation_map#
Maps article titles to details
- Type:
Dict[str, ArticleDetails]
Examples
>>> article_stats = DataClassFactory.get_dataclass(DataClassTypes.ARTICLE_STATS) >>> article_stats.set_params({ ... "article_citation_map": { ... "Article Title": { ... "tc_count": 10, ... "faculty_members": {"Dr. Smith", "Dr. Jones"}, ... "journal": "Nature" ... } ... } ... })
-
article_citation_map:
Dict[str,ArticleDetails]#
- set_params(params)[source]#
Override set_params to handle the nested ArticleDetails dictionary.
Examples
>>> article_stats = DataClassFactory.get_dataclass(DataClassTypes.ARTICLE_STATS) >>> article_stats.set_params({ ... "Article Title": { ... "tc_count": 10, ... "faculty_members": {"Dr. Smith"}, ... "journal": "Nature" ... } ... })
- class academic_metrics.dataclass_models.concrete_dataclasses.CrossrefArticleDetails(_id='', title='', tc_count=0, faculty_members=<factory>, faculty_affiliations=<factory>, abstract='', license_url='', date_published_print='', date_published_online='', journal='', download_url='', doi='', themes=<factory>, categories=<factory>, category_urls=<factory>, top_level_categories=<factory>, mid_level_categories=<factory>, low_level_categories=<factory>, top_category_urls=<factory>, mid_category_urls=<factory>, low_category_urls=<factory>, url='')[source]#
Bases:
AbstractBaseDataClassA dataclass representing details about an individual article from Crossref.
- class academic_metrics.dataclass_models.concrete_dataclasses.CrossrefArticleStats(article_citation_map=<factory>)[source]#
Bases:
AbstractBaseDataClassA dataclass representing statistics for all Crossref articles.
- article_citation_map#
Maps DOIs to article details
- Type:
Dict[str, CrossrefArticleDetails]
Examples
>>> stats = DataClassFactory.get_dataclass(DataClassTypes.CROSSREF_ARTICLE_STATS) >>> stats.set_params({ ... "article_citation_map": { ... "10.1234/nature12345": { ... "title": "Research Paper", ... "tc_count": 10, ... "faculty_members": {"Dr. Smith"}, ... "themes": {"AI", "ML"} ... } ... } ... })
-
article_citation_map:
Dict[str,CrossrefArticleDetails]#
- set_params(params, debug=False)[source]#
Override set_params to handle the nested CrossrefArticleDetails dictionary.
Examples
>>> stats = DataClassFactory.get_dataclass(DataClassTypes.CROSSREF_ARTICLE_STATS) >>> stats.set_params({ ... "10.1234/nature12345": { ... "title": "Research Paper", ... "tc_count": 10, ... "faculty_members": {"Dr. Smith"} ... } ... })