Git Product home page Git Product logo

samudra's People

Contributors

abizarleman avatar afiqzx avatar mshumayl avatar thaza-kun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

samudra's Issues

Module not found

Poetry v 1.1.14
Python v 3.10.5
Windows 10

Error bila run guna poetry run python ./samudra/serve.py

D:\samudra>poetry run python ./samudra/serve.py
Traceback (most recent call last):
File "D:\samudra\samudra\serve.py", line 3, in
import uvicorn
ModuleNotFoundError: No module named 'uvicorn'

Module dah install. Sebab bila run direct python ./samudra/serve.py

D:\samudra>python samudra/serve.py
Traceback (most recent call last):
File "D:\samudra\samudra\serve.py", line 8, in
from samudra.conf.server.cors_policy import ALLOWED_ORIGINS
ModuleNotFoundError: No module named 'samudra'

ALLOWED_ORIGINS ni merujuk kepada localhost:3000 kan? Masih tak nampak perkaitan lagi kat mana untuk selesaikan.

Dapatkan cara untuk uruskan petikan dan maklumat bibliografinya

Masalah

Model Petikan merupakan sepotong ayat yang menunjukkan penggunaan suatu lema dalam maksud tertentu.
Ia bertujuan menjadi bukti catatan wujudnya penggunaan tersebut.
Persoalannya sekarang, bagaimana mahu menyimpan maklumat bibliografi yang pelbagai jenis dalam jadual jenis SQL?

Cadangan

Lihat cara Zotero dan Calibre menyusun maklumat bibliografi masing-masing.

  • Zotero ialah pengurus bibliografi bersumber terbuka.
  • Calibre ialah pengurus bahan bacaan digital bersumber terbuka.

Sifat kedua-dua perisian ini yang mengurus bahan bacaan dari pelbagai dan bersumber terbuka merupakan calon yang baik untuk kita cuba bongkar jadual SQLite masing-masing. Boleh cuba faham kod untuk model masing-masing, atau gunakan pwiz untuk menterjemahkan jadual SQLite mereka menjadi model Peewee. Model yang terhasil boleh jadi panduan kepada model bibliografi petikan Samudra.

Tambah CLI

Tambah CLI untuk berhubung terus dengan kod sekiranya ia dipasang dalam komputer sendiri.

Dokumentasi Ringkas

Wujudkan dokumentasi kod yang ringkas supaya memudahkan penyumbang baharu

Dapatkan cara untuk uruskan multimedia

Untuk multimedia, seperti gambar, video atau gif, lebih sesuai simpan di satu tempat pelayan simpanan multimedia dan hanya isi pautannya ke dalam pangkalan data. Perlu bangunkan kaedah ini.

Soalan tentang pemasangan samudra: module 'samudra.models' has no attribute 'TABLES'

Discussed in #20

Originally posted by mshumayl October 25, 2022
Saya mendapati ralat ketika cuba memasang samudra. Saya kemukakan ralat ini dalam bahagian 'discussion' ini untuk memahami lebih lanjut tentang pemasangan dan di mana saya tersalah. Saya pasti saya terlepas pandang sesuatu yang jelas, jadi saya amat menghargai sebarang penunjuk dari tuan/puan.

Terima kasih terlebih dahulu atas penerangan dan masa tuan/puan.

Penerangan ralat

Ralat AttributeError: module 'samudra.models' has no attribute 'TABLES' muncul setelah membuat beberapa perubahan untuk memasang cabang master samudra (commit 79b6a76ff7d46814a9c9992a9d4f82fe7cee7048). Berikut merupakan perubahan yang dilakukan.

Cara untuk ulang ralat

  1. Salin repo menggunakan $ git clone https://github.com/Thaza-Kun/samudra.git samudra seperti diperincikan dalam Pemasangan.
  2. Masuk ke dalam folder samudra seperti yang diperincikan dalam Pemasangan.
  3. Dapatkan semua keperluan project menggunakan poetry seperti yang diperincikan dalam Pemasangan.
  4. Sediakan fail .env di ROOT seperti yang diperincikan, dan meletakkan ACCESS_TOKEN_EXPIRE_MINUTES kepada 10 minit:
# ./.env

