crossref-local 0.4.0__tar.gz

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.
Files changed (143) hide show
  1. crossref_local-0.4.0/.env.example +51 -0
  2. crossref_local-0.4.0/.github/workflows/test.yml +47 -0
  3. crossref_local-0.4.0/.gitignore +684 -0
  4. crossref_local-0.4.0/CHANGELOG.md +87 -0
  5. crossref_local-0.4.0/Makefile +299 -0
  6. crossref_local-0.4.0/PKG-INFO +345 -0
  7. crossref_local-0.4.0/README.md +300 -0
  8. crossref_local-0.4.0/docs/remote-deployment.md +260 -0
  9. crossref_local-0.4.0/docs/to_claude/examples/example-python-project-scitex/data/.gitkeep +0 -0
  10. crossref_local-0.4.0/examples/00_run_all.sh +96 -0
  11. crossref_local-0.4.0/examples/01_quickstart.py +173 -0
  12. crossref_local-0.4.0/examples/02_citation_network/citation_network.html +163 -0
  13. crossref_local-0.4.0/examples/02_citation_network/citation_network.yaml +513 -0
  14. crossref_local-0.4.0/examples/02_citation_network/generate_visualization.py +107 -0
  15. crossref_local-0.4.0/examples/03_impact_factor/00_calculate_impact_factor.py +129 -0
  16. crossref_local-0.4.0/examples/03_impact_factor/01_compare_jcr.py +300 -0
  17. crossref_local-0.4.0/examples/03_impact_factor/01_compare_jcr_out/all_combined.json +398 -0
  18. crossref_local-0.4.0/examples/03_impact_factor/01_compare_jcr_out/biomedical_engineering.json +74 -0
  19. crossref_local-0.4.0/examples/03_impact_factor/01_compare_jcr_out/high_impact.json +110 -0
  20. crossref_local-0.4.0/examples/03_impact_factor/01_compare_jcr_out/neuroscience.json +218 -0
  21. crossref_local-0.4.0/examples/03_impact_factor/02_compare_jcr_plot.py +134 -0
  22. crossref_local-0.4.0/examples/03_impact_factor/02_compare_jcr_plot_out/scatter_calc_vs_jcr.yaml +493 -0
  23. crossref_local-0.4.0/examples/03_impact_factor/run_all_demos.sh +65 -0
  24. crossref_local-0.4.0/examples/04_mcp_demo.org +399 -0
  25. crossref_local-0.4.0/examples/04_mcp_demo_out/demo_mcp.tex +438 -0
  26. crossref_local-0.4.0/examples/04_mcp_demo_out/evolution.mmd +13 -0
  27. crossref_local-0.4.0/examples/04_mcp_demo_out/pipeline.mmd +27 -0
  28. crossref_local-0.4.0/examples/04_mcp_demo_out/states.mmd +11 -0
  29. crossref_local-0.4.0/examples/04_mcp_demo_out/tradeoff.mmd +14 -0
  30. crossref_local-0.4.0/examples/Dockerfile.mcp +35 -0
  31. crossref_local-0.4.0/examples/compose_readme.py +70 -0
  32. crossref_local-0.4.0/examples/crossref-mcp.service +47 -0
  33. crossref_local-0.4.0/examples/docker-compose.mcp.yml +44 -0
  34. crossref_local-0.4.0/examples/readme_figure.yaml +1279 -0
  35. crossref_local-0.4.0/pyproject.toml +76 -0
  36. crossref_local-0.4.0/scripts/README.md +132 -0
  37. crossref_local-0.4.0/scripts/create_test_db.py +273 -0
  38. crossref_local-0.4.0/scripts/database/00_rebuild_all.sh +230 -0
  39. crossref_local-0.4.0/scripts/database/02_create_missing_indexes.sh +100 -0
  40. crossref_local-0.4.0/scripts/database/03_rebuild_citations_table.py +641 -0
  41. crossref_local-0.4.0/scripts/database/03_rebuild_citations_table_optimized.py +676 -0
  42. crossref_local-0.4.0/scripts/database/04a_download_openalex_journals.py +243 -0
  43. crossref_local-0.4.0/scripts/database/04b_build_issn_table.py +176 -0
  44. crossref_local-0.4.0/scripts/database/04c_build_journals_table.py +153 -0
  45. crossref_local-0.4.0/scripts/database/04d_build_from_issn_list.py +169 -0
  46. crossref_local-0.4.0/scripts/database/05_build_fts5_index.py +230 -0
  47. crossref_local-0.4.0/scripts/database/06_calculate_abstract_ratio.py +166 -0
  48. crossref_local-0.4.0/scripts/database/99_check_db_connections.py +218 -0
  49. crossref_local-0.4.0/scripts/database/99_db_info.sh +185 -0
  50. crossref_local-0.4.0/scripts/database/99_maintain_indexes.sh +322 -0
  51. crossref_local-0.4.0/scripts/database/99_switch_to_optimized.sh +140 -0
  52. crossref_local-0.4.0/scripts/database/README.md +117 -0
  53. crossref_local-0.4.0/scripts/deployment/build_apptainer.sh +105 -0
  54. crossref_local-0.4.0/scripts/deployment/install_apptainer.sh +105 -0
  55. crossref_local-0.4.0/scripts/deployment/run_apptainer.sh +109 -0
  56. crossref_local-0.4.0/scripts/deployment/run_docker.sh +126 -0
  57. crossref_local-0.4.0/scripts/mcp/install.sh +179 -0
  58. crossref_local-0.4.0/scripts/mcp/status.sh +39 -0
  59. crossref_local-0.4.0/scripts/nfs/check.sh +21 -0
  60. crossref_local-0.4.0/scripts/nfs/setup_nfs.sh +161 -0
  61. crossref_local-0.4.0/scripts/nfs/status.sh +27 -0
  62. crossref_local-0.4.0/scripts/nfs/stop.sh +22 -0
  63. crossref_local-0.4.0/src/crossref_local/__init__.py +142 -0
  64. crossref_local-0.4.0/src/crossref_local/__main__.py +6 -0
  65. crossref_local-0.4.0/src/crossref_local/aio.py +236 -0
  66. crossref_local-0.4.0/src/crossref_local/api.py +296 -0
  67. crossref_local-0.4.0/src/crossref_local/cache.py +466 -0
  68. crossref_local-0.4.0/src/crossref_local/cache_export.py +83 -0
  69. crossref_local-0.4.0/src/crossref_local/cache_viz.py +296 -0
  70. crossref_local-0.4.0/src/crossref_local/citations.py +413 -0
  71. crossref_local-0.4.0/src/crossref_local/cli.py +518 -0
  72. crossref_local-0.4.0/src/crossref_local/cli_cache.py +179 -0
  73. crossref_local-0.4.0/src/crossref_local/cli_completion.py +245 -0
  74. crossref_local-0.4.0/src/crossref_local/cli_main.py +20 -0
  75. crossref_local-0.4.0/src/crossref_local/cli_mcp.py +275 -0
  76. crossref_local-0.4.0/src/crossref_local/config.py +168 -0
  77. crossref_local-0.4.0/src/crossref_local/db.py +138 -0
  78. crossref_local-0.4.0/src/crossref_local/fts.py +172 -0
  79. crossref_local-0.4.0/src/crossref_local/impact_factor/__init__.py +20 -0
  80. crossref_local-0.4.0/src/crossref_local/impact_factor/calculator.py +479 -0
  81. crossref_local-0.4.0/src/crossref_local/impact_factor/journal_lookup.py +274 -0
  82. crossref_local-0.4.0/src/crossref_local/mcp_server.py +413 -0
  83. crossref_local-0.4.0/src/crossref_local/models.py +186 -0
  84. crossref_local-0.4.0/src/crossref_local/remote.py +269 -0
  85. crossref_local-0.4.0/src/crossref_local/server.py +352 -0
  86. crossref_local-0.4.0/tests/conftest.py +56 -0
  87. crossref_local-0.4.0/tests/crossref_local/impact_factor/test_calculator.py +494 -0
  88. crossref_local-0.4.0/tests/crossref_local/impact_factor/test_journal_lookup.py +289 -0
  89. crossref_local-0.4.0/tests/crossref_local/test_aio.py +227 -0
  90. crossref_local-0.4.0/tests/crossref_local/test_api.py +351 -0
  91. crossref_local-0.4.0/tests/crossref_local/test_cache.py +247 -0
  92. crossref_local-0.4.0/tests/crossref_local/test_citations.py +250 -0
  93. crossref_local-0.4.0/tests/crossref_local/test_cli.py +144 -0
  94. crossref_local-0.4.0/tests/crossref_local/test_cli_completion.py +210 -0
  95. crossref_local-0.4.0/tests/crossref_local/test_config.py +114 -0
  96. crossref_local-0.4.0/tests/crossref_local/test_db.py +138 -0
  97. crossref_local-0.4.0/tests/crossref_local/test_fts.py +147 -0
  98. crossref_local-0.4.0/tests/crossref_local/test_mcp_server.py +80 -0
  99. crossref_local-0.4.0/tests/crossref_local/test_models.py +306 -0
  100. crossref_local-0.4.0/tests/crossref_local/test_remote.py +323 -0
  101. crossref_local-0.4.0/tests/crossref_local/test_server.py +169 -0
  102. crossref_local-0.4.0/tests/fixtures/.gitkeep +0 -0
  103. crossref_local-0.4.0/tests/sync_tests_with_source.sh +167 -0
  104. crossref_local-0.4.0/vendor/dois2sqlite/.gitignore +161 -0
  105. crossref_local-0.4.0/vendor/dois2sqlite/LICENSE +21 -0
  106. crossref_local-0.4.0/vendor/dois2sqlite/NOTES.md +55 -0
  107. crossref_local-0.4.0/vendor/dois2sqlite/README.md +119 -0
  108. crossref_local-0.4.0/vendor/dois2sqlite/dois2sqlite/__init__.py +0 -0
  109. crossref_local-0.4.0/vendor/dois2sqlite/dois2sqlite/cli.py +227 -0
  110. crossref_local-0.4.0/vendor/dois2sqlite/dois2sqlite/database.py +66 -0
  111. crossref_local-0.4.0/vendor/dois2sqlite/dois2sqlite/file_handlers.py +150 -0
  112. crossref_local-0.4.0/vendor/dois2sqlite/dois2sqlite/models.py +14 -0
  113. crossref_local-0.4.0/vendor/dois2sqlite/dois2sqlite/representations.py +23 -0
  114. crossref_local-0.4.0/vendor/dois2sqlite/dois2sqlite/utils.py +5 -0
  115. crossref_local-0.4.0/vendor/dois2sqlite/examples/cnserver/NOTES.md +22 -0
  116. crossref_local-0.4.0/vendor/dois2sqlite/examples/cnserver/README.md +21 -0
  117. crossref_local-0.4.0/vendor/dois2sqlite/examples/cnserver/app.py +115 -0
  118. crossref_local-0.4.0/vendor/dois2sqlite/examples/cnserver/cn-quick-test.py +82 -0
  119. crossref_local-0.4.0/vendor/dois2sqlite/examples/cnserver/cnserver/__init__.py +0 -0
  120. crossref_local-0.4.0/vendor/dois2sqlite/examples/cnserver/cnserver/accept_header_utils.py +41 -0
  121. crossref_local-0.4.0/vendor/dois2sqlite/examples/cnserver/cnserver/cslutils.py +46 -0
  122. crossref_local-0.4.0/vendor/dois2sqlite/examples/cnserver/cnserver/settings.py +24 -0
  123. crossref_local-0.4.0/vendor/dois2sqlite/pyproject.toml +54 -0
  124. crossref_local-0.4.0/vendor/dois2sqlite/quick_convert.sh +23 -0
  125. crossref_local-0.4.0/vendor/dois2sqlite/quick_no_convert.sh +20 -0
  126. crossref_local-0.4.0/vendor/dois2sqlite/utils/create-rnd-tar-subset.py +53 -0
  127. crossref_local-0.4.0/vendor/dois2sqlite/utils/select-rnd-dois-from-db.py +45 -0
  128. crossref_local-0.4.0/vendor/labs-data-file-api/.gitignore +287 -0
  129. crossref_local-0.4.0/vendor/labs-data-file-api/LICENSE.md +7 -0
  130. crossref_local-0.4.0/vendor/labs-data-file-api/README.md +99 -0
  131. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/__init__.py +0 -0
  132. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/api.py +263 -0
  133. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/app_urls.py +27 -0
  134. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/asgi.py +16 -0
  135. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/migrations/0001_initial.py +22 -0
  136. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/migrations/0002_dataindexwithlocation.py +22 -0
  137. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/migrations/__init__.py +0 -0
  138. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/models.py +23 -0
  139. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/urls.py +37 -0
  140. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/views.py +107 -0
  141. crossref_local-0.4.0/vendor/labs-data-file-api/crossrefDataFile/wsgi.py +29 -0
  142. crossref_local-0.4.0/vendor/labs-data-file-api/main.py +143 -0
  143. crossref_local-0.4.0/vendor/labs-data-file-api/manage.py +22 -0
