Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error: Querying all projects failed. Please try again. #75

Open
ncvescera opened this issue Oct 4, 2023 · 5 comments
Open

Error: Querying all projects failed. Please try again. #75

ncvescera opened this issue Oct 4, 2023 · 5 comments

Comments

@ncvescera
Copy link

Command ols list doesn't work.
I am successfully logged in via ols login.
This is the output of ols list -v:

⠧ Querying all projectsTraceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/olsync/olsync.py", line 348, in execute_action
    success = action()
              ^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/olsync/olsync.py", line 142, in query_projects
    for index, p in enumerate(sorted(overleaf_client.all_projects(), key=lambda x: x['lastUpdated'], reverse=True)):
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/olsync/olclient.py", line 92, in all_projects
    BeautifulSoup(projects_page.content, 'html.parser').find('meta', {'name': 'ol-projects'}).get('content'))
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'

💥  Querying all projects
Error: Querying all projects failed. Please try again.
@h-takeyeah
Copy link

h-takeyeah commented Oct 21, 2023

Hey, I came across this. I'd point out the Overleaf team introduced some changes last year, which may cause this issue. Since I'm an overleaf/overleaf-sync newbie, I'd appreciate experts' help! ❤️

The Overleaf team has been working on a migration project for the last year and completed it.

Before

  • meta name: ol-projects
  • json structure
    // consists of a project array
    [
      {"id": "...", "name": "..."},
      {"id": "...", "name": "..."},
      // ...
    ]

After

  • meta name: ol-prefetchedProjectsBlob
  • json structure
    // became a children of an object
    {
      "totalSize": 5,
      "projects": [
        { "id": "...", "name": "..." },
        { "id": "...", "name": "..." },
       // ...
      ]
    }

Git history

Gathered by me after digging the git history of overleaf/overleaf repository and may be incorrect.

Take a look at the commits that introduced these changes into Overleaf (CE edition).

Two versions of the project list page seem to have been maintained during migration, and the old one that contains ol-project meta was removed at the commit overleaf/overleaf@3e315ea on May 26, 2023. I mentioned the removal of services/web/app/views/project/list.pug.

What can we do?

One patch will be to have OverleafClient.filter_projects() accept new structure dict and rename ol-projects ol-prefetchedProjectsBlob in each caller.

@staticmethod
def filter_projects(json_content, more_attrs=None):
more_attrs = more_attrs or {}
for p in json_content:

to

    @staticmethod
    def filter_projects(json_content, more_attrs=None):
        more_attrs = more_attrs or {}
+        projects = json_content.get("projects", []) # you have to check json_content is not None
-        for p in json_content:
+        for p in projects:

and

json_content = json.loads(
BeautifulSoup(projects_page.content, 'html.parser').find('meta', {'name': 'ol-projects'}).get('content'))
return list(OverleafClient.filter_projects(json_content))

to

        json_content = json.loads(
-            BeautifulSoup(projects_page.content, 'html.parser').find('meta', {'name': 'ol-projects'}).get('content'))
+            BeautifulSoup(projects_page.content, 'html.parser').find('meta', {'name': 'ol-prefetchedProjectsBlob'}).get('content'))
        return list(OverleafClient.filter_projects(json_content))

My suggestion seems not intuitive because to call filter_project with an object does not follow the standard. In other words, python's built-in filter takes an array. So return list(OverleafClient.filter_projects(json_content).get("projects")) should be better. Anyone has an idea? Thanks.

@h-takeyeah
Copy link

One of the folk already fixed this issue.

https://github.com/svennniiii/overleaf-sync

@farbod777
Copy link

Hi sorry, I did not understand how I can fix this error.
Again I am sorry as I am a noob on git.

@ncvescera
Copy link
Author

Hi sorry, I did not understand how I can fix this error. Again I am sorry as I am a noob on git.

I think you have to use this repo: https://github.com/svennniiii/overleaf-sync
Just clone the project wherever you want git clone https://github.com/svennniiii/overleaf-sync and run pip install . inside the folder. This should install the script.

@rochamatcomp
Copy link

rochamatcomp commented Apr 4, 2024

For PIPX users: pipx install git+https://github.com/svennniiii/overleaf-sync.git

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants