Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
156 changes: 78 additions & 78 deletions classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,169 +2,169 @@
===================

[autogenerated]

### [./lib/api/archives/zip.p](./lib/api/archives/zip.p)
* pfZipArchiver
* pfZipArchiver <- pfClass

### [./lib/api/mobile/sms/zagruzka.p](./lib/api/mobile/sms/zagruzka.p)
* pfZagruzkaSMSGate
* pfZagruzkaSMSGate <- pfClass

### [./lib/api/office/excel.p](./lib/api/office/excel.p)
* pfTableToXLS
* pfTableToXLS <- pfClass

### [./lib/api/pdf/pdfkit.p](./lib/api/pdf/pdfkit.p)
* pfPDFKit
* pfPDFKit <- pfClass

### [./lib/api/qiwi/wallet.p](./lib/api/qiwi/wallet.p)
* pfQiwiWallet
* pfQiwiWallet <- pfClass

### [./lib/api/telegram/telegram.p](./lib/api/telegram/telegram.p)
* pfTelegramBotAPI
* pfTelegramBotAPI <- pfClass

### [./lib/api/yandex/speechkit.p](./lib/api/yandex/speechkit.p)
* pfYandexSpeechKit
* pfYandexSpeechKit <- pfClass

### [./lib/common.p](./lib/common.p)
* pfClass
* pfMixin
* pfHashMixin
* pfMixin <- pfClass
* pfHashMixin <- pfMixin
* pfChainMixin
* pfAssert
* pfString
* pfValidate
* pfCFile
* pfRuntime
* pfOS
* pfRetry
* pfRetry <- pfClass

### [./lib/console/commands/generate.p](./lib/console/commands/generate.p)
* pfConsoleGenerateCommand
* pfConsoleGenerateCommand <- pfConsoleCommandWithSubcommands

### [./lib/console/commands/mysql.p](./lib/console/commands/mysql.p)
* pfMySQLCommand
* pfMySQLCommand <- pfConsoleCommandWithSubcommands

### [./lib/console/commands/pgsql.p](./lib/console/commands/pgsql.p)
* pfPgSQLCommand
* pfPgSQLCommand <- pfConsoleCommandWithSubcommands

### [./lib/console/console_app.p](./lib/console/console_app.p)
* pfConsoleApp
* pfConsoleApp <- pfClass
* pfConsoleAppStdout
* pfConsoleCommand
* pfConsoleCommandWithSubcommands
* pfConsoleCommand <- pfClass
* pfConsoleCommandWithSubcommands <- pfConsoleCommand

### [./lib/debug/unhandled_exception.p](./lib/debug/unhandled_exception.p)
* pfUnhandledExceptionDebug

### [./lib/locks/pg_locks.p](./lib/locks/pg_locks.p)
* pfPGLocksManager
* pfPGLocksManager <- pfClass

### [./lib/net/curl_file.p](./lib/net/curl_file.p)
* pfCurlFile

### [./lib/security/sql_security.p](./lib/security/sql_security.p)
* pfSQLSecurityCrypt
* pfSQLSecurityCrypt <- pfClass

### [./lib/sql/connection.p](./lib/sql/connection.p)
* pfSQLConnection
* pfSQLAnsiDialect
* pfSQLPostgresDialect
* pfSQLMySQLDialect
* pfSQLSQLiteDialect
* pfSQLConnection <- pfClass
* pfSQLAnsiDialect <- pfClass
* pfSQLPostgresDialect <- pfSQLAnsiDialect
* pfSQLMySQLDialect <- pfSQLAnsiDialect
* pfSQLSQLiteDialect <- pfSQLAnsiDialect

### [./lib/sql/models/generators/model_form_generators.p](./lib/sql/models/generators/model_form_generators.p)
* pfTableFormGenerator
* pfTableFormGeneratorBootstrap2Widgets
* pfTableFormGeneratorBootstrap3Widgets
* pfTableFormGeneratorBootstrap4HorizontalWidgets
* pfTableFormGeneratorBootstrap4VerticalWidgets
* pfTableFormGeneratorSemanticUIWidgets
* pfTableFormGenerator <- pfClass
* pfTableFormGeneratorBootstrap2Widgets <- pfClass
* pfTableFormGeneratorBootstrap3Widgets <- pfClass
* pfTableFormGeneratorBootstrap4HorizontalWidgets <- pfClass
* pfTableFormGeneratorBootstrap4VerticalWidgets <- pfClass
* pfTableFormGeneratorSemanticUIWidgets <- pfClass