@@ -0,0 +1,51 @@
1
+ # CrossRef Local Configuration
2
+ # Copy this file to .env and customize as needed
3
+
4
+ # =============================================================================
5
+ # DATABASE MODE - Direct database access (default)
6
+ # =============================================================================
7
+
8
+ # Path to CrossRef SQLite database (optional - auto-detected if not set)
9
+ # CROSSREF_LOCAL_DB=/path/to/crossref.db
10
+
11
+ # =============================================================================
12
+ # HTTP MODE - Connect to HTTP API server
13
+ # =============================================================================
14
+
15
+ # Force mode: 'db', 'http', or 'auto' (default: auto)
16
+ # CROSSREF_LOCAL_MODE=http
17
+
18
+ # API URL for http mode (default: auto-detect from localhost ports)
19
+ # CROSSREF_LOCAL_API_URL=http://localhost:8333
20
+
21
+ # =============================================================================
22
+ # SERVER CONFIGURATION
23
+ # =============================================================================
24
+
25
+ # HTTP API server settings
26
+ # CROSSREF_LOCAL_HOST=0.0.0.0
27
+ # CROSSREF_LOCAL_PORT=8333
28
+
29
+ # MCP server settings
30
+ # CROSSREF_LOCAL_MCP_HOST=localhost
31
+ # CROSSREF_LOCAL_MCP_PORT=8082
32
+
33
+ # =============================================================================
34
+ # TYPICAL USAGE
35
+ # =============================================================================
36
+ #
37
+ # Local database (default):
38
+ # crossref-local search "machine learning"
39
+ #
40
+ # HTTP mode (connect to running server):
41
+ # crossref-local --http search "machine learning"
42
+ # # Or set: export CROSSREF_LOCAL_MODE=http
43
+ #
44
+ # SSH tunnel to remote server:
45
+ # ssh -L 8333:127.0.0.1:8333 your-server
46
+ # crossref-local --http search "query"
47
+ #
48
+ # Start servers:
49
+ # crossref-local run-server-http # HTTP API on :8333
50
+ # crossref-local run-server-mcp # MCP server (stdio)
51
+ # crossref-local run-server-mcp -t http # MCP server (HTTP)
@@ -0,0 +1,47 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main, develop]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.10", "3.11", "3.12"]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Set up Python ${{ matrix.python-version }}
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
23
+
24
+ - name: Install dependencies
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ pip install -e ".[all]"
28
+
29
+ - name: Create test database
30
+ run: |
31
+ python scripts/create_test_db.py --rows 500
32
+
33
+ - name: Run tests with coverage
34
+ run: |
35
+ pytest tests/ -v --tb=short --cov=crossref_local --cov-report=term-missing --cov-report=xml
36
+
37
+ - name: Upload coverage to Codecov
38
+ uses: codecov/codecov-action@v4
39
+ if: matrix.python-version == '3.11'
40
+ with:
41
+ file: ./coverage.xml
42
+ fail_ci_if_error: false
43
+
44
+ - name: Test CLI
45
+ run: |
46
+ crossref-local --help
47
+ crossref-local status || true