# Buat masa sekarang ada tiga enjin: SQLite, MySQL, dan CockroachDB.
# SQLite sesuai untuk aplikasi lokal dan hanya satu pengguna.
# Yang lain memerlukan pelayan
ENGINE = SQLite

# Yang ini adalah nilai yang diperlukan untuk daftar masuk pelayan DB
# (Tidak perlu kalau pilih enjin SQLite)
DATABASE_USERNAME = 
DATABASE_PASSWORD = 

# Maklumat pelayan DB
# (Tidak perlu kalau pilih enjin SQLite)
DATABASE_NAME = 
DATABASE_HOST = 
DATABASE_PORT = 
DATABASE_OPTIONS = 

# Tempoh masa pengguna dibenarkan log masuk (dalam sukatan minit)
# (Wajib walaupun pilih enjin SQLite)
ACCESS_TOKEN_EXPIRE_MINUTES = 10
  1. Mulakan pelayan dari ROOT menggunakan $ poetry run python ./samudra/serve.py, dan ralat dibawah akan muncul:
Traceback (most recent call last):
  File "Z:\Noconda\samudra\samudra\serve.py", line 12, in <module>
    from samudra.server.setup import check_tables
  File "Z:\Noconda\samudra\samudra\server\__init__.py", line 4, in <module>
    from .routes import lemmas, auth, golongan_kata
  File "Z:\Noconda\samudra\samudra\server\routes\lemmas.py", line 7, in <module>
    from samudra.server.dependencies import get_db
  File "Z:\Noconda\samudra\samudra\server\dependencies.py", line 4, in <module>
    from samudra.server.setup import SERVER_DATABASE
  File "Z:\Noconda\samudra\samudra\server\setup.py", line 7, in <module>
    from samudra.conf.database.core import ENGINE
ImportError: cannot import name 'ENGINE' from 'samudra.conf.database.core' (.\samudra\samudra\conf\database\core.py)
  1. Untuk menghilangkan ralat ini, saya cuma nyahkomen baris-baris (16 dan 17) berikut di \samudra\samudra\conf\database\core.py:
# ENGINE = settings.get("database").get("engine", None)
# DATABASE_NAME = settings.get("database").get("name", "samudra")
  1. Kemudian, setelah menjalankan $ poetry run python ./samudra/serve.py lagi, ralat kemudiannya akan muncul:
Traceback (most recent call last):
  File "Z:\Noconda\samudra\samudra\serve.py", line 12, in <module>
    from samudra.server.setup import check_tables
  File "Z:\Noconda\samudra\samudra\server\__init__.py", line 4, in <module>
    from .routes import lemmas, auth, golongan_kata
  File "Z:\Noconda\samudra\samudra\server\routes\lemmas.py", line 7, in <module>
    from samudra.server.dependencies import get_db
  File "Z:\Noconda\samudra\samudra\server\dependencies.py", line 4, in <module>
    from samudra.server.setup import SERVER_DATABASE
  File "Z:\Noconda\samudra\samudra\server\setup.py", line 11, in <module>
    SERVER_DATABASE: pw.Database = get_database(engine=DatabaseEngine[ENGINE])
TypeError: get_database() missing 1 required positional argument: 'db_name'
  1. Saya cuba dengan meletakkan argumen db_name dalam panggilan fungsi get_database tersebut di baris 11 dalam fail .\samudra\samudra\server\setup.py:
SERVER_DATABASE: pw.Database = get_database(engine=DatabaseEngine[ENGINE], db_name='samudra_local')
  1. Setelah menjalankan $ poetry run python ./samudra/serve.py, ralat seterusnya muncul:
Traceback (most recent call last):
  File "Z:\Noconda\samudra\samudra\serve.py", line 12, in <module>
    from samudra.server.setup import check_tables
  File "Z:\Noconda\samudra\samudra\server\__init__.py", line 4, in <module>
    from .routes import lemmas, auth, golongan_kata
  File "Z:\Noconda\samudra\samudra\server\routes\lemmas.py", line 7, in <module>
    from samudra.server.dependencies import get_db
  File "Z:\Noconda\samudra\samudra\server\dependencies.py", line 4, in <module>
    from samudra.server.setup import SERVER_DATABASE
  File "Z:\Noconda\samudra\samudra\server\setup.py", line 11, in <module>
    SERVER_DATABASE: pw.Database = get_database(engine=DatabaseEngine[ENGINE], db_name='samudra_local')
  File "Z:\Noconda\samudra\samudra\conf\database\core.py", line 36, in get_database
    return create_sqlite(folder=db_name, path=kwargs.pop("path"), **kwargs)
KeyError: 'path'
  1. Saya cuba dengan mewujudkan folder baru bernama site/local, dan meletakkan path ini kepada argumen path dalam panggilan fungsi get_database yang sama (baris 11):
SERVER_DATABASE: pw.Database = get_database(engine=DatabaseEngine[ENGINE], db_name='samudra_local', path=r'Z:\Noconda\samudra\site\local')
  1. Setelah menjalani $ poetry run python ./samudra/serve.py lagi sekali, sebuah README.md fail akan dijana di Z:\Noconda\samudra\site\local\samudra_local, dan kita tiba kepada ralat seperti di tajuk:
Traceback (most recent call last):
  File "Z:\Noconda\samudra\samudra\serve.py", line 40, in <module>
    check_tables(create_tables=True)
  File "Z:\Noconda\samudra\samudra\server\setup.py", line 26, in check_tables
    for TABLE in models.TABLES:
AttributeError: module 'samudra.models' has no attribute 'TABLES'

Berikut merupakan kandungan Z:\Noconda\samudra\site\local\samudra_local\README.md:

# Samudra_Local
Created using [samudra](https://github.com/samudradev/samudra)

Yang telah dicuba

  1. Saya cuba untuk tentukan pembolehubah senarai kosong TABLES dan JOIN_TABLES dalam \samudra\samudra\models\__init__.py, dan uvicorn akan mula melayan. Tetapi ini terlalu jelik sebagai penyelesaian, dan akan menyebabkan ralat 'circular reference' seperti berikut:
INFO:     Will watch for changes in these directories: ['Z:\\Noconda\\samudra']
INFO:uvicorn.error:Will watch for changes in these directories: ['Z:\\Noconda\\samudra']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:uvicorn.error:Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)      
INFO:     Started reloader process [19260] using StatReload
INFO:uvicorn.error:Started reloader process [19260] using StatReload
Traceback (most recent call last):
  File "Z:\Noconda\samudra\samudra\conf\database\core.py", line 79, in create_sqlite
    base_path.mkdir(parents=True)
  File "Z:\Miniconda3\lib\pathlib.py", line 1312, in mkdir
    self._accessor.mkdir(self, mode)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'Z:\\Noconda\\samudra\\site\\local\\samudra_local'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "Z:\Miniconda3\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "Z:\Miniconda3\lib\multiprocessing\spawn.py", line 125, in _main
    prepare(preparation_data)
  File "Z:\Miniconda3\lib\multiprocessing\spawn.py", line 236, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "Z:\Miniconda3\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
  File "Z:\Miniconda3\lib\runpy.py", line 268, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "Z:\Miniconda3\lib\runpy.py", line 97, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "Z:\Miniconda3\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "Z:\Noconda\samudra\samudra\serve.py", line 12, in <module>
    from samudra.server.setup import check_tables
  File "Z:\Noconda\samudra\samudra\server\__init__.py", line 4, in <module>
    from .routes import lemmas, auth, golongan_kata
  File "Z:\Noconda\samudra\samudra\server\routes\lemmas.py", line 7, in <module>
    from samudra.server.dependencies import get_db
  File "Z:\Noconda\samudra\samudra\server\dependencies.py", line 4, in <module>
    from samudra.server.setup import SERVER_DATABASE
  File "Z:\Noconda\samudra\samudra\server\setup.py", line 11, in <module>
    SERVER_DATABASE: pw.Database = get_database(engine=DatabaseEngine[ENGINE], db_name='samudra_local', path=r'Z:\Noconda\samudra\site\local')
  File "Z:\Noconda\samudra\samudra\conf\database\core.py", line 36, in get_database
    return create_sqlite(folder=db_name, path=kwargs.pop("path"), **kwargs)
  File "Z:\Noconda\samudra\samudra\conf\database\core.py", line 88, in create_sqlite
    raise FileExistsError(
FileExistsError: The path `Z:\Noconda\samudra\site\local\samudra_local` is already occupied with something else. Consider using other folder.
  1. Saya cuba mewujudkan fail kosong Z:\Noconda\samudra\site\local\samudra_local.sqlite, dan ini juga tidak dapat menyelesaikan ralat ini.

Butiran lanjut

Jikalau tuan/puan perlukan butiran lanjut tentang ralat ini, boleh beritahu saya. Maaf terlebih dahulu jika saya terlepas pandang sesuatu yang jelas.

Terima kasih lagi sekali atas masa tuan/puan serta usaha tuan/puan membangunkan samudra.

Gagal untuk pasang/upgrade mysqlclient 2.1.1

Saya cuba untuk upgrade pakej menggunakan poetry, tetapi gagal.

Berikut adalah maklumat yang berkaitan:

Info mesin (lokal):

OS - OSX Monterey 12.5
Versi Python - 3.9.4
Versi Poetry - 1.1.14

Langkah penghasilan semula ralat:

  1. poetry install
  2. Semua pakej berjaya diupdate, kecuali mysqlclient

Output:

  • Installing mysqlclient (2.1.1): Failed

  EnvCommandError

  Command ['/Users/alserembani/Library/Caches/pypoetry/virtualenvs/samudra-w3fVXaJ--py3.9/bin/pip', 'install', '--no-deps', 'file:///Users/alserembani/Library/Caches/pypoetry/artifacts/2d/90/d6/339cd2c929c6d8a54167285d71ca5d4c6996063ebeba2e43a6d5e3f698/mysqlclient-2.1.1.tar.gz'] errored with the following return code 1, and output: 
  Processing /Users/alserembani/Library/Caches/pypoetry/artifacts/2d/90/d6/339cd2c929c6d8a54167285d71ca5d4c6996063ebeba2e43a6d5e3f698/mysqlclient-2.1.1.tar.gz
    Preparing metadata (setup.py): started
    Preparing metadata (setup.py): finished with status 'error'
    error: subprocess-exited-with-error
    
    × python setup.py egg_info did not run successfully.
    │ exit code: 1
    ╰─> [16 lines of output]
        /bin/sh: mysql_config: command not found
        /bin/sh: mariadb_config: command not found
        /bin/sh: mysql_config: command not found
        Traceback (most recent call last):
          File "<string>", line 2, in <module>
          File "<pip-setuptools-caller>", line 34, in <module>
          File "/private/var/folders/93/vjskgv4j0nx3sqqwnb4wpwmw0000gn/T/pip-req-build-hkh5lbs5/setup.py", line 15, in <module>
            metadata, options = get_config()
          File "/private/var/folders/93/vjskgv4j0nx3sqqwnb4wpwmw0000gn/T/pip-req-build-hkh5lbs5/setup_posix.py", line 70, in get_config
            libs = mysql_config("libs")
          File "/private/var/folders/93/vjskgv4j0nx3sqqwnb4wpwmw0000gn/T/pip-req-build-hkh5lbs5/setup_posix.py", line 31, in mysql_config
            raise OSError("{} not found".format(_mysql_config_path))
        OSError: mysql_config not found
        mysql_config --version
        mariadb_config --version
        mysql_config --libs
        [end of output]
    
    note: This error originates from a subprocess, and is likely not a problem with pip.
  error: metadata-generation-failed
  
  × Encountered error while generating package metadata.
  ╰─> See above for output.
  
  note: This is an issue with the package mentioned above, not pip.
  hint: See above for details.
  WARNING: You are using pip version 22.0.3; however, version 22.2.2 is available.
  You should consider upgrading via the '/Users/alserembani/Library/Caches/pypoetry/virtualenvs/samudra-w3fVXaJ--py3.9/bin/python -m pip install --upgrade pip' command.
  

  at ~/.poetry/lib/poetry/utils/env.py:1195 in _run
      1191│                 output = subprocess.check_output(
      1192│                     cmd, stderr=subprocess.STDOUT, **kwargs
      1193│                 )
      1194│         except CalledProcessError as e:
    → 1195│             raise EnvCommandError(e, input=input_)
      1196│ 
      1197│         return decode(output)
      1198│ 
      1199│     def execute(self, bin, *args, **kwargs):

`ImportError` apabila mengimport modul `samudra.conf` daripada direktori `samudra/test` untuk pytest

Butiran masalah

Apabila melakukan import untuk modul samudra.conf daripada direktori samudra/tests, poetry run pytest akan mengeluarkan ImportError kerana terdapat beberapa import relatif dalam modul samudra.conf.

Cadangan penyelesaian

Terdapat dua kaedah untuk menyelesaikan isu ini.

  1. Mengubah semua import relatif dalam modul samudra.conf kepada import mutlak (absolute).
  2. Meletakkan konfig pythonpath untuk pytest dalam pyproject.toml di root. Ini akan dapat menyelesaikan masalah ini untuk semua import relatif dalam projek ini.

Prasyarat tidak lengkap.

Berikut adalah cara pemasangan yang kini ada di Readme.

Pemasangan

    - Python 3.8 atau lebih
    - Guna [poetry](https://python-poetry.org/docs/) (digalakkan)
    - poetry install

Saya telah mengikut cara pemasangan berikut dan menerima ralat berikut.

Traceback (most recent call last):
  File "/home/afiq/Documents/git_clone/samudra/samudra/serve.py", line 3, in <module>
    import uvicorn
ModuleNotFoundError: No module named 'uvicorn'

Adakah cara pemasangan tidak lengkap, atau saya tersilap langkah?

Saya juga tertanya jika saya perlu pasang Mysql ke sistem saya terlebih dahulu, kerana ianya tidak dinyatakan di Readme.....

Export jadi gambar

Export maklumat lemma, maksud2nya serta metadata terpilih menjadi gambar supaya mudah dikongsi ke tempat lain.

Perkemaskan Data API

Masalah

Buat masa ini, data API untuk senarai cakupan dan kata asing berbentuk begini:

{
    "lemma": "foo",
    "konsep": "bar",
    "cakupan": [
        {"cakupan": "foobar"}
    ],
    "kata_asing": [
       {"kata_asing": "barfoo"}
    ]
}

Cakupan berganda cakupan['cakupan'] (dan kata_asing berganda) kelihatan tidak kemas. Sekurang-kurangnya saya mahu elakkan cakupan berganda:

{
    "lemma": "foo",
    "konsep": "bar",
    "cakupan": [
        {"data": "foobar"}
    ],
    "kata_asing": [
       {"data": "barfoo"}
    ]
}

👆 dengan kata kunci data yang sesuai. Ataupun, biar data cakupan menjadi senarai string dan berikan kebolehan memberikan senarai dict bagi yang memerlukannya seperti kata_asing yang memerlukan maklumat tambahan seperti bahasanya.

{
    "lemma": "foo",
    "konsep": "bar",
    "cakupan": [
        "foobar"
    ],
    "kata_asing": [
       {
        "data": "barfoo", 
        "bahasa": "en"
        }
    ]
}

Cadangan

Barangkali boleh lihat pada kelas PeeweeGetterDict untuk faham macam mana mahu manipulasikan benda ini.

Gagal Membuat Jadual Pengguna

Berikut tangkapan layar ralat yang diperolehi ketika menjalankan pelayan:

image

Pangakalan data: MySQL

Langkah penghasilan semula ralat:

  1. Guna pangkalan data kosong (gugurkan semua jadual).
  2. Jalankan pelayan dengan poetry run python ./samudra/serve.py.

Andaian saya, isu ini berkaitan dengan skema MySQL.

Langkah penyelesaian sementara yang dibuat dalam fail samudra/models/auth/pengguna.py:

  1. Tukarkan lapangan peranan dalam kelas Keizinan dari peranan = TextField(null=False, unique=True) ke peranan = CharField(null=False, unique=True).
  2. Tukarkan lapangan peranan dalam kelas Pengguna dari peranan = ForeignKeyField(model=Keizinan, field=Keizinan.peranan, backref='pengguna', on_delete='set default', default=RoleEnum.DEFAULT.value) ke peranan = ForeignKeyField(model=Keizinan, field=Keizinan.peranan, backref='pengguna', default=RoleEnum.DEFAULT.value).

Jadual-jadual akan berjaya dibuat. Namun, timbul isu baru ketika mendaftar sebagai pengguna baru:

Insert Pengguna

Langkah penghasilan semula ralat:

  1. Buat panggilan API dengan laluan authentication/daftar
  2. Kandungan panggilan:
{
    "nama": "[email protected]",
    "katalaluan": "test123"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.