%global _empty_manifest_terminate_build 0 Name: python-falocalrepo-server Version: 3.3.3 Release: 1 Summary: Web interface for falocalrepo. License: EUPL-1.2 URL: https://github.com/FurryCoders/falocalrepo-server Source0: https://mirrors.nju.edu.cn/pypi/web/packages/62/16/f484dd08511465adfc829ea1df61678a67e1354a8e6ffe57376dba92c829/falocalrepo_server-3.3.3.tar.gz BuildArch: noarch Requires: python3-falocalrepo-database Requires: python3-chardet Requires: python3-pillow Requires: python3-fastapi Requires: python3-uvicorn Requires: python3-Jinja2 Requires: python3-click Requires: python3-click-help-colors Requires: python3-htmlmin Requires: python3-beautifulsoup4 Requires: python3-lxml Requires: python3-bbcode %description
logo # FALocalRepo-Server Web interface for [falocalrepo](https://pypi.org/project/falocalrepo/). [![](https://img.shields.io/github/v/tag/FurryCoders/falocalrepo-server?label=github&sort=date&logo=github&color=blue)](https://github.com/FurryCoders/falocalrepo-server) [![](https://img.shields.io/pypi/v/falocalrepo-server?logo=pypi)](https://pypi.org/project/falocalrepo-server/) [![](https://img.shields.io/pypi/pyversions/falocalrepo-server?logo=Python)](https://www.python.org) [![](https://img.shields.io/badge/Bootstrap-5.2.0-7952B3?logo=bootstrap&logoColor=white)](https://getbootstrap.com)
## Installation & Requirements To install the program it is sufficient to use Python pip and get the package `falocalrepo-server`. ```shell pip install falocalrepo-server ``` Python 3.10 or above is needed to run this program, all other dependencies are handled by pip during installation. For information on how to install Python on your computer, refer to the official website [Python.org](https://www.python.org/). For the program to run, a properly formatted database created by falocalrepo needs to be present in the same folder. The styling is based on the [Boostrap CSS framework](https://getbootstrap.com). _Note:_ When upgrading to a new version the styling may be broken to due to the browser using the old stylesheet in its cache. To fix it, simply delete the browser cache to fetch the new version.f ## Usage ``` falocalrepo-server [--host HOST] [--port PORT] [--ssl-cert SSL_CERT] [--ssl-key SSL_KEY] [--redirect-http REDIRECT_PORT] [--auth :] [--precache] [--no-browser] ``` The server needs one argument pointing at the location of a valid [falocalrepo](https://pypi.org/project/falocalrepo/) database and accepts optional arguments to manually set host, port, and an SSL certificate with key. By default, the server is run on 0.0.0.0:80 for HTTP (without certificate) and 0.0.0.0:443 for HTTPS (with certificate). The `--precache` options can be used to prepare an initial cache of results from the database to speed up searches. When the app has finished loading, it automatically opens a browser window. To avoid this, use the `--no-browser` option. ### Redirect Mode The optional `--redirect-http` argument changes the app mode to redirection. In this mode the app runs a tiny server that redirects all HTTP requests it receives on `http://HOST:PORT` to `https://HOST:REDIRECT_PORT`. _Note:_ In redirect mode the `database` argument is not checked, so a simple `.` is sufficient.
_Note:_ In redirect mode the app does not operate the database portion of the server. To run in redirect and server mode, two separate instances of the program are needed. Once the server is running the web app can be accessed at the address shown in the terminal. ### Authentication The `--auth` option allows setting up a username and password to access the server using the HTTP Basic authentication protocol. ### Arguments | Argument | Default | |-------------------|--------------------------------------------------| | `database` | None, mandatory argument | | `--host` | 0.0.0.0 | | `--port` | 80 if no SSL certificate is given, 443 otherwise | | `--ssl-cert` | None | | `--ssl-key` | None | | `--redirect-http` | None | | `--auth` | None | | `--precache` | False | | `--no-browser` | True | ### Examples ```shell # Launch an HTTP server reachable from other machines using the server's hostname/IP falocalrepo-server ~/FA.db ``` ```shell # Launch a localhost-only server on port 8080 falocalrepo-server ~/FA.db --host 127.0.0.1 --port 8080 ``` ```shell # Launch a redirect server that listens to port 80 and redirects to port 443 on host 0.0.0.0 falocalrepo-server . --host 0.0.0.0 --port 80 --redirect-htpp 443 ``` ```shell # Launch a server with basic authentication using 'mickey' as username and 'mouse' as password falocalrepo-server ~/FA.db --auth mickey:mouse ``` ```shell # Launch an HTTPS server reachable from other machines using the server's hostname/IP falocalrepo-server ~/FA.db --ssl-cert ~/FA.certificates/certificate.crt --ssl-key ~/FA.certificates/private.key ``` ```shell # Launch a localhost-only HTTPS server on port 8443 falocalrepo-server ~/FA.db --host 127.0.0.1 --port 8443 --ssl-cert ~/FA.certificates/certificate.crt --ssl-key ~/FA.certificates/private.key ``` ## Routes _Note:_ All the following paths are meant as paths from `:`. | Route | Destination | |------------------------------------------------|-----------------------------------------------------------------------------------------| | `/` | Show home page with general information regarding the database | | `/search/` | Redirects to `/search/submissions/` | | `/search/submissions/` | Search & browse submissions | | `/search/journals/` | Search & browse journals | | `/search/users/` | Search & browse users | | `/settings/` | Change default search settings | | `/user//` | Show information regarding a specific user | | `/user//icon/` | Redirect to username's icon on Fur Affinity | | `/user//thumbnail/` | Redirect to username's icon on Fur Affinity | | `/gallery//` | Browse & search a user's gallery submissions | | `/scraps//` | Browse & search a user's scraps submissions | | `/submissions//` | Browse & search a user's gallery & scraps submissions | | `/favorites//` | Browse & search a user's favorite submissions | | `/mentions//` | Browse & search the submissions where the user is mentioned | | `/journals//` | Browse & search a user's journals | | `/full//` | Redirect to `/submission//` | | `/view//` | Redirect to `/submission//` | | `/submission//` | View a submission | | `/submission//file/` | Open the first submission file | | `/submission//file//` | Open the nth first submission file | | `/submission//files/` | Download all the submission files as a zip | | `/submission//files/-/` | Download submissions files from index n1 to index n2 (0 indexed inclusive) | | `/submission//thumbnail/` | Open a submission thumbnail (generated for image submissions if no thumbnail is stored) | | `/submission//zip/` | Download a submission's file, description, and metadata as a ZIP archive | | `/journal//` | View a journal | | `/journal//zip/` | Download a journal's content and metadata as a ZIP archive | ### JSON API Routes The following routes return information as JSON responses. They can be reached with `GET` and `POST` requests, the former supports sending body fields as URL parameters. | Route | Destination | Body | |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| | `/json/search//` | Perform a search on the database. The query field in the body uses the same [syntax](#query-language) as the query field in the [search page](#browse--search). | `{query?: str, offset?: int, limit?: int, sort?: str, order?: Union["asc", "desc"]}` | | `/json/user/` | Get user metadata and total submissions/journals | None | | `/json/submission/` | Get submission metadata and comments | None | | `/json/journal/` | Get journal metadata and comments | None | ## Pages _Note:_ the images used in the following sections were taken using light mode, but all pages also support dark mode. ### Home The home page displays general information about the database and contains links to browse and search pages for the various tables. The information table displays the total number of submissions, journals, and users together with the version of the database. Clicking on any of the counters open the relevant search & browse page. ### Browse & Search The browse and search pages allow to explore the submissions/journals contained in the database. Searches are performed case-insensitively using a simple syntax in the form `@field term [[| &] term ...]` which allows logic operators, parentheses and start/end of field matching, see [Query Language](#query-language) for details. Search terms for submissions and journals default to the `any` field if none is used, while the `username` field is used for users searches. The controls at the top of the page allow to query the database and control the visualisation of the results.
The _Search_ input allows to insert the search query. The _Field_ menu allows to insert a specific search field using a simple dropdown menu. The _Sort_ and adjacent order menus change the sorting field and order of the search results. Submissions and journals default to descending ID, while users default to ascending username. The _View_ menu allows changing between the (default) grid view to a list (table) view The _Search_ button submits the search request using the current query and sorting settings. The _Browse_ button resets the current search query and reverts to browse mode (all entries). The _FA_ button opens the current search on Fur Affinity, translating the shared search and sorting fields (tags, author, description, and fileurl/fileext). The button is only available when searching submissions. The gear button opens the search settings, the question mark button shows a quick help about the query language. Under the search controls are the number of results and current page.
Under the results numbers are the page controls. _First_ leads to page 1, _Prev_ leads to the previous page, _Next_ leads to the next page, and _Last_ leads to the last page. These controls are also available at the bottom of the page. In grid view, the results are presented using cards containing the same information as the list view, with the addition of thumbnails for submissions. When searching for submissions or journals, clicking on the card footer (containing the date and author) will open the author's page. Submissions with more than one file will display a small counter with the number of files in the upper right corner of the card.
In list view, the results are presented in a table with the most important columns: ID, AUTHOR, DATE, and TITLE ( submissions and journals); USERNAME, FOLDERS, and ACTIVE (users). On small screens some of these columns are shortened or removed.
#### Compatibility with Fur Affinity Search Most Fur Affinity search queries (and links) are fully compatible with the program. Except for the _NOT_ (!) operator, which follows different syntax rules, all Fur Affinity search fields are fully supported: `@lower` (treated as `@author`), `@keywords` (treated as `@tags`), `@message` (treated as `@description`) , `@title` (treated as `@title`), `@filename` (treated as `@fileurl`). #### Query Language The query language used for this server is based on and improves the search syntax currently used by the Fur Affinity website. Its basic elements are: * `@` field specifier (e.g. `@title`), all database columns are available as search fields. See [falocalrepo-database](https://pypi.org/project/falocalrepo-database/) for details on the available columns. * `()` parentheses, they can be used for better logic operations * `&` _AND_ logic operator, used between search terms * `|` _OR_ logic operator, used between search terms * `!` _NOT_ logic operator, used as prefix of search terms * `""` quotes, allow searching for literal strings without needing to escape * `%` match 0 or more characters * `_` match exactly 1 character * `^` start of field, when used at the start of a search term, it matches the beginning of the field * `$` end of field, when used at the end of a search term, it matches the end of the field All other strings are considered search terms. The search uses the `@any` field by default for submissions and journals, allowing to do general searches without specifying a field. The `@any` field does not include the `FAVORITE`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` fields and must be searched manually using the respective query fields. When searching users, `@username` is the default field. Search terms that are not separated by a logic operator are considered _AND_ terms (i.e. `a b c` -> `a & b & c`). Except for the `ID`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` fields, all search terms are searched through the whole content of the various fields: i.e. `@description cat` will match any item whose description field contains "cat". To match items that contain only "cat" (or start with, end with, etc.), the `%`, `_`, `^`, and `$` operators need to be used (e.g. `@description ^cat`). Search terms for `ID`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` are matched exactly as they are: i.e. `@id 1` will match only items whose ID field is exactly equal to "1", to match items that contain "1" the `%`, `_`, `^`, or `$` operators need to be used (e.g. `@id %1%`). ##### Examples Search for journals/submissions containing water and either otter, lutrine, or mustelid, or water and either cat or feline: `water ((otter | lutrine | mustelid) | (cat | feline))` `@any water & ((otter | lutrine | mustelid) | (cat | feline))` Search for journals/submissions containing "cat" or "feline" but neither "mouse" nor "rodent": `(cat | feline) !mouse !rodent` Search for general-rated submissions uploaded by a user whose name starts with "tom" that contain either "volleyball" or "volley" and "ball" separated by one character (e.g. "volley-ball") in any field: `@rating general @author tom% @any (volleyball | volley_ball)` `(volleyball | volley_ball) @rating general @author tom%` Search for journals/submissions uploaded in 2020 except for March: `@date ^2020 !^2020-03` Search for submissions uploaded in March 2021 (meaning the date has to start with `2021-03`) whose tags contain the exact tag "ball": `@date ^2021-03 @tags "|ball|"` `@date ^2021-03 @tags \|ball\|` Search for journals/submissions where a specific user named "tom" is mentioned: `@mentions "|tom|"` `@mentions \|tom\|` Search for submissions whose only favorite is a user named "alex": `@favorite ^\|alex\|$` Search for users whose names contain "mark": `@username %mark%` Search for journals/submissions whose title ends with "100%": `@title 100\%$` Search for journals/submissions whose title is exactly "cat": `@title ^cat$` Search for text submissions with PDF files: `@type text @fileext pdf` ### Search Settings The search settings page allows modifying the sorting, ordering, and viewing option that are applied by default to the various searches. Settings can be saved to the database if it is writable, otherwise they are simply saved for the current session and reset when the program stops. Settings values are saved in the `SETTINGS` table with the `SERVER.SEARCH` setting name. ### User The user page shows information about submissions and journals related to a user (gallery, scraps, favorites, mentions, and journals) and what folders have been set for download. See [falocalrepo](https://pypi.org/project/falocalrepo/) for more details on this. The user's profile will be displayed if present in the database. Clicking on any of the counters opens the relevant results via the search interface, allowing to refine the search further. The _Next_ and _Prev_ buttons move to the respective users in ascending alphabetical order. ### Submission The submission page shows the submission file(s) (if present), the submission metadata, and the description. Image, audio, video, and plain text submission files are displayed directly in the page, others (e.g. PDF files) will display a link to open them. Clicking on image files will enlarge them to fill the width of the screen for easier viewing. Video files can be enlarged by using the zoom button under them. When a submission has two or more files, a toolbar appears below the file section with buttons to switch between the different files, show the files in a grid view, and enlarge non-image files (text, video, etc.).
The metadata table contains clickable links to the user's page (see [User](#user) for details), tags, category, species, gender, rating, folder (gallery/scraps), and to user pages of favouring and mentioned users. The description is displayed as-is except for user icons, which are replaced by `@username` styled links to avoid display errors caused by expired icon links. Under the metadata table are a number of buttons that allow to access the submission file, open its Fur Affinity counterpart, and navigate the other submissions from the author.
The download _File_ button downloads the submission file (if present). If more than one file is present, then the button downloads a zip file containing all submission files. The download _ZIP_ button generates a ZIP file containing the submission file, submission thumbnail, description HTML, and metadata and comments in JSON format. The _FA_ button opens the submission on Fur Affinity The _Next_ and _Prev_ buttons lead to the next more recent and the previous less recent submissions respectively. The _Gallery_, _All_, and _Scraps_ buttons open a search page with the user's gallery submissions, scraps and gallery submissions together, and scraps submissions respectively. To view the currently selected submission file when scrolling down the page, the button in the lower right corner can be used to open the image in a floating overlay that will remain at the top of the page view. The comments to the submission can be found below the description, and can be reached quickly by clicking on the floating comments button that appears in the lower right corner of the screen if the submission has comments. Each comment contains the author (with a link to their user page), post date, and links to the comment itself and, if the comment is a reply, its parent comments.
The button furthest to the left (arrow pointing up and to the left) links to the first comment in a reply chain. The middle button (bent arrow pointing to the left) links to the previous comment in the reply chain. The link button furthest to the right is a link to that specific comment. ### Journal The journal page shows the journal metadata and content. The metadata table contains clickable links to the user's page (see [User](#user) for details) and to user pages of mentioned users. Under the metadata table are a number of buttons that allow to download the journal, open its Fur Affinity counterpart, and navigate the other journals from the same user.
The download _ZIP_ button generates a ZIP file containing the journal content HTML and metadata and comments in JSON format. The _FA_ button opens the journal on Fur Affinity The _Next_ and _Prev_ buttons lead to the next more recent, and the previous less recent journals respectively. The _All_ button opens a search page with all the user's journals. The comments to the journal can be found below the journal text, and can be reached quickly by clicking on the floating comments button that appears in the lower right corner of the screen if the journal has comments. Each comment contains the author (with a link to their user page), post date, and links to the comment itself and, if the comment is a reply, its parent comments.
The button furthest to the left (arrow pointing up and to the left) links to the first comment in a reply chain. The middle button (bent arrow pointing to the left) links to the previous comment in the reply chain. The link button furthest to the right is a link to that specific comment. ### BBCode When the database is in BBCode mode a new buttons appears along submission descriptions, journal contents, and user profiles to switch between the rendered HTML and the BBCode stored in the database.
_Note:_ the BBCode to HTML conversion is still a work in progress and some content may be rendered incorrectly; please open an [issue](https://github.com/FurryCoders/falocalrepo-server/issues) if you encounter any error :) %package -n python3-falocalrepo-server Summary: Web interface for falocalrepo. Provides: python-falocalrepo-server BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-falocalrepo-server
logo # FALocalRepo-Server Web interface for [falocalrepo](https://pypi.org/project/falocalrepo/). [![](https://img.shields.io/github/v/tag/FurryCoders/falocalrepo-server?label=github&sort=date&logo=github&color=blue)](https://github.com/FurryCoders/falocalrepo-server) [![](https://img.shields.io/pypi/v/falocalrepo-server?logo=pypi)](https://pypi.org/project/falocalrepo-server/) [![](https://img.shields.io/pypi/pyversions/falocalrepo-server?logo=Python)](https://www.python.org) [![](https://img.shields.io/badge/Bootstrap-5.2.0-7952B3?logo=bootstrap&logoColor=white)](https://getbootstrap.com)
## Installation & Requirements To install the program it is sufficient to use Python pip and get the package `falocalrepo-server`. ```shell pip install falocalrepo-server ``` Python 3.10 or above is needed to run this program, all other dependencies are handled by pip during installation. For information on how to install Python on your computer, refer to the official website [Python.org](https://www.python.org/). For the program to run, a properly formatted database created by falocalrepo needs to be present in the same folder. The styling is based on the [Boostrap CSS framework](https://getbootstrap.com). _Note:_ When upgrading to a new version the styling may be broken to due to the browser using the old stylesheet in its cache. To fix it, simply delete the browser cache to fetch the new version.f ## Usage ``` falocalrepo-server [--host HOST] [--port PORT] [--ssl-cert SSL_CERT] [--ssl-key SSL_KEY] [--redirect-http REDIRECT_PORT] [--auth :] [--precache] [--no-browser] ``` The server needs one argument pointing at the location of a valid [falocalrepo](https://pypi.org/project/falocalrepo/) database and accepts optional arguments to manually set host, port, and an SSL certificate with key. By default, the server is run on 0.0.0.0:80 for HTTP (without certificate) and 0.0.0.0:443 for HTTPS (with certificate). The `--precache` options can be used to prepare an initial cache of results from the database to speed up searches. When the app has finished loading, it automatically opens a browser window. To avoid this, use the `--no-browser` option. ### Redirect Mode The optional `--redirect-http` argument changes the app mode to redirection. In this mode the app runs a tiny server that redirects all HTTP requests it receives on `http://HOST:PORT` to `https://HOST:REDIRECT_PORT`. _Note:_ In redirect mode the `database` argument is not checked, so a simple `.` is sufficient.
_Note:_ In redirect mode the app does not operate the database portion of the server. To run in redirect and server mode, two separate instances of the program are needed. Once the server is running the web app can be accessed at the address shown in the terminal. ### Authentication The `--auth` option allows setting up a username and password to access the server using the HTTP Basic authentication protocol. ### Arguments | Argument | Default | |-------------------|--------------------------------------------------| | `database` | None, mandatory argument | | `--host` | 0.0.0.0 | | `--port` | 80 if no SSL certificate is given, 443 otherwise | | `--ssl-cert` | None | | `--ssl-key` | None | | `--redirect-http` | None | | `--auth` | None | | `--precache` | False | | `--no-browser` | True | ### Examples ```shell # Launch an HTTP server reachable from other machines using the server's hostname/IP falocalrepo-server ~/FA.db ``` ```shell # Launch a localhost-only server on port 8080 falocalrepo-server ~/FA.db --host 127.0.0.1 --port 8080 ``` ```shell # Launch a redirect server that listens to port 80 and redirects to port 443 on host 0.0.0.0 falocalrepo-server . --host 0.0.0.0 --port 80 --redirect-htpp 443 ``` ```shell # Launch a server with basic authentication using 'mickey' as username and 'mouse' as password falocalrepo-server ~/FA.db --auth mickey:mouse ``` ```shell # Launch an HTTPS server reachable from other machines using the server's hostname/IP falocalrepo-server ~/FA.db --ssl-cert ~/FA.certificates/certificate.crt --ssl-key ~/FA.certificates/private.key ``` ```shell # Launch a localhost-only HTTPS server on port 8443 falocalrepo-server ~/FA.db --host 127.0.0.1 --port 8443 --ssl-cert ~/FA.certificates/certificate.crt --ssl-key ~/FA.certificates/private.key ``` ## Routes _Note:_ All the following paths are meant as paths from `:`. | Route | Destination | |------------------------------------------------|-----------------------------------------------------------------------------------------| | `/` | Show home page with general information regarding the database | | `/search/` | Redirects to `/search/submissions/` | | `/search/submissions/` | Search & browse submissions | | `/search/journals/` | Search & browse journals | | `/search/users/` | Search & browse users | | `/settings/` | Change default search settings | | `/user//` | Show information regarding a specific user | | `/user//icon/` | Redirect to username's icon on Fur Affinity | | `/user//thumbnail/` | Redirect to username's icon on Fur Affinity | | `/gallery//` | Browse & search a user's gallery submissions | | `/scraps//` | Browse & search a user's scraps submissions | | `/submissions//` | Browse & search a user's gallery & scraps submissions | | `/favorites//` | Browse & search a user's favorite submissions | | `/mentions//` | Browse & search the submissions where the user is mentioned | | `/journals//` | Browse & search a user's journals | | `/full//` | Redirect to `/submission//` | | `/view//` | Redirect to `/submission//` | | `/submission//` | View a submission | | `/submission//file/` | Open the first submission file | | `/submission//file//` | Open the nth first submission file | | `/submission//files/` | Download all the submission files as a zip | | `/submission//files/-/` | Download submissions files from index n1 to index n2 (0 indexed inclusive) | | `/submission//thumbnail/` | Open a submission thumbnail (generated for image submissions if no thumbnail is stored) | | `/submission//zip/` | Download a submission's file, description, and metadata as a ZIP archive | | `/journal//` | View a journal | | `/journal//zip/` | Download a journal's content and metadata as a ZIP archive | ### JSON API Routes The following routes return information as JSON responses. They can be reached with `GET` and `POST` requests, the former supports sending body fields as URL parameters. | Route | Destination | Body | |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| | `/json/search/
/` | Perform a search on the database. The query field in the body uses the same [syntax](#query-language) as the query field in the [search page](#browse--search). | `{query?: str, offset?: int, limit?: int, sort?: str, order?: Union["asc", "desc"]}` | | `/json/user/` | Get user metadata and total submissions/journals | None | | `/json/submission/` | Get submission metadata and comments | None | | `/json/journal/` | Get journal metadata and comments | None | ## Pages _Note:_ the images used in the following sections were taken using light mode, but all pages also support dark mode. ### Home The home page displays general information about the database and contains links to browse and search pages for the various tables. The information table displays the total number of submissions, journals, and users together with the version of the database. Clicking on any of the counters open the relevant search & browse page. ### Browse & Search The browse and search pages allow to explore the submissions/journals contained in the database. Searches are performed case-insensitively using a simple syntax in the form `@field term [[| &] term ...]` which allows logic operators, parentheses and start/end of field matching, see [Query Language](#query-language) for details. Search terms for submissions and journals default to the `any` field if none is used, while the `username` field is used for users searches. The controls at the top of the page allow to query the database and control the visualisation of the results.
The _Search_ input allows to insert the search query. The _Field_ menu allows to insert a specific search field using a simple dropdown menu. The _Sort_ and adjacent order menus change the sorting field and order of the search results. Submissions and journals default to descending ID, while users default to ascending username. The _View_ menu allows changing between the (default) grid view to a list (table) view The _Search_ button submits the search request using the current query and sorting settings. The _Browse_ button resets the current search query and reverts to browse mode (all entries). The _FA_ button opens the current search on Fur Affinity, translating the shared search and sorting fields (tags, author, description, and fileurl/fileext). The button is only available when searching submissions. The gear button opens the search settings, the question mark button shows a quick help about the query language. Under the search controls are the number of results and current page.
Under the results numbers are the page controls. _First_ leads to page 1, _Prev_ leads to the previous page, _Next_ leads to the next page, and _Last_ leads to the last page. These controls are also available at the bottom of the page. In grid view, the results are presented using cards containing the same information as the list view, with the addition of thumbnails for submissions. When searching for submissions or journals, clicking on the card footer (containing the date and author) will open the author's page. Submissions with more than one file will display a small counter with the number of files in the upper right corner of the card.
In list view, the results are presented in a table with the most important columns: ID, AUTHOR, DATE, and TITLE ( submissions and journals); USERNAME, FOLDERS, and ACTIVE (users). On small screens some of these columns are shortened or removed.
#### Compatibility with Fur Affinity Search Most Fur Affinity search queries (and links) are fully compatible with the program. Except for the _NOT_ (!) operator, which follows different syntax rules, all Fur Affinity search fields are fully supported: `@lower` (treated as `@author`), `@keywords` (treated as `@tags`), `@message` (treated as `@description`) , `@title` (treated as `@title`), `@filename` (treated as `@fileurl`). #### Query Language The query language used for this server is based on and improves the search syntax currently used by the Fur Affinity website. Its basic elements are: * `@` field specifier (e.g. `@title`), all database columns are available as search fields. See [falocalrepo-database](https://pypi.org/project/falocalrepo-database/) for details on the available columns. * `()` parentheses, they can be used for better logic operations * `&` _AND_ logic operator, used between search terms * `|` _OR_ logic operator, used between search terms * `!` _NOT_ logic operator, used as prefix of search terms * `""` quotes, allow searching for literal strings without needing to escape * `%` match 0 or more characters * `_` match exactly 1 character * `^` start of field, when used at the start of a search term, it matches the beginning of the field * `$` end of field, when used at the end of a search term, it matches the end of the field All other strings are considered search terms. The search uses the `@any` field by default for submissions and journals, allowing to do general searches without specifying a field. The `@any` field does not include the `FAVORITE`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` fields and must be searched manually using the respective query fields. When searching users, `@username` is the default field. Search terms that are not separated by a logic operator are considered _AND_ terms (i.e. `a b c` -> `a & b & c`). Except for the `ID`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` fields, all search terms are searched through the whole content of the various fields: i.e. `@description cat` will match any item whose description field contains "cat". To match items that contain only "cat" (or start with, end with, etc.), the `%`, `_`, `^`, and `$` operators need to be used (e.g. `@description ^cat`). Search terms for `ID`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` are matched exactly as they are: i.e. `@id 1` will match only items whose ID field is exactly equal to "1", to match items that contain "1" the `%`, `_`, `^`, or `$` operators need to be used (e.g. `@id %1%`). ##### Examples Search for journals/submissions containing water and either otter, lutrine, or mustelid, or water and either cat or feline: `water ((otter | lutrine | mustelid) | (cat | feline))` `@any water & ((otter | lutrine | mustelid) | (cat | feline))` Search for journals/submissions containing "cat" or "feline" but neither "mouse" nor "rodent": `(cat | feline) !mouse !rodent` Search for general-rated submissions uploaded by a user whose name starts with "tom" that contain either "volleyball" or "volley" and "ball" separated by one character (e.g. "volley-ball") in any field: `@rating general @author tom% @any (volleyball | volley_ball)` `(volleyball | volley_ball) @rating general @author tom%` Search for journals/submissions uploaded in 2020 except for March: `@date ^2020 !^2020-03` Search for submissions uploaded in March 2021 (meaning the date has to start with `2021-03`) whose tags contain the exact tag "ball": `@date ^2021-03 @tags "|ball|"` `@date ^2021-03 @tags \|ball\|` Search for journals/submissions where a specific user named "tom" is mentioned: `@mentions "|tom|"` `@mentions \|tom\|` Search for submissions whose only favorite is a user named "alex": `@favorite ^\|alex\|$` Search for users whose names contain "mark": `@username %mark%` Search for journals/submissions whose title ends with "100%": `@title 100\%$` Search for journals/submissions whose title is exactly "cat": `@title ^cat$` Search for text submissions with PDF files: `@type text @fileext pdf` ### Search Settings The search settings page allows modifying the sorting, ordering, and viewing option that are applied by default to the various searches. Settings can be saved to the database if it is writable, otherwise they are simply saved for the current session and reset when the program stops. Settings values are saved in the `SETTINGS` table with the `SERVER.SEARCH` setting name. ### User The user page shows information about submissions and journals related to a user (gallery, scraps, favorites, mentions, and journals) and what folders have been set for download. See [falocalrepo](https://pypi.org/project/falocalrepo/) for more details on this. The user's profile will be displayed if present in the database. Clicking on any of the counters opens the relevant results via the search interface, allowing to refine the search further. The _Next_ and _Prev_ buttons move to the respective users in ascending alphabetical order. ### Submission The submission page shows the submission file(s) (if present), the submission metadata, and the description. Image, audio, video, and plain text submission files are displayed directly in the page, others (e.g. PDF files) will display a link to open them. Clicking on image files will enlarge them to fill the width of the screen for easier viewing. Video files can be enlarged by using the zoom button under them. When a submission has two or more files, a toolbar appears below the file section with buttons to switch between the different files, show the files in a grid view, and enlarge non-image files (text, video, etc.).
The metadata table contains clickable links to the user's page (see [User](#user) for details), tags, category, species, gender, rating, folder (gallery/scraps), and to user pages of favouring and mentioned users. The description is displayed as-is except for user icons, which are replaced by `@username` styled links to avoid display errors caused by expired icon links. Under the metadata table are a number of buttons that allow to access the submission file, open its Fur Affinity counterpart, and navigate the other submissions from the author.
The download _File_ button downloads the submission file (if present). If more than one file is present, then the button downloads a zip file containing all submission files. The download _ZIP_ button generates a ZIP file containing the submission file, submission thumbnail, description HTML, and metadata and comments in JSON format. The _FA_ button opens the submission on Fur Affinity The _Next_ and _Prev_ buttons lead to the next more recent and the previous less recent submissions respectively. The _Gallery_, _All_, and _Scraps_ buttons open a search page with the user's gallery submissions, scraps and gallery submissions together, and scraps submissions respectively. To view the currently selected submission file when scrolling down the page, the button in the lower right corner can be used to open the image in a floating overlay that will remain at the top of the page view. The comments to the submission can be found below the description, and can be reached quickly by clicking on the floating comments button that appears in the lower right corner of the screen if the submission has comments. Each comment contains the author (with a link to their user page), post date, and links to the comment itself and, if the comment is a reply, its parent comments.
The button furthest to the left (arrow pointing up and to the left) links to the first comment in a reply chain. The middle button (bent arrow pointing to the left) links to the previous comment in the reply chain. The link button furthest to the right is a link to that specific comment. ### Journal The journal page shows the journal metadata and content. The metadata table contains clickable links to the user's page (see [User](#user) for details) and to user pages of mentioned users. Under the metadata table are a number of buttons that allow to download the journal, open its Fur Affinity counterpart, and navigate the other journals from the same user.
The download _ZIP_ button generates a ZIP file containing the journal content HTML and metadata and comments in JSON format. The _FA_ button opens the journal on Fur Affinity The _Next_ and _Prev_ buttons lead to the next more recent, and the previous less recent journals respectively. The _All_ button opens a search page with all the user's journals. The comments to the journal can be found below the journal text, and can be reached quickly by clicking on the floating comments button that appears in the lower right corner of the screen if the journal has comments. Each comment contains the author (with a link to their user page), post date, and links to the comment itself and, if the comment is a reply, its parent comments.
The button furthest to the left (arrow pointing up and to the left) links to the first comment in a reply chain. The middle button (bent arrow pointing to the left) links to the previous comment in the reply chain. The link button furthest to the right is a link to that specific comment. ### BBCode When the database is in BBCode mode a new buttons appears along submission descriptions, journal contents, and user profiles to switch between the rendered HTML and the BBCode stored in the database.
_Note:_ the BBCode to HTML conversion is still a work in progress and some content may be rendered incorrectly; please open an [issue](https://github.com/FurryCoders/falocalrepo-server/issues) if you encounter any error :) %package help Summary: Development documents and examples for falocalrepo-server Provides: python3-falocalrepo-server-doc %description help
logo # FALocalRepo-Server Web interface for [falocalrepo](https://pypi.org/project/falocalrepo/). [![](https://img.shields.io/github/v/tag/FurryCoders/falocalrepo-server?label=github&sort=date&logo=github&color=blue)](https://github.com/FurryCoders/falocalrepo-server) [![](https://img.shields.io/pypi/v/falocalrepo-server?logo=pypi)](https://pypi.org/project/falocalrepo-server/) [![](https://img.shields.io/pypi/pyversions/falocalrepo-server?logo=Python)](https://www.python.org) [![](https://img.shields.io/badge/Bootstrap-5.2.0-7952B3?logo=bootstrap&logoColor=white)](https://getbootstrap.com)
## Installation & Requirements To install the program it is sufficient to use Python pip and get the package `falocalrepo-server`. ```shell pip install falocalrepo-server ``` Python 3.10 or above is needed to run this program, all other dependencies are handled by pip during installation. For information on how to install Python on your computer, refer to the official website [Python.org](https://www.python.org/). For the program to run, a properly formatted database created by falocalrepo needs to be present in the same folder. The styling is based on the [Boostrap CSS framework](https://getbootstrap.com). _Note:_ When upgrading to a new version the styling may be broken to due to the browser using the old stylesheet in its cache. To fix it, simply delete the browser cache to fetch the new version.f ## Usage ``` falocalrepo-server [--host HOST] [--port PORT] [--ssl-cert SSL_CERT] [--ssl-key SSL_KEY] [--redirect-http REDIRECT_PORT] [--auth :] [--precache] [--no-browser] ``` The server needs one argument pointing at the location of a valid [falocalrepo](https://pypi.org/project/falocalrepo/) database and accepts optional arguments to manually set host, port, and an SSL certificate with key. By default, the server is run on 0.0.0.0:80 for HTTP (without certificate) and 0.0.0.0:443 for HTTPS (with certificate). The `--precache` options can be used to prepare an initial cache of results from the database to speed up searches. When the app has finished loading, it automatically opens a browser window. To avoid this, use the `--no-browser` option. ### Redirect Mode The optional `--redirect-http` argument changes the app mode to redirection. In this mode the app runs a tiny server that redirects all HTTP requests it receives on `http://HOST:PORT` to `https://HOST:REDIRECT_PORT`. _Note:_ In redirect mode the `database` argument is not checked, so a simple `.` is sufficient.
_Note:_ In redirect mode the app does not operate the database portion of the server. To run in redirect and server mode, two separate instances of the program are needed. Once the server is running the web app can be accessed at the address shown in the terminal. ### Authentication The `--auth` option allows setting up a username and password to access the server using the HTTP Basic authentication protocol. ### Arguments | Argument | Default | |-------------------|--------------------------------------------------| | `database` | None, mandatory argument | | `--host` | 0.0.0.0 | | `--port` | 80 if no SSL certificate is given, 443 otherwise | | `--ssl-cert` | None | | `--ssl-key` | None | | `--redirect-http` | None | | `--auth` | None | | `--precache` | False | | `--no-browser` | True | ### Examples ```shell # Launch an HTTP server reachable from other machines using the server's hostname/IP falocalrepo-server ~/FA.db ``` ```shell # Launch a localhost-only server on port 8080 falocalrepo-server ~/FA.db --host 127.0.0.1 --port 8080 ``` ```shell # Launch a redirect server that listens to port 80 and redirects to port 443 on host 0.0.0.0 falocalrepo-server . --host 0.0.0.0 --port 80 --redirect-htpp 443 ``` ```shell # Launch a server with basic authentication using 'mickey' as username and 'mouse' as password falocalrepo-server ~/FA.db --auth mickey:mouse ``` ```shell # Launch an HTTPS server reachable from other machines using the server's hostname/IP falocalrepo-server ~/FA.db --ssl-cert ~/FA.certificates/certificate.crt --ssl-key ~/FA.certificates/private.key ``` ```shell # Launch a localhost-only HTTPS server on port 8443 falocalrepo-server ~/FA.db --host 127.0.0.1 --port 8443 --ssl-cert ~/FA.certificates/certificate.crt --ssl-key ~/FA.certificates/private.key ``` ## Routes _Note:_ All the following paths are meant as paths from `:`. | Route | Destination | |------------------------------------------------|-----------------------------------------------------------------------------------------| | `/` | Show home page with general information regarding the database | | `/search/` | Redirects to `/search/submissions/` | | `/search/submissions/` | Search & browse submissions | | `/search/journals/` | Search & browse journals | | `/search/users/` | Search & browse users | | `/settings/` | Change default search settings | | `/user//` | Show information regarding a specific user | | `/user//icon/` | Redirect to username's icon on Fur Affinity | | `/user//thumbnail/` | Redirect to username's icon on Fur Affinity | | `/gallery//` | Browse & search a user's gallery submissions | | `/scraps//` | Browse & search a user's scraps submissions | | `/submissions//` | Browse & search a user's gallery & scraps submissions | | `/favorites//` | Browse & search a user's favorite submissions | | `/mentions//` | Browse & search the submissions where the user is mentioned | | `/journals//` | Browse & search a user's journals | | `/full//` | Redirect to `/submission//` | | `/view//` | Redirect to `/submission//` | | `/submission//` | View a submission | | `/submission//file/` | Open the first submission file | | `/submission//file//` | Open the nth first submission file | | `/submission//files/` | Download all the submission files as a zip | | `/submission//files/-/` | Download submissions files from index n1 to index n2 (0 indexed inclusive) | | `/submission//thumbnail/` | Open a submission thumbnail (generated for image submissions if no thumbnail is stored) | | `/submission//zip/` | Download a submission's file, description, and metadata as a ZIP archive | | `/journal//` | View a journal | | `/journal//zip/` | Download a journal's content and metadata as a ZIP archive | ### JSON API Routes The following routes return information as JSON responses. They can be reached with `GET` and `POST` requests, the former supports sending body fields as URL parameters. | Route | Destination | Body | |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| | `/json/search/
/` | Perform a search on the database. The query field in the body uses the same [syntax](#query-language) as the query field in the [search page](#browse--search). | `{query?: str, offset?: int, limit?: int, sort?: str, order?: Union["asc", "desc"]}` | | `/json/user/` | Get user metadata and total submissions/journals | None | | `/json/submission/` | Get submission metadata and comments | None | | `/json/journal/` | Get journal metadata and comments | None | ## Pages _Note:_ the images used in the following sections were taken using light mode, but all pages also support dark mode. ### Home The home page displays general information about the database and contains links to browse and search pages for the various tables. The information table displays the total number of submissions, journals, and users together with the version of the database. Clicking on any of the counters open the relevant search & browse page. ### Browse & Search The browse and search pages allow to explore the submissions/journals contained in the database. Searches are performed case-insensitively using a simple syntax in the form `@field term [[| &] term ...]` which allows logic operators, parentheses and start/end of field matching, see [Query Language](#query-language) for details. Search terms for submissions and journals default to the `any` field if none is used, while the `username` field is used for users searches. The controls at the top of the page allow to query the database and control the visualisation of the results.
The _Search_ input allows to insert the search query. The _Field_ menu allows to insert a specific search field using a simple dropdown menu. The _Sort_ and adjacent order menus change the sorting field and order of the search results. Submissions and journals default to descending ID, while users default to ascending username. The _View_ menu allows changing between the (default) grid view to a list (table) view The _Search_ button submits the search request using the current query and sorting settings. The _Browse_ button resets the current search query and reverts to browse mode (all entries). The _FA_ button opens the current search on Fur Affinity, translating the shared search and sorting fields (tags, author, description, and fileurl/fileext). The button is only available when searching submissions. The gear button opens the search settings, the question mark button shows a quick help about the query language. Under the search controls are the number of results and current page.
Under the results numbers are the page controls. _First_ leads to page 1, _Prev_ leads to the previous page, _Next_ leads to the next page, and _Last_ leads to the last page. These controls are also available at the bottom of the page. In grid view, the results are presented using cards containing the same information as the list view, with the addition of thumbnails for submissions. When searching for submissions or journals, clicking on the card footer (containing the date and author) will open the author's page. Submissions with more than one file will display a small counter with the number of files in the upper right corner of the card.
In list view, the results are presented in a table with the most important columns: ID, AUTHOR, DATE, and TITLE ( submissions and journals); USERNAME, FOLDERS, and ACTIVE (users). On small screens some of these columns are shortened or removed.
#### Compatibility with Fur Affinity Search Most Fur Affinity search queries (and links) are fully compatible with the program. Except for the _NOT_ (!) operator, which follows different syntax rules, all Fur Affinity search fields are fully supported: `@lower` (treated as `@author`), `@keywords` (treated as `@tags`), `@message` (treated as `@description`) , `@title` (treated as `@title`), `@filename` (treated as `@fileurl`). #### Query Language The query language used for this server is based on and improves the search syntax currently used by the Fur Affinity website. Its basic elements are: * `@` field specifier (e.g. `@title`), all database columns are available as search fields. See [falocalrepo-database](https://pypi.org/project/falocalrepo-database/) for details on the available columns. * `()` parentheses, they can be used for better logic operations * `&` _AND_ logic operator, used between search terms * `|` _OR_ logic operator, used between search terms * `!` _NOT_ logic operator, used as prefix of search terms * `""` quotes, allow searching for literal strings without needing to escape * `%` match 0 or more characters * `_` match exactly 1 character * `^` start of field, when used at the start of a search term, it matches the beginning of the field * `$` end of field, when used at the end of a search term, it matches the end of the field All other strings are considered search terms. The search uses the `@any` field by default for submissions and journals, allowing to do general searches without specifying a field. The `@any` field does not include the `FAVORITE`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` fields and must be searched manually using the respective query fields. When searching users, `@username` is the default field. Search terms that are not separated by a logic operator are considered _AND_ terms (i.e. `a b c` -> `a & b & c`). Except for the `ID`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` fields, all search terms are searched through the whole content of the various fields: i.e. `@description cat` will match any item whose description field contains "cat". To match items that contain only "cat" (or start with, end with, etc.), the `%`, `_`, `^`, and `$` operators need to be used (e.g. `@description ^cat`). Search terms for `ID`, `FILESAVED`, `USERUPDATE`, and `ACTIVE` are matched exactly as they are: i.e. `@id 1` will match only items whose ID field is exactly equal to "1", to match items that contain "1" the `%`, `_`, `^`, or `$` operators need to be used (e.g. `@id %1%`). ##### Examples Search for journals/submissions containing water and either otter, lutrine, or mustelid, or water and either cat or feline: `water ((otter | lutrine | mustelid) | (cat | feline))` `@any water & ((otter | lutrine | mustelid) | (cat | feline))` Search for journals/submissions containing "cat" or "feline" but neither "mouse" nor "rodent": `(cat | feline) !mouse !rodent` Search for general-rated submissions uploaded by a user whose name starts with "tom" that contain either "volleyball" or "volley" and "ball" separated by one character (e.g. "volley-ball") in any field: `@rating general @author tom% @any (volleyball | volley_ball)` `(volleyball | volley_ball) @rating general @author tom%` Search for journals/submissions uploaded in 2020 except for March: `@date ^2020 !^2020-03` Search for submissions uploaded in March 2021 (meaning the date has to start with `2021-03`) whose tags contain the exact tag "ball": `@date ^2021-03 @tags "|ball|"` `@date ^2021-03 @tags \|ball\|` Search for journals/submissions where a specific user named "tom" is mentioned: `@mentions "|tom|"` `@mentions \|tom\|` Search for submissions whose only favorite is a user named "alex": `@favorite ^\|alex\|$` Search for users whose names contain "mark": `@username %mark%` Search for journals/submissions whose title ends with "100%": `@title 100\%$` Search for journals/submissions whose title is exactly "cat": `@title ^cat$` Search for text submissions with PDF files: `@type text @fileext pdf` ### Search Settings The search settings page allows modifying the sorting, ordering, and viewing option that are applied by default to the various searches. Settings can be saved to the database if it is writable, otherwise they are simply saved for the current session and reset when the program stops. Settings values are saved in the `SETTINGS` table with the `SERVER.SEARCH` setting name. ### User The user page shows information about submissions and journals related to a user (gallery, scraps, favorites, mentions, and journals) and what folders have been set for download. See [falocalrepo](https://pypi.org/project/falocalrepo/) for more details on this. The user's profile will be displayed if present in the database. Clicking on any of the counters opens the relevant results via the search interface, allowing to refine the search further. The _Next_ and _Prev_ buttons move to the respective users in ascending alphabetical order. ### Submission The submission page shows the submission file(s) (if present), the submission metadata, and the description. Image, audio, video, and plain text submission files are displayed directly in the page, others (e.g. PDF files) will display a link to open them. Clicking on image files will enlarge them to fill the width of the screen for easier viewing. Video files can be enlarged by using the zoom button under them. When a submission has two or more files, a toolbar appears below the file section with buttons to switch between the different files, show the files in a grid view, and enlarge non-image files (text, video, etc.).
The metadata table contains clickable links to the user's page (see [User](#user) for details), tags, category, species, gender, rating, folder (gallery/scraps), and to user pages of favouring and mentioned users. The description is displayed as-is except for user icons, which are replaced by `@username` styled links to avoid display errors caused by expired icon links. Under the metadata table are a number of buttons that allow to access the submission file, open its Fur Affinity counterpart, and navigate the other submissions from the author.
The download _File_ button downloads the submission file (if present). If more than one file is present, then the button downloads a zip file containing all submission files. The download _ZIP_ button generates a ZIP file containing the submission file, submission thumbnail, description HTML, and metadata and comments in JSON format. The _FA_ button opens the submission on Fur Affinity The _Next_ and _Prev_ buttons lead to the next more recent and the previous less recent submissions respectively. The _Gallery_, _All_, and _Scraps_ buttons open a search page with the user's gallery submissions, scraps and gallery submissions together, and scraps submissions respectively. To view the currently selected submission file when scrolling down the page, the button in the lower right corner can be used to open the image in a floating overlay that will remain at the top of the page view. The comments to the submission can be found below the description, and can be reached quickly by clicking on the floating comments button that appears in the lower right corner of the screen if the submission has comments. Each comment contains the author (with a link to their user page), post date, and links to the comment itself and, if the comment is a reply, its parent comments.
The button furthest to the left (arrow pointing up and to the left) links to the first comment in a reply chain. The middle button (bent arrow pointing to the left) links to the previous comment in the reply chain. The link button furthest to the right is a link to that specific comment. ### Journal The journal page shows the journal metadata and content. The metadata table contains clickable links to the user's page (see [User](#user) for details) and to user pages of mentioned users. Under the metadata table are a number of buttons that allow to download the journal, open its Fur Affinity counterpart, and navigate the other journals from the same user.
The download _ZIP_ button generates a ZIP file containing the journal content HTML and metadata and comments in JSON format. The _FA_ button opens the journal on Fur Affinity The _Next_ and _Prev_ buttons lead to the next more recent, and the previous less recent journals respectively. The _All_ button opens a search page with all the user's journals. The comments to the journal can be found below the journal text, and can be reached quickly by clicking on the floating comments button that appears in the lower right corner of the screen if the journal has comments. Each comment contains the author (with a link to their user page), post date, and links to the comment itself and, if the comment is a reply, its parent comments.
The button furthest to the left (arrow pointing up and to the left) links to the first comment in a reply chain. The middle button (bent arrow pointing to the left) links to the previous comment in the reply chain. The link button furthest to the right is a link to that specific comment. ### BBCode When the database is in BBCode mode a new buttons appears along submission descriptions, journal contents, and user profiles to switch between the rendered HTML and the BBCode stored in the database.
_Note:_ the BBCode to HTML conversion is still a work in progress and some content may be rendered incorrectly; please open an [issue](https://github.com/FurryCoders/falocalrepo-server/issues) if you encounter any error :) %prep %autosetup -n falocalrepo-server-3.3.3 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-falocalrepo-server -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri May 05 2023 Python_Bot - 3.3.3-1 - Package Spec generated