pub-analyzer 0.3.0__py3-none-any.whl → 0.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pub-analyzer might be problematic. Click here for more details.

@@ -19,20 +19,26 @@ Body {
19
19
  Footer {
20
20
  dock: bottom;
21
21
  background: $primary-color;
22
- }
23
-
24
- Footer > .footer--highlight {
25
- background: $primary-color-accent;
26
- }
27
-
28
- Footer > .footer--highlight-key {
29
- background: $primary-color-highlight;
30
- text-style: bold;
31
- }
32
22
 
33
- Footer > .footer--key {
34
- text-style: bold;
35
- background: $primary-color-accent
23
+ FooterKey {
24
+ background: $primary-color;
25
+ color: white;
26
+
27
+ .footer-key--key {
28
+ text-style: bold;
29
+ color: white;
30
+ background: $primary-color-accent;
31
+ }
32
+
33
+ &:hover {
34
+ background: $primary-color-highlight;
35
+ color: white;
36
+ text-style: bold;
37
+ .footer-key--key {
38
+ background: $primary-color-accent;
39
+ }
40
+ }
41
+ }
36
42
  }
37
43
 
38
44
  LoadingIndicator {
@@ -1,97 +1,112 @@
1
1
  // Author Summary
2
2
  = Author.
3
3
 
4
+ #let summary-card(title: "Title", body) = {
5
+ return block(
6
+ width: 100%,
7
+ height: 150pt,
8
+ fill: rgb("e5e7eb"),
9
+ stroke: 1pt,
10
+ radius: 2pt,
11
+ )[
12
+ #v(20pt)
13
+ #align(center)[#text(size: 12pt)[#title]]
14
+ #v(5pt)
15
+ #block(width: 100%, inset: (x: 20pt))[#body]
16
+ ]
17
+ }
18
+
4
19
  // Cards
5
20
  #grid(
6
21
  columns: (1fr, 1fr, 1fr),
7
22
  column-gutter: 15pt,
8
23
  [
9
- // Card
10
- #rect(
11
- width: 100%,
12
- height: 150pt,
13
- fill: rgb("e5e7eb"),
14
- stroke: 1pt,
15
- radius: 2pt,
16
- [#linebreak()
17
- #grid(
18
- columns: 1fr,
19
- row-gutter: (15pt, 12pt),
20
-
21
- // Card Title
22
- [#align(center)[#text(size: 12pt)[Last institution:]]],
24
+ // Last institution.
25
+ #summary-card(title:"Last institution:")[
26
+ {% if report.author.last_known_institutions%}
27
+ {% set last_known_institution = report.author.last_known_institutions[0] %}
28
+ #grid(
29
+ rows: auto, row-gutter: 10pt,
23
30
 
24
- // Card content
25
- {% if report.author.last_known_institutions%}
26
- {% set last_known_institution = report.author.last_known_institutions[0] %}
27
- [#align(left)[#text(size: 10pt)[- *Name:* {{ last_known_institution.display_name }}]]],
28
- [#align(left)[#text(size: 10pt)[- *Country:* MX]]],
29
- [#align(left)[#text(size: 10pt)[- *Type:* education]]],
30
- {% endif %}
31
- )]
32
- )
31
+ [*Name:* {{ last_known_institution.display_name }}],
32
+ [*Country:* {{ last_known_institution.country_code }}],
33
+ [*Type:* {{ last_known_institution.type.value|capitalize }}],
34
+ )
35
+ {% endif %}
36
+ ]
33
37
  ],
34
38
  [
35
- // Card
36
- #rect(
37
- width: 100%,
38
- height: 150pt,
39
- fill: rgb("e5e7eb"),
40
- stroke: 1pt,
41
- radius: 2pt,
42
- [#linebreak()
43
- #grid(
44
- columns: 1fr,
45
- row-gutter: (15pt, 12pt),
46
-
47
- // Card Title
48
- [#align(center)[#text(size: 12pt)[Identifiers:]]],
49
-
50
- // Card content
39
+ // Author identifiers.
40
+ #summary-card(title:"Identifiers:")[
41
+ #grid(
42
+ rows: auto, row-gutter: 10pt,
51
43
  {% for key, value in report.author.ids.model_dump().items() %}
52
- {% if value %}
53
- [#align(left)[#text(size: 10pt)[- #underline( [#link("{{ value }}")[{{ key }}]] )]]],
54
- {% endif %}
44
+ {% if value %}
45
+ [- #underline( [#link("{{ value }}")[{{ key }}]] )],
46
+ {% endif %}
55
47
  {% endfor %}
56
- )]
57
- )
48
+ )
49
+ ]
58
50
  ],
59
51
  [
60
- // Card
61
- #rect(
62
- width: 100%,
63
- height: 150pt,
64
- fill: rgb("e5e7eb"),
65
- stroke: 1pt,
66
- radius: 2pt,
67
- [#linebreak()
68
- #grid(
69
- columns: 1fr,
70
- row-gutter: (15pt, 12pt),
71
-
72
- // Card Title
73
- [#align(center)[#text(size: 12pt)[Citation metrics:]]],
52
+ // Citation metrics.
53
+ #summary-card(title: "Citation metrics:")[
54
+ #grid(
55
+ rows: auto, row-gutter: 10pt,
74
56
 
75
- // Card content
76
- [#align(left)[#text(size: 10pt)[- *2-year mean:* {{ report.author.summary_stats.two_yr_mean_citedness|round(5) }}]]],
77
- [#align(left)[#text(size: 10pt)[- *h-index:* {{ report.author.summary_stats.h_index }}]]],
78
- [#align(left)[#text(size: 10pt)[- *i10 index:* {{ report.author.summary_stats.i10_index }}]]],
79
- )]
80
- )
57
+ [*2-year mean:* {{ report.author.summary_stats.two_yr_mean_citedness|round(5) }}],
58
+ [*h-index:* {{ report.author.summary_stats.h_index }}],
59
+ [*i10 index:* {{ report.author.summary_stats.i10_index }}]
60
+ )
61
+ ]
81
62
  ],
82
63
  )
83
64
 
65
+ #v(10pt)
84
66
  #align(center, text(11pt)[_Counts by year_])
85
- #table(
86
- columns: (1fr, 2fr, 2fr),
87
- inset: 8pt,
88
- align: horizon,
89
- // Headers
90
- [*Year*], [*Works count*], [*Cited by count*],
67
+ #grid(
68
+ columns: (1fr, 1fr),
69
+ column-gutter: 15pt,
70
+ align: (auto, horizon),
91
71
 
92
- // Content
93
- {% for year_count in report.author.counts_by_year[:8] %}
94
- [{{ year_count.year }}], [{{ year_count.works_count }}], [{{ year_count.cited_by_count }}],
95
- {% endfor %}
72
+ [
73
+ #table(
74
+ columns: (1fr, 2fr, 2fr),
75
+ inset: 8pt,
76
+ align: horizon,
77
+ // Headers
78
+ [*Year*], [*Works count*], [*Cited by count*],
79
+
80
+ // Content
81
+ {% set max_year_count = 0 %}
82
+ {% for year_count in report.author.counts_by_year[:8] %}
83
+ [{{ year_count.year }}], [{{ year_count.works_count }}], [{{ year_count.cited_by_count }}],
84
+ {% set max_year_count = year_count %}
85
+ {% endfor %}
86
+ )
87
+ ],
88
+ grid.cell(
89
+ inset: (x: 10pt, bottom: 10pt, top: 2.5pt),
90
+ stroke: 1pt
91
+ )[
92
+ #align(center, text(10pt)[Cites by year])
93
+ #v(5pt)
94
+ #canvas(length: 100%, {
95
+ plot.plot(
96
+ size: (0.90, 0.48),
97
+ axis-style: "scientific-auto",
98
+ plot-style: (stroke: (1pt + BLUE),),
99
+ x-min: auto, x-max: auto,
100
+ x-tick-step: 1, y-tick-step: auto,
101
+ x-label: none, y-label: none,
102
+ {
103
+ plot.add((
104
+ {% for year_count in report.author.counts_by_year[:8] %}
105
+ ({{ year_count.year }}, {{ year_count.cited_by_count }}),
106
+ {% endfor %}
107
+ ))
108
+ })
109
+ })
110
+ ]
96
111
  )