### [./lib/sql/models/generators/sql_table_generators.p](./lib/sql/models/generators/sql_table_generators.p)
* pfSQLModelGenerator
* pfMySQLTableModelGenerator
* pfPostgresTableModelGenerator
* pfSQLModelGenerator <- pfClass
* pfMySQLTableModelGenerator <- pfSQLModelGenerator
* pfPostgresTableModelGenerator <- pfSQLModelGenerator

### [./lib/sql/models/generics/queue/sql_queue.p](./lib/sql/models/generics/queue/sql_queue.p)
* pfSQLQueue
* pfSQLQueue <- pfSQLTable

### [./lib/sql/models/generics/settings/sql_settings.p](./lib/sql/models/generics/settings/sql_settings.p)
* pfSQLSettings
* pfSQLSettings <- pfClass

### [./lib/sql/models/generics/tagging/sql_tagging.p](./lib/sql/models/generics/tagging/sql_tagging.p)
* pfTagging
* pfSQLCTTagsModel
* pfSQLCTContentModel
* pfSQLCTCountersModel
* pfTagging <- pfClass
* pfSQLCTTagsModel <- pfSQLTable
* pfSQLCTContentModel <- pfSQLTable
* pfSQLCTCountersModel <- pfSQLTable

### [./lib/sql/models/sql_table.p](./lib/sql/models/sql_table.p)
* pfSQLTable
* pfSQLTable <- pfClass
* pfSQLTableScope
* pfSQLBuilder
* pfSQLBuilder <- pfClass

### [./lib/sql/models/structs.p](./lib/sql/models/structs.p)
* pfModelModule
* pfModelTable
* pfModelChainMixin
* pfModelModule <- pfClass
* pfModelTable <- pfSQLTable
* pfModelChainMixin <- pfChainMixin

### [./lib/tests/unittest.p](./lib/tests/unittest.p)
* pfUnittestProgram
* pfTestsLoader
* pfTestResult
* pfTestStdoutStream
* pfTextTestResult
* pfTextTestResult <- pfTestResult
* pfTextTestsRunner
* pfTestExceptions
* pfTestCase
* __pfTestCaseNotImplementedSUT

### [./lib/web/auth.p](./lib/web/auth.p)
* pfAuthBase
* pfRemoteUserAuth
* pfUserRolesAuth
* pfUsersModel
* pfUsersPermissions
* pfRolesModel
* pfRolesToUsersModel
* pfAuthBase <- pfMiddleware
* pfRemoteUserAuth <- pfAuthBase
* pfUserRolesAuth <- pfClass
* pfUsersModel <- pfModelTable
* pfUsersPermissions <- pfClass
* pfRolesModel <- pfModelTable
* pfRolesToUsersModel <- pfModelTable

### [./lib/web/controllers.p](./lib/web/controllers.p)
* pfController
* pfRouter
* pfRouterProcessor
* pfRouterDefaultProcessor
* pfRouterRenderProcessor
* pfRouterCallProcessor
* pfRouterRedirectProcessor
* pfController <- pfClass
* pfRouter <- pfClass
* pfRouterProcessor <- pfClass
* pfRouterDefaultProcessor <- pfRouterProcessor
* pfRouterRenderProcessor <- pfRouterProcessor
* pfRouterCallProcessor <- pfRouterProcessor
* pfRouterRedirectProcessor <- pfRouterProcessor
* pfRequest
* pfResponse
* pfResponseRedirect
* pfMiddleware
* pfResponse <- pfClass
* pfResponseRedirect <- pfResponse
* pfMiddleware <- pfClass

### [./lib/web/csrf.p](./lib/web/csrf.p)
* pfCSRFMiddleware
* pfCSRFMiddleware <- pfMiddleware