97
112
  #pagebreak()
@@ -1,6 +1,18 @@
1
1
  // This document was generated using Pub Analyzer.
2
2
  // https://pub-analyzer.com
3
3
 
4
+ // Packages
5
+ #import "@preview/cetz:0.2.2": canvas, plot, chart, palette
6
+
7
+ // Colors
8
+ #let BLUE = rgb("#42a2f8")
9
+ #let GREEN = rgb("#82d452")
10
+ #let GRAY = rgb("#929292")
11
+ #let YELLOW = rgb("#f0bb40")
12
+ #let RED = rgb("#eb4025")
13
+ #let PURPLE = rgb("#c33375")
14
+
15
+ #let colors = (BLUE, GREEN, GRAY, YELLOW, RED, PURPLE)
4
16
 
5
17
  // Page Layoput
6
18
  #set page("us-letter")
@@ -10,7 +10,7 @@
10
10
 
11
11
  // Content
12
12
  {% for source in report.sources_summary.sources %}
13
- [#underline[3.{{ loop.index }}. #label("source_{{ source.id.path.rpartition("/")[2] }}")]],
13
+ [3.{{ loop.index }}. #label("source_{{ source.id.path.rpartition("/")[2] }}")],
14
14
  [#underline([#link("{{ source.homepage_url }}")[#"{{ source.display_name }}"]])],
15
15
  [{{ source.host_organization_name or "-" }}],
16
16
  [{{source.type }}],
@@ -1,46 +1,135 @@
1
1
  // Works
2
2
  = Works.
3
3
 
4
- #linebreak()
4
+ #let works_metrics_card(title: "Title", graph, body) = {
5
+ grid(
6
+ rows: (18pt, 175pt, 60pt),
7
+ columns: 100%,
8
+
9
+ [
10
+ #block(width: 100%, height: 100%)[
11
+ #align(center + horizon)[#text(style: "italic")[#title]]
12
+ ]
13
+ ],
14
+ [
15
+ #block(width: 100%, height: 100%)[
16
+ #align(center + horizon)[#graph]
17
+ ]
18
+ ],
19
+ [
20
+ #block(width: 100%, height: 100%, inset: (x: 0pt, y: 10pt))[#body]
21
+ ],
22
+ )
23
+ }
5
24
 
6
25
  #grid(
7
26
  columns: (1fr, 1fr, 1fr),
8
- column-gutter: 30pt,
27
+ column-gutter: 15pt,
9
28
  [
10
- #align(center)[_Citation metrics_]
11
- #parbreak()
12
- - *Count:* {{ report.citation_summary.type_a_count + report.citation_summary.type_b_count }}
13
- - *Type A:* {{ report.citation_summary.type_a_count }}
14
- - *Type B:* {{ report.citation_summary.type_b_count }}
29
+ #let graph = {
30
+ canvas(length: 35%, {
31
+ chart.piechart(
32
+ (
33
+ {{ report.citation_summary.type_a_count }}, // Type A
34
+ {{ report.citation_summary.type_b_count }} // Type B
35
+ ),
36
+ radius: 1,
37
+ slice-style: (BLUE, GREEN),
38
+ outer-label: (content: "%", radius: 115%),
39
+ )
40
+ })
41
+ }
42
+
43
+ #works_metrics_card(title: "Citation metrics", graph)[
44
+ #grid(
45
+ rows: auto, row-gutter: 10pt,
46
+ columns: (1fr, 1fr),
47
+
48
+ grid.cell(colspan: 2)[
49
+ *Count:* {{ report.citation_summary.type_a_count + report.citation_summary.type_b_count }}
50
+ ],
51
+ [#box(height: 7pt, width: 7pt, fill: BLUE) *Type A:* {{ report.citation_summary.type_a_count }}],
52
+ [#box(height: 7pt, width: 7pt, fill: GREEN) *Type B:* {{ report.citation_summary.type_b_count }}],
53
+ )
54
+ ]
15
55
  ],
16
56
  [
17
- #align(center)[_Work Type_]
18
- #parbreak()
19
- {% for work_type in report.works_type_summary %}
20
- - *{{ work_type.type_name }}:* {{ work_type.count }}
21
- {% endfor %}
57
+ #let graph = {
58
+ canvas(length: 35%, {
59
+ chart.columnchart(
60
+ size: (2.45, 2.0),
61
+ y-grid: false,
62
+ bar-style: palette.new(
63
+ base: (stroke: none, fill: none),
64
+ colors: colors
65
+ ),
66
+ (
67
+ {% for work_type in report.works_type_summary[:4] %}
68
+ ("{{ work_type.type_name[:2]|capitalize }}", {{ work_type.count }}),
69
+ {% endfor %}
70
+ )
71
+ )
72
+ })
73
+ }
74
+ #works_metrics_card(title: "Work Type", graph)[
75
+ #grid(
76
+ rows: auto, row-gutter: 10pt,
77
+ columns: (1fr, 1fr),
78
+ column-gutter: 5pt,
79
+
80
+ grid.cell(colspan: 2)[
81
+ *Count:* {{ report.open_access_summary.model_dump().items()|sum(attribute="1") }}
82
+ ],
83
+
84
+ {% for work_type in report.works_type_summary[:4] %}
85
+ [
86
+ #box(height: 7pt, width: 7pt, fill: colors.at({{ loop.index0 }})) *{{ work_type.type_name|capitalize }}:* {{ work_type.count }}
87
+ ],
88
+ {% endfor %}
89
+ )
90
+ ]
22
91
  ],
23
92
  [
24
- #align(center)[_Open Access_]
25
- #parbreak()
26
- #grid(
27
- columns: (1fr, 1fr),
28
- column-gutter: 15pt,
29
- [
30
- - *gold:* {{report.open_access_summary.gold}}
31
- - *green:* {{report.open_access_summary.green}}
32
- - *hybrid:* {{report.open_access_summary.hybrid}}
33
- ],
34
- [
35
- - *bronze:* {{report.open_access_summary.bronze}}
36
- - *closed:* {{report.open_access_summary.closed}}
37
- ],
38
- )
93
+ #let graph = {
94
+ canvas(length: 35%, {
95
+ chart.piechart(
96
+ (
97
+ {{report.open_access_summary.diamond}}, // diamond
98
+ {{report.open_access_summary.gold}}, // Gold
99
+ {{report.open_access_summary.green}}, // Green
100
+ {{report.open_access_summary.hybrid}}, // Hybrid
101
+ {{report.open_access_summary.bronze}}, // Bronze
102
+ {{report.open_access_summary.closed}}, // Closed
103
+ ),
104
+ radius: 1,
105
+ inner-radius: .4,
106
+ slice-style: (YELLOW, GREEN, RED, BLUE, GRAY),
107
+ outer-label: (content: "%", radius: 115%),
108
+ )
109
+ })
110
+ }
111
+ #works_metrics_card(title: "Open Access", graph)[
112
+ #grid(
113
+ rows: auto, row-gutter: 10pt,
114
+ columns: (1fr, 1fr, 1fr),
115
+ column-gutter: 5pt,
116
+
117
+ grid.cell(colspan: 3)[
118
+ *Count:* {{ report.open_access_summary.model_dump().items()|sum(attribute="1") }}
119
+ ],
120
+
121
+ [#box(height: 7pt, width: 7pt, fill: BLUE) *Diamond:* {{report.open_access_summary.gold}}],
122
+ [#box(height: 7pt, width: 7pt, fill: YELLOW) *Gold:* {{report.open_access_summary.gold}}],
123
+ [#box(height: 7pt, width: 7pt, fill: GREEN) *Green:* {{report.open_access_summary.green}}],
124
+ [#box(height: 7pt, width: 7pt, fill: PURPLE) *Bronze:* {{report.open_access_summary.bronze}}],
125
+
126
+ [#box(height: 7pt, width: 7pt, fill: GRAY) *Closed:* {{report.open_access_summary.closed}}],
127
+ [#box(height: 7pt, width: 7pt, fill: RED) *Hybrid:* {{report.open_access_summary.hybrid}}],
128
+ )
129
+ ]
39
130
  ],
40
131
  )
41
132
 
42
- #linebreak()
43
-
44
133
  #align(center, text(11pt)[Works from {{ report.works[0].work.publication_year }} to {{ report.works[-1].work.publication_year }}])
45
134
  #table(
46
135
  columns: (auto, 3fr, auto, auto, auto, auto, auto, auto, auto),
@@ -1,11 +1,10 @@
1
- == Extended info.
2
1
  {% for work in report.works %}
3
2
 
4
3
  {% if not loop.first %}
5
4
  #pagebreak()
6
5
  {% endif %}
7
6
 
8
- === #text()[#"{{ work.work.title.replace('"', '\\"') }}"] <work_{{ loop.index }}>
7
+ == #text()[#"{{ work.work.title.replace('"', '\\"') }}"] <work_{{ loop.index }}>
9
8
 
10
9
  #linebreak()
11
10
 
pub_analyzer/main.py CHANGED
@@ -43,8 +43,12 @@ class PubAnalyzerApp(App[DOMNode]):
43
43
 
44
44
  def compose(self) -> ComposeResult:
45
45
  """Create child widgets for the app."""
46
+ footer = Footer()
47
+ footer.upper_case_keys = True
48
+ footer.ctrl_to_caret = False
49
+
46
50
  yield Body()
47
- yield Footer()
51
+ yield footer
48
52
 
49
53
  def action_toggle_dark(self) -> None:
50
54
  """Toggle dark mode."""
@@ -41,6 +41,7 @@ class CitationSummary(BaseModel):
41
41
  class OpenAccessSummary(BaseModel):
42
42
  """Open Access Type counter."""
43
43
 
44
+ diamond: int = 0
44
45
  gold: int = 0
45
46
  green: int = 0
46
47
  hybrid: int = 0
@@ -50,6 +51,8 @@ class OpenAccessSummary(BaseModel):
50
51
  def add_oa_type(self, open_access_type: OpenAccessStatus) -> None:
51
52
  """Add the type of Open Access in the corresponding counter."""
52
53
  match open_access_type:
54
+ case OpenAccessStatus.diamond:
55
+ self.diamond += 1
53
56
  case OpenAccessStatus.gold:
54
57
  self.gold += 1
55
58
  case OpenAccessStatus.green:
@@ -42,6 +42,7 @@ class Location(BaseModel):
42
42
  class OpenAccessStatus(str, Enum):
43
43
  """The Open Access (OA) status of this work."""
44
44
 
45
+ diamond = "diamond"
45
46
  gold = "gold"
46
47
  green = "green"
47
48
  hybrid = "hybrid"
@@ -63,7 +63,7 @@ class OpenAccessSummaryCard(Card):
63
63
 
64
64
  with VerticalScroll(classes="card-container"):
65
65
  for status, count in self.report.open_access_summary.model_dump().items():
66
- yield Label(f"[bold]{status}:[/bold] {count}")
66
+ yield Label(f"[bold]{status.capitalize()}:[/bold] {count}")
67
67
 
68
68
 
69
69
  # Work Info cards.
@@ -105,7 +105,7 @@ class OpenAccessCard(Card):
105
105
  work_url = self.work.open_access.oa_url
106
106
 
107
107
  yield Label("[italic]Open Access[/italic]", classes="card-title")
108
- yield Label(f"[bold]Status:[/bold] {self.work.open_access.oa_status.value}")
108
+ yield Label(f"[bold]Status:[/bold] {self.work.open_access.oa_status.value.capitalize()}")
109
109
  if work_url:
110
110
  yield Label(f"""[bold]URL:[/bold] [@click=app.open_link('{quote(str(work_url))}')]{work_url}[/]""")
111
111
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pub-analyzer
3
- Version: 0.3.0
3
+ Version: 0.4.1
4
4
  Summary: A text user interface, written in python, which automates the generation of scientific production reports using OpenAlex
5
5
  Home-page: https://github.com/alejandrgaspar/pub-analyzer
6
6
  License: MIT
@@ -23,10 +23,10 @@ Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Programming Language :: Python :: 3.12
24
24
  Classifier: Typing :: Typed
25
25
  Requires-Dist: httpx (==0.27.0)
26
- Requires-Dist: jinja2 (==3.1.3)
27
- Requires-Dist: pydantic (==2.7.1)
28
- Requires-Dist: textual (==0.58.0)
29
- Requires-Dist: typst (==0.11.0)
26
+ Requires-Dist: jinja2 (==3.1.4)
27
+ Requires-Dist: pydantic (==2.7.4)
28
+ Requires-Dist: textual (==0.70.0)
29
+ Requires-Dist: typst (==0.11.1)
30
30
  Project-URL: Documentation, https://pub-analyzer.com/
31
31
  Project-URL: Repository, https://github.com/alejandrgaspar/pub-analyzer
32
32
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ pub_analyzer/css/buttons.tcss,sha256=FruJ39dXmKnZm3_y0CxAJByKHrbmt6RQky0T0uM906g
4
4
  pub_analyzer/css/checkbox.tcss,sha256=FblyIHns-r1K0ikOnSJtoTMz57C6iDEcscdFAsJ7s48,506
5
5
  pub_analyzer/css/collapsible.tcss,sha256=Rh-L5PcIMhnZ7RhY1udd_BcYC1mfCMew2m6o6ty3juE,605
6
6
  pub_analyzer/css/datatable.tcss,sha256=JgdMUPc4fYmZlXi_FxbuD88pegK6Pi4FgDHIfA_TKxo,994
7
- pub_analyzer/css/main.tcss,sha256=wL8KD2gwRDrE_u0EbZrvu5s3eTFwWLtbP8RMLgCv2Sk,834
7
+ pub_analyzer/css/main.tcss,sha256=rtHLKCVZaBuJ83dAg840cetzVtEy8Rjbw1UKxgafeE8,1027
8
8
  pub_analyzer/css/report.tcss,sha256=5v-h4Y5gUdonLQTVkVm-HYrYT1xDS-4NYHVZDYghVEs,2066
9
9
  pub_analyzer/css/search.tcss,sha256=rovbWjp4pYfCF_OyAC_QrV_0WdMUlsYoQ3vbs9pGw7g,1326
10
10
  pub_analyzer/css/summary.tcss,sha256=i4ixICwoQFj2BToW9NVmJGUIYk5upbukbTCnDgT40ds,1350
@@ -14,20 +14,20 @@ pub_analyzer/internal/__init__.py,sha256=9aqrBJDedUiBO5kEO81kSAuPbOSFoaDZZK8w5Ny
14
14
  pub_analyzer/internal/identifier.py,sha256=LDYew25TLuwqJHmLg9iRNTURWynN27ZbTxTVGbuOUD0,2939
15
15
  pub_analyzer/internal/render.py,sha256=gq5dScWs507tne3glJbTQ-PekmALvtcZPB1p_mVAkE0,2144
16
16
  pub_analyzer/internal/report.py,sha256=zeDn4mR8G7-NA0SxelIhanZ2e4mLecbiuVqlv2_hMb8,16320
17
- pub_analyzer/internal/templates/author/author_summary.typ,sha256=0qyS2C075wpj3mOxY4Ka5-aNjQ5RAjoJskkIb8tnLFE,2478
18
- pub_analyzer/internal/templates/author/report.typ,sha256=izdq5Z-504hkLwI_C47RsqDDu_K8N74h_3KCetzSies,1444
19
- pub_analyzer/internal/templates/author/sources.typ,sha256=_yFNDuYPu1casCy73JVL7l9qZ_YYRqTGLLgr5tnQW5A,814
20
- pub_analyzer/internal/templates/author/works.typ,sha256=wKgg4EoPYLzY2q3UBsBKZADOmTy4-1r8CD1pt8A3VYo,1980
21
- pub_analyzer/internal/templates/author/works_extended.typ,sha256=B38IHOwlBuPzUA6SewoHEp5eU-9kEH3yH5KvK7Nm7a0,3527
22
- pub_analyzer/main.py,sha256=-yv34eVkLT8cyJ-wCl3vuoprMmqpsMhc3arGAnytCuY,2201
17
+ pub_analyzer/internal/templates/author/author_summary.typ,sha256=HtKVteroNhDIDu83vH3ZESm7VMmU8eMx7Wd-gqBXbHg,2827
18
+ pub_analyzer/internal/templates/author/report.typ,sha256=Pq7AxT425Buz4a2NFSIoNwp4FozwuHWALzNxe0fsTwA,1749
19
+ pub_analyzer/internal/templates/author/sources.typ,sha256=vY9qUEl_HbxgYl4NWR8yH0oQ5TzaYIxk3p9IsSprFBM,802
20
+ pub_analyzer/internal/templates/author/works.typ,sha256=ILARKhm6VDK4tUv7cIKhylWsBlJ-pPvOaTMRL21lZ9M,4970
21
+ pub_analyzer/internal/templates/author/works_extended.typ,sha256=kzk8gpGEqj1J-U1OrmGBGZ63N17wBwFjR1XDW6dFyWo,3508
22
+ pub_analyzer/main.py,sha256=0vCh_eaPc4uaGI2WsyTp7JYc9CL5gANCaa4PZhB8Dvc,2301
23
23
  pub_analyzer/models/__init__.py,sha256=hvR6m379slQw7gSwnl_OFY21Ytv90mmmOe7bp8vZYkk,59
24
24
  pub_analyzer/models/author.py,sha256=9DzBQY4JoDv5ilBNOLyquOqnlwbXCTpmZq25cQLCgYU,1900
25
25
  pub_analyzer/models/concept.py,sha256=yNvajKWTn6uBalNoJmlobitvbFBOjF80jlZnjKjwDRw,677
26
26
  pub_analyzer/models/institution.py,sha256=kjS3U0w454SBCZNsZ03-XZqciZR0ubwsCRo2ix6RojM,3067
27
- pub_analyzer/models/report.py,sha256=zrAkUYgGCGnDzvQYbidyf1cmi7iXbXxsskfqZaeurbw,2574
27
+ pub_analyzer/models/report.py,sha256=yma70xpD6I8hv_kk5ylMhylLu60eOpQwNEJa-Dd-XQI,2672
28
28
  pub_analyzer/models/source.py,sha256=o3ich4iDYB_PH_cVbrZtVRFVLQlPS3W5ajgBQQGzYqM,2730
29
29
  pub_analyzer/models/topic.py,sha256=3MBQV-njnjfmOVvgmFZxy8fFU7sMj5yxUW8EHFAjlD4,1825
30
- pub_analyzer/models/work.py,sha256=vN2mSB6oiPbkhaGy0pjWGc2meWjkkHAz5Eubed3BO6w,4115
30
+ pub_analyzer/models/work.py,sha256=HmlwamhtfZfC6LA_MAri9Xknn8In19lfmTkMU9X7oRM,4139
31
31
  pub_analyzer/widgets/__init__.py,sha256=JALs1yGE06XYwjoY_0AG-Wt_pMknI1WEWNYK3atQaEA,18
32
32
  pub_analyzer/widgets/author/__init__.py,sha256=oiJibt7YiuGpovOnFIAlC9YwLO-0LN3SDgPWFL-LVPQ,22
33
33
  pub_analyzer/widgets/author/cards.py,sha256=JWZxYy4Oen5fToiSBgvfEgmBJlrIVXCWpT-XjkLbxY4,2445
@@ -48,7 +48,7 @@ pub_analyzer/widgets/institution/core.py,sha256=q21GXawR9g-pN68YgdiHc3r_ZxiKq5JY
48
48
  pub_analyzer/widgets/institution/tables.py,sha256=tXjrop9HGSkZGjYIOGQEOKVoyoeIGPd-8oSh08iuTRw,838
49
49
  pub_analyzer/widgets/report/__init__.py,sha256=oolRVss3JKaQHaQVDncjtxbLINRJ5Rd1ulW1uk7MLhc,54
50
50
  pub_analyzer/widgets/report/author.py,sha256=orlq-YSHeRcEyCXrQHiRpp2tdPC9SO1MjQ9uhNpU0-k,1227
51
- pub_analyzer/widgets/report/cards.py,sha256=NtsGCdlAqsuocun_QwE7dJeZetfAqKAjduHYpVtq-ic,4826
51
+ pub_analyzer/widgets/report/cards.py,sha256=CwdevZzf3YnuAuHV0JEJXFrcyNZ-xEjFylvAHuuo48E,4852
52
52
  pub_analyzer/widgets/report/concept.py,sha256=xiGXy_RXO_XmdqnlePkOozYPmQrsDdqKPMRXHsZbDP0,1485
53
53
  pub_analyzer/widgets/report/core.py,sha256=V4fwBHnSqkUzC1da8sGYqzsPKQRofA7GqpEhbEXsk4s,11436
54
54
  pub_analyzer/widgets/report/export.py,sha256=EQzF5fMZgHtLv3f5hITDgf9WW2XytRX_foeLWwcIHkM,4762
@@ -62,8 +62,8 @@ pub_analyzer/widgets/search/__init__.py,sha256=8C3IQtFkiIL8hlQbhJ_fAHM59-TAoe29w
62
62
  pub_analyzer/widgets/search/core.py,sha256=4NvowtBcrH1fmob9kuF7v9Tq3Nd99jzB2S7xaD8OYeI,3861
63
63
  pub_analyzer/widgets/search/results.py,sha256=6Sl-shkGCf-jcMmalXpk1n8oBHk1aZNzFPJfHSRP1gA,3702
64
64
  pub_analyzer/widgets/sidebar.py,sha256=XlIshlCVW5Bb3MXFPnU9is0qQrUrGdT6xlkKiYNEcAM,2704
65
- pub_analyzer-0.3.0.dist-info/LICENSE,sha256=OPopoEowTMKqIea8Kbxk3TKdCQ97YkLvIknjTHE5oCI,1080
66
- pub_analyzer-0.3.0.dist-info/METADATA,sha256=sMpAloa5JJUR1k3N7lgpLATfrn4Q8lZqERK5_NBYPaE,4508
67
- pub_analyzer-0.3.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
68
- pub_analyzer-0.3.0.dist-info/entry_points.txt,sha256=mVb_gUNX_-aVWHlNKLjcMAS8YLgNnSq9JLRXVJGIF2c,54
69
- pub_analyzer-0.3.0.dist-info/RECORD,,
65
+ pub_analyzer-0.4.1.dist-info/LICENSE,sha256=OPopoEowTMKqIea8Kbxk3TKdCQ97YkLvIknjTHE5oCI,1080
66
+ pub_analyzer-0.4.1.dist-info/METADATA,sha256=Y-1nykVEz-QCbK6vO8t8pb79gmmwZj0iDNPv6lOKOuQ,4508
67
+ pub_analyzer-0.4.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
68
+ pub_analyzer-0.4.1.dist-info/entry_points.txt,sha256=mVb_gUNX_-aVWHlNKLjcMAS8YLgNnSq9JLRXVJGIF2c,54
69
+ pub_analyzer-0.4.1.dist-info/RECORD,,