### [./lib/web/helpers/antiflood.p](./lib/web/helpers/antiflood.p)
* pfAntiFlood
* pfAntiFloodStorage
* pfAntiFloodHashStorage
* pfAntiFloodDBStorage
* pfAntiFlood <- pfClass
* pfAntiFloodStorage <- pfClass
* pfAntiFloodHashStorage <- pfAntiFloodStorage
* pfAntiFloodDBStorage <- pfAntiFloodStorage

### [./lib/web/helpers/cache.p](./lib/web/helpers/cache.p)
* pfCache
* pfCache <- pfClass

### [./lib/web/helpers/scroller.p](./lib/web/helpers/scroller.p)
* pfScroller
* pfScroller <- pfClass
* __AL_Scroller__

### [./lib/web/helpers/translit.p](./lib/web/helpers/translit.p)
* pfURLTranslit
* pfURLTranslit <- pfClass

### [./lib/web/middleware.p](./lib/web/middleware.p)
* pfCommonMiddleware
* pfSessionMiddleware
* pfDebugInfoMiddleware
* pfCommonMiddleware <- pfMiddleware
* pfSessionMiddleware <- pfMiddleware
* pfDebugInfoMiddleware <- pfMiddleware
* pfSecurityMiddleware
* pfRequestIDMiddleware
* pfRequestIDMiddleware <- pfMiddleware

### [./lib/web/templates.p](./lib/web/templates.p)
* pfTemplate
* pfTemplateStorage
* pfTemplateParserWrapper

* pfTemplate <- pfClass
* pfTemplateStorage <- pfClass
* pfTemplateParserWrapper <- pfClass
7 changes: 1 addition & 6 deletions classes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,4 @@ echo "===================" >> $CFILE
echo >> $CFILE
echo "[autogenerated]" >> $CFILE

find ./lib -name "*.p" \
| sort | xargs grep "^@CLASS" -A 1 -H \
| awk '$0 !~ /(--|@CLASS)/{split($0, m, "-"); if(mod != m[1]){printf("\n### [%s](%s)\n", m[1], m[1])} if(substr(m[2], 1, 2) != "__"){print "*", m[2]; mod = m[1]}} END{ printf("\n"); }' \
>>$CFILE


./p3_classes.py ./lib >> $CFILE
86 changes: 86 additions & 0 deletions p3_classes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/usr/bin/env python3

"""
Строить список классов Парсера в формате Маркдаун.
Первым параметром можно передать имя паки от которой ищем *.p-файлы иначе ищем от текущей
"""

import glob
import os
import re
import sys
from dataclasses import (
dataclass,
)

p3_class_re = re.compile(
r"""
^@CLASS.*\n(.+?)\n
(?:^\#.*$|^\s*$)*
(?:
(?:[^@]*?@OPTIONS.*\n(?:(?:locals|partial"dynamic|static)\s*\n)+?)
|
(?:[^@]*?@USE.*\n(?:(?:\S)+\s*\n)+?)
)*
(?:^\#.*$|^\s*$)*
(?:[^@]*?@BASE.*\n(.+?)\n)?
""",
flags=re.MULTILINE | re.VERBOSE,
)


@dataclass
class p3Class:
path: str
name: str
base: str


def fetch_classes_from_file(source_path):
result = []
with open(source_path) as f:
source = f.read()

matches = p3_class_re.findall(source)
for m in matches:
result.append(p3Class(source_path, m[0], m[1]))

return result


def find_classes(root_path, pattern="**/*.p"):
result = []

files = glob.glob(pattern, root_dir=root_path, recursive=True)
files.sort()

for fp in files:
result.extend(fetch_classes_from_file(os.path.join(root_path, fp)))

return result


def print_classes(root_path, classes):
p = None
for c in classes:
if p != c.path:
if p is not None:
print()
print(f"### [{c.path}]({c.path})")
p = c.path

base = f" <- {c.base}" if c.base != "" else ""
print(f"* {c.name}{base}")


def main():
root_path = "./"
if len(sys.argv) > 1:
root_path = sys.argv[1]

classes = find_classes(root_path)
print_classes(root_path, classes)


if __name__ == "__main__":
main()
Loading