From 778a8d852cf4fd18460dece31f89c98e73ebf23f Mon Sep 17 00:00:00 2001 From: William Date: Mon, 25 Jun 2018 11:35:41 -0700 Subject: [PATCH 01/98] docs: update license information in README.md --- .gitignore | 104 +++++++++ LICENSE | 674 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 + 3 files changed, 780 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..894a44c --- /dev/null +++ b/.gitignore @@ -0,0 +1,104 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..62e30d0 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# ProgramVer +An open-source, Python GUI version window to show copyright info and licenses. A Python version of Microsoft's 'winver'. From 94196f8b003c82abacf4f67331c6b6ea037277a1 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 25 Jun 2018 11:36:52 -0700 Subject: [PATCH 02/98] docs(program): add versioning window for ProgramVer --- ProgramVer.py | 41 +++++++++++++++++++++++++++++++++++++ dfdlogo.gif | Bin 0 -> 7892 bytes pythonpoweredlengthgif.gif | Bin 0 -> 3300 bytes 3 files changed, 41 insertions(+) create mode 100644 ProgramVer.py create mode 100644 dfdlogo.gif create mode 100644 pythonpoweredlengthgif.gif diff --git a/ProgramVer.py b/ProgramVer.py new file mode 100644 index 0000000..9c6b87b --- /dev/null +++ b/ProgramVer.py @@ -0,0 +1,41 @@ +# This is the standard program use by DFD Co. for versioning their products. +# Copyright (C) 2017 - 2018 Dog Face Development Co. + +# Import Statements +from tkinter import * +window = Tk() + +# Window Elements +window.title('Copyright & Version Info for ProgramVer') #change name based on program name +window.configure(bg='white') + +# UI Elements +dfdimage = PhotoImage(file='dfdlogo.gif') +pythonimage = PhotoImage(file='pythonpoweredlengthgif.gif') +dfdlogo = Label(window, bg='white', image = dfdimage) +pythonpowered = Label(window, bg='white', image = pythonimage) +info = Label(window, bg='white', text='ProgramVer \n Version: BETA 0.0.1 (Build 1001)') #change respectively +trademarks = Label(window, bg='white', text='Copyright (C) 2017 - 2018 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') +licenseblurb = Label(window, bg='white', text="""\n ProgramVer - Version window for DFD Co.'s programs + Copyright (C) 2017-2018 Dog Face Development Company + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, version 3 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details.""") #change as needed +licensebtn = Button(window, text='Open License', command=exit) + +# Pack Statements +dfdlogo.pack(side=TOP) +info.pack(side=TOP) +trademarks.pack(side=TOP) +licenseblurb.pack(side=TOP) +licensebtn.pack(side=TOP) +pythonpowered.pack(side=BOTTOM) + +# Maintain Window +window.mainloop() diff --git a/dfdlogo.gif b/dfdlogo.gif new file mode 100644 index 0000000000000000000000000000000000000000..8960f7d6c2309610a5b436d1643f866a5381f87e GIT binary patch literal 7892 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 H1!3zYov%=fm^!+U-f($+-y7fNua`W@hH#;Na}+ z3>f$Wlpw$&1h5VV><^(FIoO?tRa{~>xgOo@k)XdP)zB~1eE$#j2hO{@yZiX~?BBmX zA|fItCg#|&W2vdBXU?2Kx-^j9El95}(r1henjnv?kYQ_Nz#bWPKt`Mqg#+@;1$p9z zjCmmAzR1fx$kQNXA^@2QM#c{ylZTP1BgphI2JFJEoNJD3o^y1jF{jWbrjQbS-SWsa)1x=H z#g%{eeX(O)iDN?9zmm(~NXceSgtB3svJ)?(ql#LaXGBxmwb}0>`lEIcq%_Qz4*Y{Ywqdwhq%|H1m(L0clKq;f^s{< zavvPYlpM*fi_fh|zFeDnMVczEJ9)MKOi@!tN%N8X&T}QQqlNOL*LqWK^q#I9$*5BZ z1cFPKF6HOvmzI|DN?U|wZMl_quhewp)!r{`>?&>kv8JY`p`oF@y}hfe3wgyyUgaQ* zLS+6DvebZlZa|jrA%AxXr9;{vvGL-aKGKpLOX;>Z{lvVt60XFt7W3^WH=aRmQn;C4a8o09gG*54L z+uNQXf@#U}l;z%18?Th{l6v>u*BtVh&1E!idShN(}HrL18ZT0(wi zxe}IPx#2&XDt;;i2-f0V>-Zl4Fk@FBgHIWx_|PvN4A``ulK(h%k4eB@)WOvOa}q>m z*q{T*J?7Y&N(ue^K{ALv$5!OpN?HCO4)kSnFa-Ga$PZeSXBRN2b%w%_0C7P+rKlrM zljYB0!X74|UXuL&q<~9MV!xqN8z}x*LX(%m+M=AoI4RjpHDUN(HG@-NH3uFr_WP#` z7qN!LgPzW-ip^K(x0RT%m#h}Ub@yXdGAOle(fQ9jEMUu!iK0V{Y?g##B+ywjySR-g zG%wT+iyAV!5foQ%CK)HZ3q@jrnFOYrW)&kiZm2pR&8V-AET@{Hl`AAr{ox zQXkcsSDSnvh&fi$bvLuzOD)>4ug^dEYNUT z7Q1)sEI6=DZQ(tgNsNxz60go#w|B$o#!Gm38*7I+#(B~Mvj)_}yjkPuu!*?I^GTFH zme?VZHc!R<>A%&9#ldQYu^HIVpmk|x;BH|PM#lI`T~^W;l2MR;k_@y}TJaGZ=x;PO zHDcdb^b`@w!eA_c`7Md@;?ql5e{b~T{%1bNev5fsgMitT^UknsJVZHY!`ydDpO8tSrQ#suZvd%b7J%IVp2t)A~>=4ZJy zD7#oeTe^JCRc!F&5Br=SQH<<_DXz{HUYq88$ zSD(XD+{jLSJoS8QSd6uitK1U3LeEK@WpJkcojY426*))o*-W+jk|xsop#mG$6rxoZDm=l%hn zCb{pN+V6tiKVHBtCCR+N5}|Drov$IC#hBB0-XZCHVYf!*>`yW4UkAr>|FSo{2}i9- zWoYxu0M?Rb;T`tiS@Dh88oO6IoBQ#6Rc2+aW^zBU?V~u@nZpa>@@;iEsC<;8lxZUm z7|01q^K(E`1r1C;2G^gCNtZVAbq{gxdruW zSmo~YkP6}#=^2j(=8DwI6&EbS(Xh;DFr;>9f2&!jJmSJ|V5|P^CR1@e&i1l08(Ji?Qe%TU@tSHjXAjUq`|x zpR~tlC-L08E4Y}nIaOsE{Y=J~GMYN8s!j&dGVHQIxEjPJ_0xp_p0~~gqE=C0lM_s^ z>cN+O>DR_lG4?Q9O=~-s)XfGkdXoFZ`iVa<5Dr`??lW|9TPT~34 zsJ=-pA(@`NiF-IwF$ctrvAi=o12v?*##kDf(VYbBlTHCTS*d6YAAlesF_H_QF)2A1 zhyuDpwj69AV5iv!UY~3uv$nqH9jpX))QG%wj|CRyOtk)67!T1b@=!7!nMdm>*_y=V zJM;i30{VJ}9mW@$2XyTPm8X*d!_GO?_@rb*mP;0&Gz+Hm+$|oRRq@p$!$USeid|)( zrf9Odqt-|%c;pxLspg+!yFY-ETmY|Gtupu(Ypx0?N6PMN;pnGPN3?U$Wfd?F`tOtG zMWMxVCVmxVVzlj}-@2O`uA`m40ky_6rcd7HB-BH$3Z9zO8e>+%0&AVb?7CvG-;~84 zvc?^(P6vzB)~!_O6N1p0=|tLK`%VVTC~!75H#u==&noD(&eyVpBOjk};qX-FfXuCY za54cfC`bd3bDM3axPVjAi`g7kQHu&6XxELN{e6pwyw;gl^z3D;Rm2KCehgHPcQL{( zJ+OskfS(rds@RmClfh8Z#lPGP(SheKWvK#9^1o3WcMugJ##D!sQ)eG~9$}*%xdzu5 z(K>CnE5H%Yw*chdqYcRcv}Q0lmdw@j&HJNTqZ+tj`uTZAz!66Dyb6XYq(ks&{@QD` zal1V!w5vztzv6t^(3*Rl#!k7DtJlWc1>=AO4Qx Date: Mon, 25 Jun 2018 11:39:28 -0700 Subject: [PATCH 03/98] docs: Update copyright info and licenses in README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 62e30d0..144f651 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ # ProgramVer An open-source, Python GUI version window to show copyright info and licenses. A Python version of Microsoft's 'winver'. + +You can edit the code to suit your needs and can also change the logo on top. + +`dfdlogo.gif` is Copyright © 2018 Dog Face Development Co. +`pythonpoweredlength.gif` is Copyright © the Python Software Foundation. From 328160f306b2dc903ecd8a0734171f81d1152697 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 9 Jul 2018 09:34:19 -0700 Subject: [PATCH 04/98] docs(EULA.txt): added EULA agreement and privacy policy to the program version file --- EULA.txt | 21 ++ LICENSE.txt | 620 ++++++++++++++++++++++++++++++++++++++++++++++++++ ProgramVer.py | 90 ++++---- 3 files changed, 690 insertions(+), 41 deletions(-) create mode 100644 EULA.txt create mode 100644 LICENSE.txt diff --git a/EULA.txt b/EULA.txt new file mode 100644 index 0000000..0e80a0e --- /dev/null +++ b/EULA.txt @@ -0,0 +1,21 @@ +EULA (End User License Agreement) +================================= +By downloading ProgramVer or another application by Dog Face Development Co. (the Software), you agree to the EULA, it's Terms & Conditions, and it's Privacy Policy. This document is an agreement between Dog Face Development Co. (the Company) and you (the User). +Source code can be found here (hosted on Github): https://github.com/Dog-Face-Development/ProgramVer + +TERMS AND CONDITIONS: +These terms apply to any piece of software developed or produced by the Company. +This software (and its code) is released as open-source under the GNU General Public License Version 3.0; the Assets (GUI, Textures, Music, etc.) are released under the Creative Commons Attrubution 4.0 License (the Licenses). You must agree to the Licenses in order to use or download the software. You can view all of the Licenses under their respective names in the repository or on the Software's website. +The Companys are NOT responsible for any damage that is caused to you or your computer because of using the software. This software is still in BETA, so unknown things and bugs may occur. This software has NO warranty. We assume NO liability for damages. In no event shall the Companys be liable to you for any consequential, special, incidental or indirect damages of any kind arising out of the performance or use of the software, even if the Companys had been advised of the possibility of such damages. In no event will the Company's liability for any claim, whether in contract, tort or any other theory of liability, exceed the license fee paid by you, if any. +The Companys reserve ALL rights. The Software may be terminated, or discontinued at ANY time WITHOUT notice. NOT ALL features of the Software are avalible in all places and in all languages. Some features may require an Internet Connection. +Exact copies of the software are not permitted. Changing the name and then copying all the other files is also not permitted. If you change the code and then redistribute the game or use some of the games code you must include all of the Licenses (GNU General Public License 4.0, EULA (End User License Agreement), and the MIT License and the Creative Commons Attribution (if copying the assets) and this EULA with the game package. +The Companys are NOT associated with GitHub, except for the fact that they host their source code and websites there. GitHub has no influence over the source code of ProgramVer and is not responsible for it, nor will GitHub be held liable to any damadge caused to the User or the User's computer or device the code is running on. + + +PRIVACY POLICY: +Dog Face Development Co. (the Company) does not want anything to do with your personal information. ProgramVer has no tracking devices in the software. If you would like to make sure you can check out the source code on GitHub. +The Company is NOT responsible for any tracking of personal inforamation that is done by Python, or the Python Modules that we use. +If you have any questions regarding privacy or the Privacy Policy please contact us via the contact form on our website. + + +(C) 2016 - 2018 Dog Face Development Co. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..c7230e1 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,620 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +hen you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +onditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +ontain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +therwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +nder version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +he GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +ption of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +NU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS diff --git a/ProgramVer.py b/ProgramVer.py index 9c6b87b..e2bd4a0 100644 --- a/ProgramVer.py +++ b/ProgramVer.py @@ -1,41 +1,49 @@ -# This is the standard program use by DFD Co. for versioning their products. -# Copyright (C) 2017 - 2018 Dog Face Development Co. - -# Import Statements -from tkinter import * -window = Tk() - -# Window Elements -window.title('Copyright & Version Info for ProgramVer') #change name based on program name -window.configure(bg='white') - -# UI Elements -dfdimage = PhotoImage(file='dfdlogo.gif') -pythonimage = PhotoImage(file='pythonpoweredlengthgif.gif') -dfdlogo = Label(window, bg='white', image = dfdimage) -pythonpowered = Label(window, bg='white', image = pythonimage) -info = Label(window, bg='white', text='ProgramVer \n Version: BETA 0.0.1 (Build 1001)') #change respectively -trademarks = Label(window, bg='white', text='Copyright (C) 2017 - 2018 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') -licenseblurb = Label(window, bg='white', text="""\n ProgramVer - Version window for DFD Co.'s programs - Copyright (C) 2017-2018 Dog Face Development Company - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 3 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details.""") #change as needed -licensebtn = Button(window, text='Open License', command=exit) - -# Pack Statements -dfdlogo.pack(side=TOP) -info.pack(side=TOP) -trademarks.pack(side=TOP) -licenseblurb.pack(side=TOP) -licensebtn.pack(side=TOP) -pythonpowered.pack(side=BOTTOM) - -# Maintain Window -window.mainloop() +# This is the standard program used by Dog Face Development Co. for versioning their products. +# Copyright (C) 2017 - 2018 Dog Face Development Co. + +# Import Statements +from tkinter import * +import os + +# Document Functions +def openLicense(): + os.startfile("LICENSE.txt") #change file address as needed + +def openEULA(): + os.startfile("EULA.txt") #change file address as needed + +# ProgramVer Function +def ProgramVer(): + window = Tk() + # Window Elements + window.title('Copyright & Version Info for ProgramVer') #change name based on program name + # UI Elements + dfdimage = PhotoImage(file='dfdlogo.gif') + pythonimage = PhotoImage(file='pythonpoweredlengthgif.gif') + dfdlogo = Label(window, image = dfdimage) + pythonpowered = Label(window, image = pythonimage) + info = Label(window, text='ProgramVer \n Version: BETA 1.0.0 (Build 1080)') #change respectively + trademarks = Label(window, text='Copyright (C) 2017 - 2018 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed + licenseblurb = Label(window, text="""\n ProgramVer - Version window for DFD Co.'s programs + Copyright (C) 2017-2018 Dog Face Development Company + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, version 3 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License below for more details.""") #change as needed + licensebtn = Button(window, text='Open License', command=openLicense) + eulabtn = Button(window, text='Open EULA', command=openEULA) + # Pack Statements + dfdlogo.pack(side=TOP) + info.pack(side=TOP) + trademarks.pack(side=TOP) + licenseblurb.pack(side=TOP) + licensebtn.pack(pady=5) + eulabtn.pack(pady=5) + pythonpowered.pack(side=BOTTOM) + # Maintain Window + window.mainloop() From 927f518cb8e20f3d83637f4efc06d761956ff88d Mon Sep 17 00:00:00 2001 From: William Date: Tue, 9 Oct 2018 16:47:50 -0700 Subject: [PATCH 05/98] docs: update EULA text to conform to grammar and spelling --- EULA.txt | 19 ++++++++++--------- ProgramVer.py | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/EULA.txt b/EULA.txt index 0e80a0e..c326177 100644 --- a/EULA.txt +++ b/EULA.txt @@ -1,21 +1,22 @@ EULA (End User License Agreement) ================================= -By downloading ProgramVer or another application by Dog Face Development Co. (the Software), you agree to the EULA, it's Terms & Conditions, and it's Privacy Policy. This document is an agreement between Dog Face Development Co. (the Company) and you (the User). +By downloading ProgramVer or another application (the Software) by Dog Face Development Co. (the Company), you agree to the the Company's EULA, it's Terms & Conditions, and it's Privacy Policy. This document is an agreement between Dog Face Development Co. (the Company) and you (the User). Source code can be found here (hosted on Github): https://github.com/Dog-Face-Development/ProgramVer TERMS AND CONDITIONS: These terms apply to any piece of software developed or produced by the Company. -This software (and its code) is released as open-source under the GNU General Public License Version 3.0; the Assets (GUI, Textures, Music, etc.) are released under the Creative Commons Attrubution 4.0 License (the Licenses). You must agree to the Licenses in order to use or download the software. You can view all of the Licenses under their respective names in the repository or on the Software's website. -The Companys are NOT responsible for any damage that is caused to you or your computer because of using the software. This software is still in BETA, so unknown things and bugs may occur. This software has NO warranty. We assume NO liability for damages. In no event shall the Companys be liable to you for any consequential, special, incidental or indirect damages of any kind arising out of the performance or use of the software, even if the Companys had been advised of the possibility of such damages. In no event will the Company's liability for any claim, whether in contract, tort or any other theory of liability, exceed the license fee paid by you, if any. -The Companys reserve ALL rights. The Software may be terminated, or discontinued at ANY time WITHOUT notice. NOT ALL features of the Software are avalible in all places and in all languages. Some features may require an Internet Connection. -Exact copies of the software are not permitted. Changing the name and then copying all the other files is also not permitted. If you change the code and then redistribute the game or use some of the games code you must include all of the Licenses (GNU General Public License 4.0, EULA (End User License Agreement), and the MIT License and the Creative Commons Attribution (if copying the assets) and this EULA with the game package. -The Companys are NOT associated with GitHub, except for the fact that they host their source code and websites there. GitHub has no influence over the source code of ProgramVer and is not responsible for it, nor will GitHub be held liable to any damadge caused to the User or the User's computer or device the code is running on. +This software (and its code) is released as open-source under the GNU General Public License Version 3.0; the Assets (GUI, Textures, Music, etc.) are released under the Creative Commons Attrubution 4.0 License (the Licenses). You must agree to the Licenses in order to use or download the software. You can view all of the Licenses under their respective names in the repository or on the Software's website. +The Company is NOT responsible for any damage that is caused to you or your computer because of using the software. This software may be still in a BETA stage, so unknown mishaps and bugs may occur. This Software has NO warranty, whatsoever in any way, shape or form. The Company assumes NO liability for any damages, whether to the User or to the User's computer, in physicall, mental or spiritual form. In no event shall the Company be liable to you for any consequential, special, incidental or indirect damages of any kind arising out of the performance or use of the software, even if the Company had/has been advised of the possibility of such damages. In no event will the Company's liability for any claim, whether in contract, tort or any other theory of liability, exceed the license fee paid by you, if any. +The Company reserves ALL rights. The Software may be terminated or discontinued at ANY time WITHOUT notice. NOT ALL features of the Software are avalible in all places and in all languages. Some features may require an Internet Connection. +Exact copies of the software are not permitted. Changing the name and then copying all the other files is also not permitted. If you change the code and then redistribute the game or use some of the games code you must include all of the Licenses (GNU General Public License 4.0, EULA (End User License Agreement), and the MIT License (if required) and the Creative Commons Attribution if copying the assets) and this EULA with the game package. +The Company is NOT associated with GitHub, except for the fact that they host their source code and websites there. GitHub has no influence over the source code of ProgramVer and is not responsible for it, nor will GitHub be held liable to any damadge caused to the User or the User's computer or device the code is running on. PRIVACY POLICY: -Dog Face Development Co. (the Company) does not want anything to do with your personal information. ProgramVer has no tracking devices in the software. If you would like to make sure you can check out the source code on GitHub. -The Company is NOT responsible for any tracking of personal inforamation that is done by Python, or the Python Modules that we use. +Dog Face Development Co. (the Company) does not want anything to do with your personal information. ProgramVer has no tracking devices in the software. If you would like to make sure you can check out the source code on GitHub. +The Company is NOT responsible for any tracking of personal inforamation that is done by Python, GitHub or the Python Modules that we use. +To see full privacy policy (for now, until it gets added here), please visit: dogfacedev.io/legal/privacypolicy.htm If you have any questions regarding privacy or the Privacy Policy please contact us via the contact form on our website. -(C) 2016 - 2018 Dog Face Development Co. \ No newline at end of file +(C) 2016 - 2018 Dog Face Development Co. diff --git a/ProgramVer.py b/ProgramVer.py index e2bd4a0..390ad68 100644 --- a/ProgramVer.py +++ b/ProgramVer.py @@ -22,7 +22,7 @@ def ProgramVer(): pythonimage = PhotoImage(file='pythonpoweredlengthgif.gif') dfdlogo = Label(window, image = dfdimage) pythonpowered = Label(window, image = pythonimage) - info = Label(window, text='ProgramVer \n Version: BETA 1.0.0 (Build 1080)') #change respectively + info = Label(window, text='ProgramVer \n Version: 1.8.0 (Build 1080)') #change respectively trademarks = Label(window, text='Copyright (C) 2017 - 2018 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed licenseblurb = Label(window, text="""\n ProgramVer - Version window for DFD Co.'s programs Copyright (C) 2017-2018 Dog Face Development Company From 20289f2c9a1ac6b68d526e239345f0b0eeef7679 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 31 Dec 2018 15:17:55 -0800 Subject: [PATCH 06/98] feat(copyright): update copyright date to 2019 --- EULA.txt | 2 +- ProgramVer.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/EULA.txt b/EULA.txt index c326177..fe6f119 100644 --- a/EULA.txt +++ b/EULA.txt @@ -19,4 +19,4 @@ To see full privacy policy (for now, until it gets added here), please visit: do If you have any questions regarding privacy or the Privacy Policy please contact us via the contact form on our website. -(C) 2016 - 2018 Dog Face Development Co. +(C) 2016 - 2019 Dog Face Development Co. diff --git a/ProgramVer.py b/ProgramVer.py index 390ad68..e74b6dd 100644 --- a/ProgramVer.py +++ b/ProgramVer.py @@ -1,5 +1,5 @@ # This is the standard program used by Dog Face Development Co. for versioning their products. -# Copyright (C) 2017 - 2018 Dog Face Development Co. +# Copyright (C) 2017 - 2019 Dog Face Development Co. # Import Statements from tkinter import * @@ -23,9 +23,9 @@ def ProgramVer(): dfdlogo = Label(window, image = dfdimage) pythonpowered = Label(window, image = pythonimage) info = Label(window, text='ProgramVer \n Version: 1.8.0 (Build 1080)') #change respectively - trademarks = Label(window, text='Copyright (C) 2017 - 2018 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed + trademarks = Label(window, text='Copyright (C) 2017 - 2019 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed licenseblurb = Label(window, text="""\n ProgramVer - Version window for DFD Co.'s programs - Copyright (C) 2017-2018 Dog Face Development Company + Copyright (C) 2017-2019 Dog Face Development Company This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 3591a819b7f552e1a1aca9a75ada6bea6e6c6fad Mon Sep 17 00:00:00 2001 From: William Date: Thu, 18 Jul 2019 11:40:55 -0700 Subject: [PATCH 07/98] docs(delete redundant license): delete license file because it is not needed in this project --- LICENSE | 674 -------------------------------------------------------- 1 file changed, 674 deletions(-) delete mode 100644 LICENSE diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 94a9ed0..0000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. From bd9e3b88b45aef57aaf5c00b7d8d7a8cdf3bd18e Mon Sep 17 00:00:00 2001 From: Conor O'Callaghan Date: Sat, 19 Oct 2019 00:06:02 +0100 Subject: [PATCH 08/98] docs(add): Update README with new copyright information --- README.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 144f651..5ba3b92 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,23 @@ -# ProgramVer +
+

ProgramVer

+ + [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity) [![Github all releases](https://img.shields.io/github/downloads/Naereen/StrapDown.js/total.svg)](https://GitHub.com/Naereen/StrapDown.js/releases/) [![GitHub issues](https://img.shields.io/github/issues/Naereen/StrapDown.js.svg)](https://GitHub.com/Naereen/StrapDown.js/issues/) + +
+ An open-source, Python GUI version window to show copyright info and licenses. A Python version of Microsoft's 'winver'. +## Dependencies + +``tkinter`` is the only additional module required and may be installed by default. + +## Usage + +?? + +## Contributing + You can edit the code to suit your needs and can also change the logo on top. -`dfdlogo.gif` is Copyright © 2018 Dog Face Development Co. +`dfdlogo.gif` is Copyright © 2019 Dog Face Development Co. `pythonpoweredlength.gif` is Copyright © the Python Software Foundation. From f1b5411a2921d4113a95e44faf260cebf8ed99fd Mon Sep 17 00:00:00 2001 From: William Date: Thu, 31 Oct 2019 18:56:22 -0700 Subject: [PATCH 09/98] docs: Update badge links and some information --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5ba3b92..873004c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

ProgramVer

- [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity) [![Github all releases](https://img.shields.io/github/downloads/Naereen/StrapDown.js/total.svg)](https://GitHub.com/Naereen/StrapDown.js/releases/) [![GitHub issues](https://img.shields.io/github/issues/Naereen/StrapDown.js.svg)](https://GitHub.com/Naereen/StrapDown.js/issues/) + [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/Dog-Face-Development/ProgramVer/commits/master) [![Github all releases](https://img.shields.io/github/downloads/Dog-Face-Development/ProgramVer/total.svg)](https://GitHub.com/Dog-Face-Development/ProgramVer/releases/) [![GitHub issues](https://img.shields.io/github/issues/Dog-Face-Development/ProgramVer.svg)](https://GitHub.com/Dog-Face-Development/ProgramVer/issues/)
@@ -13,7 +13,7 @@ An open-source, Python GUI version window to show copyright info and licenses. A ## Usage -?? +Used to display version and copyright info of a program, much like how the winver box does that for Windows. ## Contributing From e4c1c1eaed1c2a939f0266622d5cc9010390aa51 Mon Sep 17 00:00:00 2001 From: William Date: Fri, 17 Jan 2020 15:11:48 -0800 Subject: [PATCH 10/98] fix(program): update copyright year in license and EULA text windows --- EULA.txt | 2 +- ProgramVer.py | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/EULA.txt b/EULA.txt index fe6f119..8a2d551 100644 --- a/EULA.txt +++ b/EULA.txt @@ -19,4 +19,4 @@ To see full privacy policy (for now, until it gets added here), please visit: do If you have any questions regarding privacy or the Privacy Policy please contact us via the contact form on our website. -(C) 2016 - 2019 Dog Face Development Co. +(C) 2016 - 2020 Dog Face Development Co. diff --git a/ProgramVer.py b/ProgramVer.py index e74b6dd..ac90084 100644 --- a/ProgramVer.py +++ b/ProgramVer.py @@ -1,5 +1,5 @@ -# This is the standard program used by Dog Face Development Co. for versioning their products. -# Copyright (C) 2017 - 2019 Dog Face Development Co. +# This is the standard program used by Dog Face Development Co. for versioning and displaying copyright infor for their products. +# Copyright (C) 2017 - 2020 Dog Face Development Co. # Import Statements from tkinter import * @@ -7,10 +7,24 @@ # Document Functions def openLicense(): - os.startfile("LICENSE.txt") #change file address as needed + windowl = Tk() + licensefile = open('LICENSE.txt', 'r') #change file address as needed + licensecontents = licensefile.read() + licensefile.close() + windowl.title('License') + licensetext = Text(windowl) + licensetext.insert(INSERT, licensecontents) + licensetext.pack() def openEULA(): - os.startfile("EULA.txt") #change file address as needed + windowl = Tk() + eulafile = open('EULA.txt', 'r') # change file address as needed + eulacontents = eulafile.read() + eulafile.close() + windowl.title('EULA') + eulatext = Text(windowl) + eulatext.insert(INSERT, eulacontents) + eulatext.pack() # ProgramVer Function def ProgramVer(): @@ -23,9 +37,9 @@ def ProgramVer(): dfdlogo = Label(window, image = dfdimage) pythonpowered = Label(window, image = pythonimage) info = Label(window, text='ProgramVer \n Version: 1.8.0 (Build 1080)') #change respectively - trademarks = Label(window, text='Copyright (C) 2017 - 2019 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed + trademarks = Label(window, text='Copyright (C) 2017 - 2020 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed licenseblurb = Label(window, text="""\n ProgramVer - Version window for DFD Co.'s programs - Copyright (C) 2017-2019 Dog Face Development Company + Copyright (C) 2017-2020 Dog Face Development Company This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From be7e197cb8b1a5c472d9e87e006a7c1ac8685327 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 3 Jan 2022 10:31:21 -0800 Subject: [PATCH 11/98] chore: update copyright dates in EULA and README files --- EULA.txt | 2 +- ProgramVer.py | 6 +++--- README.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/EULA.txt b/EULA.txt index 8a2d551..1eab012 100644 --- a/EULA.txt +++ b/EULA.txt @@ -19,4 +19,4 @@ To see full privacy policy (for now, until it gets added here), please visit: do If you have any questions regarding privacy or the Privacy Policy please contact us via the contact form on our website. -(C) 2016 - 2020 Dog Face Development Co. +(C) 2016 - 2022 Dog Face Development Co. diff --git a/ProgramVer.py b/ProgramVer.py index ac90084..73a86f2 100644 --- a/ProgramVer.py +++ b/ProgramVer.py @@ -1,5 +1,5 @@ # This is the standard program used by Dog Face Development Co. for versioning and displaying copyright infor for their products. -# Copyright (C) 2017 - 2020 Dog Face Development Co. +# Copyright (C) 2017 - 2022 Dog Face Development Co. # Import Statements from tkinter import * @@ -37,9 +37,9 @@ def ProgramVer(): dfdlogo = Label(window, image = dfdimage) pythonpowered = Label(window, image = pythonimage) info = Label(window, text='ProgramVer \n Version: 1.8.0 (Build 1080)') #change respectively - trademarks = Label(window, text='Copyright (C) 2017 - 2020 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed + trademarks = Label(window, text='Copyright (C) 2017 - 2022 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed licenseblurb = Label(window, text="""\n ProgramVer - Version window for DFD Co.'s programs - Copyright (C) 2017-2020 Dog Face Development Company + Copyright (C) 2017-2022 Dog Face Development Company This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/README.md b/README.md index 873004c..3f6ee0a 100644 --- a/README.md +++ b/README.md @@ -19,5 +19,5 @@ Used to display version and copyright info of a program, much like how the winve You can edit the code to suit your needs and can also change the logo on top. -`dfdlogo.gif` is Copyright © 2019 Dog Face Development Co. +`dfdlogo.gif` is Copyright © 2019-2022 Dog Face Development Co. `pythonpoweredlength.gif` is Copyright © the Python Software Foundation. From 50e5fde40a9bdaa4005ccb4fc3ff5950e5784fe9 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 5 Sep 2022 11:39:38 -0700 Subject: [PATCH 12/98] docs: Add templates for bug reports, feature requests and questions to issue template --- .github/FUNDING.yml | 4 ++ .github/ISSUE_TEMPLATE/bug-report.md | 34 +++++++++ .github/ISSUE_TEMPLATE/feature-request.md | 20 ++++++ .github/ISSUE_TEMPLATE/question.md | 15 ++++ .github/PULL_REQUEST_TEMPLATE.md | 27 +++++++ .github/dependabot.yml | 11 +++ .github/workflows/build.yml | 30 ++++++++ .github/workflows/cla.yml | 33 +++++++++ .github/workflows/dependency-review.yml | 14 ++++ .github/workflows/docker-publish.yml | 88 +++++++++++++++++++++++ .github/workflows/push-to-pypi.yml | 31 ++++++++ .github/workflows/pylint.yml | 32 +++++++++ .github/workflows/test.yml | 36 ++++++++++ 13 files changed, 375 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug-report.md create mode 100644 .github/ISSUE_TEMPLATE/feature-request.md create mode 100644 .github/ISSUE_TEMPLATE/question.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/cla.yml create mode 100644 .github/workflows/dependency-review.yml create mode 100644 .github/workflows/docker-publish.yml create mode 100644 .github/workflows/push-to-pypi.yml create mode 100644 .github/workflows/pylint.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..2eb3ec8 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +github: ['willtheorangeguy', 'Dog-Face-Development'] +custom: ['https://paypal.me/wvdg44', 'https://psfmember.org/', 'https://www.pyinstaller.org/funding.html#funding-by-individuals'] diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 0000000..2e3b201 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,34 @@ +--- +name: Bug Report +about: Create a report to help us improve! +title: 'Bug: ' +labels: bug +assignees: willtheorangeguy + +--- + +**Describe the Bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error. + +**Expected Behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + +- OS: [e.g. Windows] +- Program Version [e.g. 22] +- Python Version [e.g. 3.9.1] + +**Additional Context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 0000000..bab8a3e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,20 @@ +--- +name: Feature Request +about: Suggest an idea for this project! +title: 'Feature: ' +labels: enhancement +assignees: willtheorangeguy + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional Context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..f765436 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,15 @@ +--- +name: Question +about: Let us know if you have a question! +title: 'Question: ' +labels: question +assignees: willtheorangeguy + +--- + +**Is your question related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**What is the question?** + +**Additional Context** diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..036bda0 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,27 @@ +**Describe the Pull Request** + +A clear and concise description of what the pull request does. + +**Expected Behavior** + +A clear and concise description of what you expected to happen. + +**Fixes the Following Issues** + +A clear and concise description of what you expected to happen. + +**Screenshots** + +If applicable, add screenshots to help explain your problem. + +**Desktop Developed On (please complete the following information):** + +- OS: [e.g. Windows] +- Program Version [e.g. 22] +- Python Version [e.g. 3.9.1] + +**Additional Context** + +Add any other context about the problem here. + +**Please ensure you have read the [Contributor License Agreements](https://github.com/Dog-Face-Development/ProgramVer/tree/master/docs/legal). By creating your pull request, you agree to the CLA.** diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..a939573 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "daily" + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "daily" + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..7a868c3 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,30 @@ +name: build + +on: [push, pull_request] + +jobs: + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-20.04, windows-2019] + + steps: + - uses: actions/checkout@v3 + + # Used to host cibuildwheel + - uses: actions/setup-python@v3 + + - name: Install cibuildwheel + run: python -m pip install cibuildwheel==2.9.0 + + - name: Build wheels + run: python -m cibuildwheel --output-dir wheelhouse + # to supply options, put them in 'env', like: + # env: + # CIBW_SOME_OPTION: value + + - uses: actions/upload-artifact@v3 + with: + path: ./wheelhouse/*.whl diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml new file mode 100644 index 0000000..002c923 --- /dev/null +++ b/.github/workflows/cla.yml @@ -0,0 +1,33 @@ +name: "cla" +on: + issue_comment: + types: [created] + pull_request_target: + types: [opened, closed, synchronize] + +jobs: + CLAssistant: + runs-on: ubuntu-latest + steps: + - name: "CLA Assistant" + if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' + # Beta Release + uses: contributor-assistant/github-action@v2.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # the below token should have repo scope and must be manually added by you in the repository's secret + PERSONAL_ACCESS_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN }} + with: + path-to-signatures: 'signatures/cla.json' + path-to-document: 'https://github.com/Dog-Face-Development/.github/tree/main/docs/legal' # e.g. a CLA or a DCO document + # branch should not be protected + branch: 'main' + allowlist: willtheorangeguy, bot* + remote-organization-name: Dog-Face-Development + remote-repository-name: cla-signatures + create-file-commit-message: 'Create CLA signatures file' + signed-commit-message: '$contributorName has signed the CLA in #$pullRequestNo' + custom-notsigned-prcomment: 'Thank you for your contribution, please read and sign our CLA. Instructions on how to do so can be found in the `CONTRIBUTING.md` document.' + custom-pr-sign-comment: 'I have read the CLA Document, and I hereby sign the CLA.' + custom-allsigned-prcomment: 'All Contributors have signed the CLA!' + \ No newline at end of file diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000..d9d789f --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,14 @@ +name: 'dependency-review' +on: [pull_request, push] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@v3 + - name: Dependency Review + uses: actions/dependency-review-action@main diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..e2b4237 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,88 @@ +name: docker-publish + +on: + schedule: + - cron: '32 11 * * *' + push: + branches: [ "main" ] + # Publish semver tags as releases. + tags: [ 'v*.*.*' ] + pull_request: + branches: [ "main" ] + +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + IMAGE_NAME: ${{ github.repository }} + + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + # This is used to complete the identity challenge + # with sigstore/fulcio when running outside of PRs. + id-token: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Install the cosign tool except on PR + # https://github.com/sigstore/cosign-installer + - name: Install cosign + if: github.event_name != 'pull_request' + uses: sigstore/cosign-installer@7e0881f8fe90b25e305bbf0309761e9314607e25 + with: + cosign-release: 'v1.9.0' + + + # Workaround: https://github.com/docker/build-push-action/issues/461 + - name: Setup Docker buildx + uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf + + # Login against a Docker registry except on PR + # https://github.com/docker/login-action + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Extract metadata (tags, labels) for Docker + # https://github.com/docker/metadata-action + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + # Build and push Docker image with Buildx (don't push on PR) + # https://github.com/docker/build-push-action + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + # Sign the resulting Docker image digest except on PRs. + # This will only write to the public Rekor transparency log when the Docker + # repository is public to avoid leaking data. If you would like to publish + # transparency data even for private images, pass --force to cosign below. + # https://github.com/sigstore/cosign + - name: Sign the published Docker image + if: ${{ github.event_name != 'pull_request' }} + env: + COSIGN_EXPERIMENTAL: "true" + # This step uses the identity token to provision an ephemeral certificate + # against the sigstore community Fulcio instance. + run: echo "${{ steps.meta.outputs.tags }}" | xargs -I {} cosign sign {}@${{ steps.build-and-push.outputs.digest }} diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml new file mode 100644 index 0000000..cefdb2f --- /dev/null +++ b/.github/workflows/push-to-pypi.yml @@ -0,0 +1,31 @@ +name: push-to-pypi + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + deploy: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + - name: Build package + run: python -m build + - name: Publish package + uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml new file mode 100644 index 0000000..8f5c9b8 --- /dev/null +++ b/.github/workflows/pylint.yml @@ -0,0 +1,32 @@ +name: Pylint + +on: [push] + +permissions: + checks: write + pull-requests: write + contents: read + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9"] + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pylint + - name: Analysing the code with pylint + run: | + pylint $(git ls-files '*.py') + - uses: smelly-python/smell-my-pr@main + with: + github-token: ${{secrets.GITHUB_TOKEN}} + command: pipenv run smelly-python -d src diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..6ceece2 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,36 @@ +name: test + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +permissions: + contents: read + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with pytest + run: | + pytest From 4898a337fb5fadc636f664bffe24f448379485fe Mon Sep 17 00:00:00 2001 From: William Date: Mon, 5 Sep 2022 11:41:10 -0700 Subject: [PATCH 13/98] docs(codeql-analysis.yml): Update workflow to include analysis job --- .github/workflows/codeql-analysis.yml | 59 +++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..a64d451 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,59 @@ +name: "CodeQL" + +on: + push: + branches: [ "master" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "master" ] + schedule: + - cron: '45 20 * * 3' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'python' ] + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 From cd5d6c853502449003142b63589ac94c9ef07532 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 5 Sep 2022 12:52:03 -0700 Subject: [PATCH 14/98] docs: Add ProgramVer customization instructions --- docs/CUSTOMIZATION.md | 56 +++++++++++++++++ docs/README.md | 17 +++++ docs/USAGE.md | 11 ++++ docs/images/logo.png | Bin 0 -> 23417 bytes docs/images/welcome.png | Bin 0 -> 212306 bytes docs/legal/CLA_ENTITY.md | 98 +++++++++++++++++++++++++++++ docs/legal/CLA_INDIVIDUAL.md | 102 ++++++++++++++++++++++++++++++ docs/legal/EULA.md | 119 +++++++++++++++++++++++++++++++++++ docs/legal/PRIVACY.md | 99 +++++++++++++++++++++++++++++ docs/legal/TERMS.md | 99 +++++++++++++++++++++++++++++ 10 files changed, 601 insertions(+) create mode 100644 docs/CUSTOMIZATION.md create mode 100644 docs/README.md create mode 100644 docs/USAGE.md create mode 100644 docs/images/logo.png create mode 100644 docs/images/welcome.png create mode 100644 docs/legal/CLA_ENTITY.md create mode 100644 docs/legal/CLA_INDIVIDUAL.md create mode 100644 docs/legal/EULA.md create mode 100644 docs/legal/PRIVACY.md create mode 100644 docs/legal/TERMS.md diff --git a/docs/CUSTOMIZATION.md b/docs/CUSTOMIZATION.md new file mode 100644 index 0000000..a768e47 --- /dev/null +++ b/docs/CUSTOMIZATION.md @@ -0,0 +1,56 @@ +# ProgramVer Customization + +ProgramVer is designed to be highly customizable, in order to make the version window suit each individual project. The license and EULA texts can be changed, as well as the program name, version number and more. + +All of these instructions require [a text editor](https://code.visualstudio.com/) to be installed. + +## Set the License File and Text + +The version window can be configured to use a custom license file and text. + +1. _Line 11_: Replace the `'LICENSE.txt'` with the name (or path) to the license file. +2. _Line 40_: Replace the text in between the single quotes (`'...'`) with the trademark/license blurb. For example, here is the one from `winver.exe`: + +```text +© Microsoft Corporation. All rights reserved. +``` + +3. _Line 41_: Replace the text in between the triple double quotes (`"""..."""`) with the license blurb, if your license includes this. For example, the GNU Public License includes a section of text that should be included with each program: + +```text + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +``` + +## Set the EULA File + +The version window can be configured to use a custom EULA file. + +1. _Line 21_: Replace the `'EULA.txt'` with the name (or path) to the End User License Agreement file. + +## Set the Window Title + +The version window can be configured to have a custom title. + +1. _Line 33_: Replace the `'Copyright & Version Info for ProgramVer'` with the name of the project ProgramVer is being added to. +2. _Line 39_: Replace the `'ProgramVer \n Version: 1.8.0 (Build 1080)'` with the program name and the version number. + +## Set the Images + +The version window can be configured to show a company logo and the Python Powered logo. + +1. _Line 35_: Replace the `'dfdlogo.gif'` with the name (or path) of the company logo image. +2. _Line 36_: Replace the `'pythonpoweredlengthgif.gif'` with the name (or path) to another Python Powered image, or any other image that fits. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..4962185 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,17 @@ +# ProgramVer Documentation + +This folder includes all of the docs for ProgramVer. More can be found on the [wiki](https://github.com/Dog-Face-Development/ProgramVer/wiki). + +```text +├── docs +| ├── images +| ├── legal +| | ├── CLA_ENTITY.md +| | ├── CLA_INDIVIDUAL.md +| | ├── EULA.md +| | ├── PRIVACY.md +| | ├── TERMS.md +| ├── CUSTOMIZATION.md +| ├── USAGE.md +└── README.md +``` diff --git a/docs/USAGE.md b/docs/USAGE.md new file mode 100644 index 0000000..1aa5e50 --- /dev/null +++ b/docs/USAGE.md @@ -0,0 +1,11 @@ +# ProgramVer Usage + +To add ProgramVer to your project, follow the steps below. To customize the program to your needs, see [`CUSTOMIZATION`](CUSTOMIZATION.md). + +1. To add the version window to your project, download the latest source code release from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. +2. Extract the source code files using a program like [7-Zip](https://www.7-zip.org/). +3. Copy the `ProgramVer.py` file to your project's main directory. +4. Import ProgramVer by adding `from ProgramVer import *` to your Python `import` statements. +5. Customize the version window by following the instructions in [`CUSTOMIZATION`](CUSTOMIZATION.md). +6. Call ProgramVer through the `ProgramVer()` function. +7. Enjoy your new version window! diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee0ee02fe06c23491a75ba59126bf3bcda0182c GIT binary patch literal 23417 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 Hr-UW|T;uF* literal 0 HcmV?d00001 diff --git a/docs/images/welcome.png b/docs/images/welcome.png new file mode 100644 index 0000000000000000000000000000000000000000..a2270ab4a932c14a83fa4261f888981aecd46358 GIT binary patch literal 212306 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 G Date: Mon, 5 Sep 2022 14:07:53 -0700 Subject: [PATCH 15/98] docs: Update contributor covenant code of conduct --- CHANGELOG.md | 18 ++ CODE_OF_CONDUCT.md | 121 +++++++++ CONTRIBUTING.md | 74 ++++++ EULA.txt | 131 ++++++++-- LICENSE.md | 622 +++++++++++++++++++++++++++++++++++++++++++++ LICENSE.txt | 4 +- PLANNING.md | 8 + README.md | 137 +++++++++- SECURITY.md | 29 +++ 9 files changed, 1115 insertions(+), 29 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE.md create mode 100644 PLANNING.md create mode 100644 SECURITY.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c170db9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +# Changelog + +## [v1.8.0](https://github.com/Dog-Face-Development/ProgramVer/releases/tag/1.8.0) + +### Added + +- License texts. +- EULA texts. + +### Changed + +- Documentation grammar. + +## [v1.0.0](https://github.com/Dog-Face-Development/ProgramVer/releases/tag/v1.0.0) + +### Added + +- Initial program. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..619fe91 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,121 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at the project's +[Discord](https://discord.gg/x3G8adwVUe). +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), +version 2.0. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..6e49c71 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,74 @@ +# Contributing to ProgramVer + +🎉 Thanks for taking the time to contribute! 🎉 + +The following is a set of guidelines for contributing to Dog Face Development Co.'s ProgramVer project on GitHub. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. + +## Code of Conduct + +This project and everyone participating in it is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to our [Discord](https://discord.gg/x3G8adwVUe). + +## Signing the CLA + +If you are not an employee of Dog Face Development Co. and want to submit a pull request to our open source project, you must first sign a Contributor License Agreement (CLA). This allows you to retain your ownership of the code submitted while granting Dog Face Development the necessary legal rights to use your contribution. The CLA only needs to be signed once and it covers all our projects. Follow these simple steps to sign: + +- If you are creating a pull request on your own, read the [Individual CLA](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/CLA_INDIVIDUAL.md). If you are creating a pull request as part of your employment, read the [Entity CLA](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/CLA_ENTITY.md). +- Open a [pull request](https://github.com/Dog-Face-Development/ProgramVer/compare). +- The CLA Assistant bot will ask you to sign the pull request by writing the following text: `I have read the CLA Document, and I hereby sign the CLA.` If you agree to the CLA, copy the text. +- The CLA Assistant bot will mark your pull request as CLA approved, and you won't have to sign the CLA again! + +## New Contributor Guide + +To get an overview of the project, read the [README](README.md). Here are some resources to help you get started with open source contributions: + +- [Finding ways to contribute to open source on GitHub](https://docs.github.com/en/get-started/exploring-projects-on-github/finding-ways-to-contribute-to-open-source-on-github). +- [Set up Git](https://docs.github.com/en/get-started/quickstart/set-up-git). +- [GitHub flow](https://docs.github.com/en/get-started/quickstart/github-flow). +- [Collaborating with pull requests](https://docs.github.com/en/github/collaborating-with-pull-requests). + +Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/Dog-Face-Development/ProgramVer/compare). + +## How to Contribute + +### Did you find a bug? + +- **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/Dog-Face-Development/ProgramVer/issues). +- If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. +- Use the issue templates to create the issue. They include step by step guidelines and have lists of things that should be included. + +### Did you write a patch that fixes a bug or updates the documentation? + +- Open a new [Pull Request](https://github.com/Dog-Face-Development/ProgramVer/compare) on GitHub with the patch. +- Ensure the pull request description clearly describes the problem and solution. Be sure to include a **title**, and as much relevant information as possible. Include the relevant issue number if applicable. + +### Did you fix whitespace, format code, or make a purely cosmetic patch? + +- Changes that are cosmetic in nature and do not add anything substantial to the stability, functionality, or testability of Auto Announcements are still accepted! Just follow the same instructions as above. +- However, do ensure that any cosmetic changes follow the Dog Face Development Co. Style Guides, found [below](#style). + +### Do you intend to add a new feature or change an existing one? + +- **Ensure the feature was not already introduced** by searching on GitHub under [Issues](https://github.com/Dog-Face-Development/ProgramVer/issues). Look for those under the [enhancement](https://github.com/Dog-Face-Development/ProgramVer/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) tag. +- If you're unable to find an open issue addressing the new feature, [open a new one](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose)! + +### Do you have questions about the source code? + +- Ask any question about how to use Auto Announcements on our [Discord](https://discord.gg/x3G8adwVUe). +- If it does not get answered, open an [issue](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose). + +## Coding Conventions + +Start reading our code and you'll get the hang of it. + +- A CLA must be signed before contributing (see [above](#signing-the-cla)). +- We indent using four spaces (NOT tabs). +- Every function or piece of code should be heavily commented. +- We use [Semantic Versioning](https://semver.org/). + +## Style + +While contributing to a Dog Face Development Co. project, make sure your code follow our [Code Style Guide](https://github.com/Dog-Face-Development/DFD-Code-Style-Guide), and any web design elements follow our [Web Style Guide](https://github.com/Dog-Face-Development/DFD-Web-Style-Guide). If you have any changes you wish to make to the styling of our code or web projects, open an issue or pull request on the respective style guide! + +## Attribution + +This document is adapted from the Contributing documents of [Rails](https://github.com/rails/rails/blob/main/CONTRIBUTING.md), the [GitHub Docs](https://github.com/github/docs/blob/main/CONTRIBUTING.md), [Atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md), and [OpenGovernment](https://github.com/opengovernment/opengovernment/blob/master/CONTRIBUTING.md?plain=1). diff --git a/EULA.txt b/EULA.txt index 1eab012..5115ca4 100644 --- a/EULA.txt +++ b/EULA.txt @@ -1,22 +1,119 @@ -EULA (End User License Agreement) -================================= -By downloading ProgramVer or another application (the Software) by Dog Face Development Co. (the Company), you agree to the the Company's EULA, it's Terms & Conditions, and it's Privacy Policy. This document is an agreement between Dog Face Development Co. (the Company) and you (the User). -Source code can be found here (hosted on Github): https://github.com/Dog-Face-Development/ProgramVer +# Dog Face Development Co. End-User License Agreement -TERMS AND CONDITIONS: -These terms apply to any piece of software developed or produced by the Company. -This software (and its code) is released as open-source under the GNU General Public License Version 3.0; the Assets (GUI, Textures, Music, etc.) are released under the Creative Commons Attrubution 4.0 License (the Licenses). You must agree to the Licenses in order to use or download the software. You can view all of the Licenses under their respective names in the repository or on the Software's website. -The Company is NOT responsible for any damage that is caused to you or your computer because of using the software. This software may be still in a BETA stage, so unknown mishaps and bugs may occur. This Software has NO warranty, whatsoever in any way, shape or form. The Company assumes NO liability for any damages, whether to the User or to the User's computer, in physicall, mental or spiritual form. In no event shall the Company be liable to you for any consequential, special, incidental or indirect damages of any kind arising out of the performance or use of the software, even if the Company had/has been advised of the possibility of such damages. In no event will the Company's liability for any claim, whether in contract, tort or any other theory of liability, exceed the license fee paid by you, if any. -The Company reserves ALL rights. The Software may be terminated or discontinued at ANY time WITHOUT notice. NOT ALL features of the Software are avalible in all places and in all languages. Some features may require an Internet Connection. -Exact copies of the software are not permitted. Changing the name and then copying all the other files is also not permitted. If you change the code and then redistribute the game or use some of the games code you must include all of the Licenses (GNU General Public License 4.0, EULA (End User License Agreement), and the MIT License (if required) and the Creative Commons Attribution if copying the assets) and this EULA with the game package. -The Company is NOT associated with GitHub, except for the fact that they host their source code and websites there. GitHub has no influence over the source code of ProgramVer and is not responsible for it, nor will GitHub be held liable to any damadge caused to the User or the User's computer or device the code is running on. +Last updated: September 5, 2022. +Please read this End-User License Agreement carefully before downloading or using ProgramVer. **This document comes into effect when you contribute to the repository and/or download the software containing this document.** -PRIVACY POLICY: -Dog Face Development Co. (the Company) does not want anything to do with your personal information. ProgramVer has no tracking devices in the software. If you would like to make sure you can check out the source code on GitHub. -The Company is NOT responsible for any tracking of personal inforamation that is done by Python, GitHub or the Python Modules that we use. -To see full privacy policy (for now, until it gets added here), please visit: dogfacedev.io/legal/privacypolicy.htm -If you have any questions regarding privacy or the Privacy Policy please contact us via the contact form on our website. +## Interpretation and Definitions +### Interpretation -(C) 2016 - 2022 Dog Face Development Co. +The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. + +### Definitions + +For the purposes of this End-User License Agreement: + +- **Agreement** means this End-User License Agreement that forms the entire agreement between You and the Company regarding the use of the Application. +- **Application** means the software program provided by the Company downloaded by You to a Device, named ProgramVer. +- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to Dog Face Development Company, British Columbia, Canada. +- **Content** refers to content such as text, images, or other information that can be posted, uploaded, linked to or otherwise made available by You, regardless of the form of that content. +- **Country** refers to: British Columbia, Canada. +- **Device** means any device that can access the Application such as a computer, a cellphone or a digital tablet. +- **Third-Party Services** means any services or content (including data, information, applications and other products services) provided by a third-party that may be displayed, included or made available by the Application. +- **You** means the individual accessing or using the Application or the company, or other legal entity on behalf of which such individual is accessing or using the Application, as applicable. + +## Acknowledgment + +By downloading or using the Application, You are agreeing to be bound by the terms and conditions of this Agreement. If You do not agree to the terms of this Agreement, do not download or do not use the Application. + +This Agreement is a legal document between You and the Company and it governs your use of the Application made available to You by the Company. + +The Application is licensed, not sold, to You by the Company for use strictly in accordance with the terms of this Agreement. + +## License + +### Scope of License + +The Company grants You a revocable, non-exclusive, non-transferable, limited license to download, install and use the Application strictly in accordance with the terms of this Agreement, and with the `LICENSE` file included with the software download. + +The license that is granted to You by the Company is solely for your personal, non-commercial purposes strictly in accordance with the terms of this Agreement, and with the `LICENSE` file included with the software download. + +## Third-Party Services + +The Application may display, include or make available third-party content (including data, information, applications and other products services) or provide links to third-party websites or services. + +You acknowledge and agree that the Company shall not be responsible for any Third-party Services, including their accuracy, completeness, timeliness, validity, copyright compliance, legality, decency, quality or any other aspect thereof. The Company does not assume and shall not have any liability or responsibility to You or any other person or entity for any Third-party Services. + +You must comply with applicable Third parties' Terms of agreement when using the Application. Third-party Services and links thereto are provided solely as a convenience to You and You access and use them entirely at your own risk and subject to such third parties' Terms and conditions. + +## Term and Termination + +This Agreement shall remain in effect until terminated by You or the Company. +The Company may, in its sole discretion, at any time and for any or no reason, suspend or terminate this Agreement with or without prior notice. + +This Agreement will terminate immediately, without prior notice from the Company, in the event that you fail to comply with any provision of this Agreement. You may also terminate this Agreement by deleting the Application and all copies thereof from your Device or from your computer. + +Upon termination of this Agreement, You shall cease all use of the Application and delete all copies of the Application from your Device. + +Termination of this Agreement will not limit any of the Company's rights or remedies at law or in equity in case of breach by You (during the term of this Agreement) of any of your obligations under the present Agreement. + +## Indemnification + +You agree to indemnify and hold the Company and its parents, subsidiaries, affiliates, officers, employees, agents, partners and licensors (if any) harmless from any claim or demand, including reasonable attorneys' fees, due to or arising out of your: (a) use of the Application; (b) violation of this Agreement or any law or regulation; or (c) violation of any right of a third party. + +## No Warranties + +The Application is provided to You "AS IS" and "AS AVAILABLE" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the Company, on its own behalf and on behalf of its affiliates and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the Application, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the Company provides no warranty or undertaking, and makes no representation of any kind that the Application will meet your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected. + +Without limiting the foregoing, neither the Company nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the Application, or the information, content, and materials or products included thereon; (ii) that the Application will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the Application; or (iv) that the Application, its servers, the content, or e-mails sent from or on behalf of the Company are free of viruses, scripts, trojan horses, worms, malware, timebombs or other harmful components. + +Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law. To the extent any warranty exists under law that cannot be disclaimed, the Company shall be solely responsible for such warranty. + +## Limitation of Liability + +Notwithstanding any damages that You might incur, the entire liability of the Company and any of its suppliers under any provision of this Agreement and your exclusive remedy for all of the foregoing shall be limited to the amount actually paid by You for the Application or through the Application or 100 USD if You haven't purchased anything through the Application. + +To the maximum extent permitted by applicable law, in no event shall the Company or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the Application, third-party software and/or third-party hardware used with the Application, or otherwise in connection with any provision of this Agreement), even if the Company or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose. + +Some states/jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to You. + +## Severability and Waiver + +### Severability + +If any provision of this Agreement is held to be unenforceable or invalid, such provision will be changed and interpreted to accomplish the objectives of such provision to the greatest extent possible under applicable law and the remaining provisions will continue in full force and effect. + +## Waiver + +Except as provided herein, the failure to exercise a right or to require performance of an obligation under this Agreement shall not effect a party's ability to exercise such right or require such performance at any time thereafter nor shall the waiver of a breach constitute a waiver of any subsequent breach. + +## Product Claims + +The Company does not make any warranties concerning the Application. + +## United States Legal Compliance + +You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a "terrorist supporting" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties. + +## Changes to this Agreement + +The Company reserves the right, at its sole discretion, to modify or replace this Agreement at any time. If a revision is material we will provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at the sole discretion of the Company. + +By continuing to access or use the Application after any revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, You are no longer authorized to use the Application. + +## Governing Law + +The laws of the Country, excluding its conflicts of law rules, shall govern this Agreement and your use of the Application. Your use of the Application may also be subject to other local, state, national, or international laws. + +## Entire Agreement + +The Agreement constitutes the entire agreement between You and the Company regarding your use of the Application and supersedes all prior and contemporaneous written or oral agreements between You and the Company. + +You may be subject to additional terms and conditions that apply when You use or purchase other Company's services, which the Company will provide to You at the time of such use or purchase. + +## Contact Us + +If you have any questions about this Agreement, You can contact Us: + +- By visiting our Github: [https://github.com/Dog-Face-Development/ProgramVer](https://github.com/Dog-Face-Development/ProgramVer) diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..cea92d5 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,622 @@ +# GNU GENERAL PUBLIC LICENSE + +## Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. [https://fsf.org/](https://fsf.org) + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +## Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + +## TERMS AND CONDITIONS + +**0. Definitions.** + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +**1. Source Code.** + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + +**2. Basic Permissions.** + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +**3. Protecting Users' Legal Rights From Anti-Circumvention Law.** + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +**4. Conveying Verbatim Copies.** + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +**5. Conveying Modified Source Versions.** + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + +a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + +b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + +c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + +d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +**6. Conveying Non-Source Forms.** + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + +a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + +b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + +c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + +d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + +e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +**7. Additional Terms.** + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + +a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + +b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + +c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + +d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + +e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + +f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +**8. Termination.** + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +**9. Acceptance Not Required for Having Copies.** + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +**10. Automatic Licensing of Downstream Recipients.** + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +**11. Patents.** + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +**12. No Surrender of Others' Freedom.** + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +**13. Use with the GNU Affero General Public License.** + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +**14. Revised Versions of this License.** + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +**15. Disclaimer of Warranty.** + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +**16. Limitation of Liability.** + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +**17. Interpretation of Sections 15 and 16.** + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +## END OF TERMS AND CONDITIONS diff --git a/LICENSE.txt b/LICENSE.txt index c7230e1..7d010e6 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,5 +1,5 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 +GNU GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies diff --git a/PLANNING.md b/PLANNING.md new file mode 100644 index 0000000..d3a3536 --- /dev/null +++ b/PLANNING.md @@ -0,0 +1,8 @@ +# Planning + +## Version 2.0.0 + +- [ ] [#5](https://github.com/Dog-Face-Development/ProgramVer/issues/5): Make text uneditable. +- [ ] [#4](https://github.com/Dog-Face-Development/ProgramVer/issues/4): Add to other projects. + +**More planning ideas can be found on the [Issues page](https://github.com/Dog-Face-Development/ProgramVer/issues) or the [Projects page](https://github.com/Dog-Face-Development/ProgramVer/projects?type=classic).** diff --git a/README.md b/README.md index 3f6ee0a..7c05eda 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,140 @@ + +

+ ProgramVer +
+ ProgramVer +
+

+ + +

A Python version of Microsoft's 'winver', built to be customizable, and to show copyright info and licenses.

+ +
-

ProgramVer

+ + GitHub Test State + + GitHub Build State + + Pylint State + + CodeQL State + + GitHub Version + + GitHub Issues + + GitHub Pull Requests + + Discord Server ID + + Downloads + + GitHub Languages +
- [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/Dog-Face-Development/ProgramVer/commits/master) [![Github all releases](https://img.shields.io/github/downloads/Dog-Face-Development/ProgramVer/total.svg)](https://GitHub.com/Dog-Face-Development/ProgramVer/releases/) [![GitHub issues](https://img.shields.io/github/issues/Dog-Face-Development/ProgramVer.svg)](https://GitHub.com/Dog-Face-Development/ProgramVer/issues/) + +

+ Key Features • + Download • + How To Use • + Support • + Contributing • + Changelog • + Credits & Contributors +

+ +
+ Main image
-An open-source, Python GUI version window to show copyright info and licenses. A Python version of Microsoft's 'winver'. +## Key Features + +* Display a version window. +* Can be called and imported as a function. +* Links to License text. +* Links to EULA text. +* Includes logo and Python Powered images. +* Cross Platform. + +## Download + +You can **[download](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) the source code** to run the scripts from the command line on Windows, macOS and Linux. **This will require [Python](https://www.python.org/downloads/).** + +You can **[download](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) the latest executable version** of Auto Announcements for Windows. **This does not require Python.** + +## How To Use + +To clone and run this application, you'll need [Git](https://git-scm.com/downloads) and [Python](https://www.python.org/downloads/) installed on your computer. If you would rather not use Git, you can just download the scripts from GitHub above. From your command line: + +```bash +# Clone this repository +$ git clone https://github.com/ProgramVer/Auto-Anouncements.git + +# Go into the repository +$ cd Auto-Announcements -## Dependencies +# Run ProgramVer +$ python main.py +``` -``tkinter`` is the only additional module required and may be installed by default. +However, you may want to add the version window to your program. To do so, follow these steps: -## Usage +1. Download the latest source code release from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. +2. Extract the source code files using a program like [7-Zip](https://www.7-zip.org/). +3. Copy the `ProgramVer.py` file to your project's main directory. +4. Import ProgramVer by adding `from ProgramVer import *` to your Python `import` statements. +5. Call ProgramVer through the `ProgramVer()` function. +6. Enjoy your new version window! -Used to display version and copyright info of a program, much like how the winver box does that for Windows. +## Support + +Customization for ProgramVer can be found in the [`CUSTOMIZATION`](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/CUSTOMIZATION.md) doc. More documentation is available in the **[Documentation](https://github.com/Dog-Face-Development/ProgramVer/tree/master/docs)** and on the **[Wiki](https://github.com/Dog-Face-Development/ProgramVer/wiki)**. If more support is required, please open a **[GitHub Discussion](https://github.com/Dog-Face-Development/ProgramVer/discussions)** or join our **[Discord](https://discord.gg/x3G8adwVUe)**. ## Contributing -You can edit the code to suit your needs and can also change the logo on top. +Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/Dog-Face-Development/ProgramVer/compare). + +Please read [`CONTRIBUTING`](CONTRIBUTING.md) for details on our [`CODE OF CONDUCT`](CODE_OF_CONDUCT.md), and the process for submitting pull requests to us (including how to sign our CLA). + +## Changelog + +See the [`CHANGELOG`](CHANGELOG.md) file for details. + +## Credits + +This software uses the following open source packages, projects, services or websites: + + + + + + + + + + + + + + + + + + +
GitHubPSFCarbon
GitHubPython Software FoundationCarbon
Web - PlansWeb - DonateWeb
+ +## Contributors + +* [@willtheorangeguy](https://github.com/willtheorangeguy) - Sponsor on [PayPal](https://paypal.me/wvdg44?country.x=CA&locale.x=en_US) + +## You may also like... + +* [PyWorkout](https://github.com/Dog-Face-Development/PyWorkout) - A minimal CLI to keep you inspired during your workout! +* [PyAvatar](https://github.com/Dog-Face-Development/PyAvatar) - Easily display all of your creative avatars to keep them consistent across websites. +* [Periodic Table Info](https://github.com/Dog-Face-Development/Periodic-Table-Info) - Print all the elements in the Periodic Table of the Elements, with an interactive prompt to learn more. + +## License -`dfdlogo.gif` is Copyright © 2019-2022 Dog Face Development Co. -`pythonpoweredlength.gif` is Copyright © the Python Software Foundation. +This project is licensed under the [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.en.html) - see the [`LICENSE`](LICENSE.md) file for details. See the [Privacy Policy](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/PRIVACY.md), [Terms and Conditions](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/TERMS.md), and [EULA](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/EULA.md) for legal information. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..8d8958a --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,29 @@ +# Security Policy + +The security of our software products and services is serious, which includes all source code repositories managed by [Dog Face Development Company](https://github.com/orgs/Dog-Face-Development). + +If you believe you have found a security vulnerability in any repository, please report it to us as described below in [Reporting a Vulnerability](#reporting-a-vulnerability). + +## Supported Versions + +The following versions of ProgramVer are currently supported: + +| Version | Supported | +| ------- | ------------------ | +| `1.x.x` | :white_check_mark: | +| `0.x.x` | :x: | + +## Reporting a Vulnerability + +Please open an [issue](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose) to report a security vulnerability. Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + +* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) +* Full paths of source file(s) related to the manifestation of the issue +* The location of the affected source code (tag/branch/commit or direct URL) +* Any special configuration required to reproduce the issue +* Step-by-step instructions to reproduce the issue +* Proof-of-concept or exploit code (if possible) +* Impact of the issue, including how an attacker might exploit the issue +* This information will help us triage your report more quickly. + +Contributions should follow the [`CODE_OF_CONDUCT`](CODE_OF_CONDUCT.md) and [`CONTRIBUTING`](CONTRIBUTING.md) documents. From 685eeaa9330e98518b9655d9295059141800bccf Mon Sep 17 00:00:00 2001 From: William Date: Mon, 5 Sep 2022 14:15:10 -0700 Subject: [PATCH 16/98] docs: update credits --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7c05eda..a69e22c 100644 --- a/README.md +++ b/README.md @@ -111,17 +111,17 @@ This software uses the following open source packages, projects, services or web GitHub PSF - Carbon + Windows GitHub Python Software Foundation - Carbon + Windows Web - Plans Web - Donate - Web + Web From fea56e09a3738fc69f32061ff769b59609db1e8e Mon Sep 17 00:00:00 2001 From: William Date: Mon, 5 Sep 2022 16:34:30 -0700 Subject: [PATCH 17/98] docs: update contributing.md to reflect changes in ProgramVer --- CONTRIBUTING.md | 4 ++-- LICENSE.txt | 10 +++++----- README.md | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6e49c71..ab9513f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -43,7 +43,7 @@ Please contribute using [GitHub Flow](https://guides.github.com/introduction/flo ### Did you fix whitespace, format code, or make a purely cosmetic patch? -- Changes that are cosmetic in nature and do not add anything substantial to the stability, functionality, or testability of Auto Announcements are still accepted! Just follow the same instructions as above. +- Changes that are cosmetic in nature and do not add anything substantial to the stability, functionality, or testability of ProgramVer are still accepted! Just follow the same instructions as above. - However, do ensure that any cosmetic changes follow the Dog Face Development Co. Style Guides, found [below](#style). ### Do you intend to add a new feature or change an existing one? @@ -53,7 +53,7 @@ Please contribute using [GitHub Flow](https://guides.github.com/introduction/flo ### Do you have questions about the source code? -- Ask any question about how to use Auto Announcements on our [Discord](https://discord.gg/x3G8adwVUe). +- Ask any question about how to use ProgramVer on our [Discord](https://discord.gg/x3G8adwVUe). - If it does not get answered, open an [issue](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose). ## Coding Conventions diff --git a/LICENSE.txt b/LICENSE.txt index 7d010e6..e2edafa 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -520,7 +520,7 @@ work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is -onditioned on the non-exercise of one or more of the rights that are +conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment @@ -530,7 +530,7 @@ parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that -ontain the covered work, unless you entered into that arrangement, +contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting @@ -540,7 +540,7 @@ otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or -therwise) that contradict the conditions of this License, they do not +otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may @@ -552,7 +552,7 @@ License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed -nder version 3 of the GNU Affero General Public License into a single +under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, @@ -569,7 +569,7 @@ address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the -ption of following the terms and conditions either of that numbered +option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the NU General Public License, you may choose any version ever published diff --git a/README.md b/README.md index a69e22c..1a157da 100644 --- a/README.md +++ b/README.md @@ -56,13 +56,13 @@ * Links to License text. * Links to EULA text. * Includes logo and Python Powered images. -* Cross Platform. +* Cross platform. ## Download You can **[download](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) the source code** to run the scripts from the command line on Windows, macOS and Linux. **This will require [Python](https://www.python.org/downloads/).** -You can **[download](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) the latest executable version** of Auto Announcements for Windows. **This does not require Python.** +You can **[download](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) the latest executable version** of ProgramVer for Windows. **This does not require Python.** ## How To Use @@ -70,10 +70,10 @@ To clone and run this application, you'll need [Git](https://git-scm.com/downloa ```bash # Clone this repository -$ git clone https://github.com/ProgramVer/Auto-Anouncements.git +$ git clone https://github.com/Dog-Face-Development/ProgramVer.git # Go into the repository -$ cd Auto-Announcements +$ cd ProgramVer # Run ProgramVer $ python main.py From a45dcf73ea777bad77505d967cb6f8bf0c2e5dfc Mon Sep 17 00:00:00 2001 From: William Date: Tue, 6 Sep 2022 12:34:07 -0700 Subject: [PATCH 18/98] fix(webflow): Update docker-publish.yml to target master branch instead of main --- .github/workflows/docker-publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index e2b4237..0e132cf 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -4,11 +4,11 @@ on: schedule: - cron: '32 11 * * *' push: - branches: [ "main" ] + branches: [ "master" ] # Publish semver tags as releases. tags: [ 'v*.*.*' ] pull_request: - branches: [ "main" ] + branches: [ "master" ] env: # Use docker.io for Docker Hub if empty From f9333ef17d277a389710c6a73c6e565dd3ea66d8 Mon Sep 17 00:00:00 2001 From: William Date: Tue, 6 Sep 2022 12:34:32 -0700 Subject: [PATCH 19/98] fix(.github/workflows): Update test.yml to target master branch instead of main --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6ceece2..cdc7bd2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,9 +2,9 @@ name: test on: push: - branches: [ "main" ] + branches: [ "master" ] pull_request: - branches: [ "main" ] + branches: [ "master" ] permissions: contents: read From 016f2d653c9e88267514870f01c718327ba2504c Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 16:04:35 -0700 Subject: [PATCH 20/98] docs(workflows): delete build.yml file to simplify workflow configuration --- .github/workflows/build.yml | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 7a868c3..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: build - -on: [push, pull_request] - -jobs: - build_wheels: - name: Build wheels on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04, windows-2019] - - steps: - - uses: actions/checkout@v3 - - # Used to host cibuildwheel - - uses: actions/setup-python@v3 - - - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.9.0 - - - name: Build wheels - run: python -m cibuildwheel --output-dir wheelhouse - # to supply options, put them in 'env', like: - # env: - # CIBW_SOME_OPTION: value - - - uses: actions/upload-artifact@v3 - with: - path: ./wheelhouse/*.whl From 71b4d09de9dc299793c91fb2d77769ff8375ee55 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 16:06:19 -0700 Subject: [PATCH 21/98] fix(.github/workflows): Remove dependency-review.yml file from workflow directory --- .github/workflows/dependency-review.yml | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .github/workflows/dependency-review.yml diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml deleted file mode 100644 index d9d789f..0000000 --- a/.github/workflows/dependency-review.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: 'dependency-review' -on: [pull_request, push] - -permissions: - contents: read - -jobs: - dependency-review: - runs-on: ubuntu-latest - steps: - - name: 'Checkout Repository' - uses: actions/checkout@v3 - - name: Dependency Review - uses: actions/dependency-review-action@main From 18a8e55948fe51257fa473a061c69071ffca8f75 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 16:06:26 -0700 Subject: [PATCH 22/98] feat(apps): Delete docker-publish.yml --- .github/workflows/docker-publish.yml | 88 ---------------------------- 1 file changed, 88 deletions(-) delete mode 100644 .github/workflows/docker-publish.yml diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml deleted file mode 100644 index 0e132cf..0000000 --- a/.github/workflows/docker-publish.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: docker-publish - -on: - schedule: - - cron: '32 11 * * *' - push: - branches: [ "master" ] - # Publish semver tags as releases. - tags: [ 'v*.*.*' ] - pull_request: - branches: [ "master" ] - -env: - # Use docker.io for Docker Hub if empty - REGISTRY: ghcr.io - # github.repository as / - IMAGE_NAME: ${{ github.repository }} - - -jobs: - build: - - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - # This is used to complete the identity challenge - # with sigstore/fulcio when running outside of PRs. - id-token: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - # Install the cosign tool except on PR - # https://github.com/sigstore/cosign-installer - - name: Install cosign - if: github.event_name != 'pull_request' - uses: sigstore/cosign-installer@7e0881f8fe90b25e305bbf0309761e9314607e25 - with: - cosign-release: 'v1.9.0' - - - # Workaround: https://github.com/docker/build-push-action/issues/461 - - name: Setup Docker buildx - uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf - - # Login against a Docker registry except on PR - # https://github.com/docker/login-action - - name: Log into registry ${{ env.REGISTRY }} - if: github.event_name != 'pull_request' - uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - # Extract metadata (tags, labels) for Docker - # https://github.com/docker/metadata-action - - name: Extract Docker metadata - id: meta - uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - # Build and push Docker image with Buildx (don't push on PR) - # https://github.com/docker/build-push-action - - name: Build and push Docker image - id: build-and-push - uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a - with: - context: . - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - - # Sign the resulting Docker image digest except on PRs. - # This will only write to the public Rekor transparency log when the Docker - # repository is public to avoid leaking data. If you would like to publish - # transparency data even for private images, pass --force to cosign below. - # https://github.com/sigstore/cosign - - name: Sign the published Docker image - if: ${{ github.event_name != 'pull_request' }} - env: - COSIGN_EXPERIMENTAL: "true" - # This step uses the identity token to provision an ephemeral certificate - # against the sigstore community Fulcio instance. - run: echo "${{ steps.meta.outputs.tags }}" | xargs -I {} cosign sign {}@${{ steps.build-and-push.outputs.digest }} From 7cc42228be683de15ffd1a4abdf0866fe1143ca7 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 16:06:46 -0700 Subject: [PATCH 23/98] fix(workflows): rename `push-to-pyi` workflow to `PyPI Build` --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index cefdb2f..01152ce 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -1,4 +1,4 @@ -name: push-to-pypi +name: PyPI Build on: release: From 68495ddc8b12039a0903eb327167ff4209341284 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 16:06:58 -0700 Subject: [PATCH 24/98] fix(.github/workflows): Delete test.yml file --- .github/workflows/test.yml | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index cdc7bd2..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: test - -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.10 - uses: actions/setup-python@v3 - with: - python-version: "3.10" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install pytest - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - run: | - pytest From 6ddd4d6118f20a2bd38d971f11b0e14d9ee4461f Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 16:21:04 -0700 Subject: [PATCH 25/98] feat(build-system): update build-backend and requirements --- __init__.py | 3 +++ __main__.py | 4 ++++ ProgramVer.py => main.py | 20 +++++++++++++++++--- pyproject.toml | 25 +++++++++++++++++++++++++ requirements.txt | 1 + setup.cfg | 7 +++++++ setup.py | 27 +++++++++++++++++++++++++++ 7 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 __init__.py create mode 100644 __main__.py rename ProgramVer.py => main.py (76%) create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 setup.cfg create mode 100644 setup.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..f18b480 --- /dev/null +++ b/__init__.py @@ -0,0 +1,3 @@ +# Initialize PyPI Package + +__all__ = ["ProgramVer"] diff --git a/__main__.py b/__main__.py new file mode 100644 index 0000000..65d6064 --- /dev/null +++ b/__main__.py @@ -0,0 +1,4 @@ +from main import ProgramVer + +if __name__ == '__main__': + ProgramVer() diff --git a/ProgramVer.py b/main.py similarity index 76% rename from ProgramVer.py rename to main.py index 73a86f2..de8e2b3 100644 --- a/ProgramVer.py +++ b/main.py @@ -1,5 +1,19 @@ -# This is the standard program used by Dog Face Development Co. for versioning and displaying copyright infor for their products. -# Copyright (C) 2017 - 2022 Dog Face Development Co. +""" +ProgramVer - A Python version of Microsoft's 'winver'. +Copyright (C) 2017-2022 Dog Face Development Co. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" # Import Statements from tkinter import * @@ -36,7 +50,7 @@ def ProgramVer(): pythonimage = PhotoImage(file='pythonpoweredlengthgif.gif') dfdlogo = Label(window, image = dfdimage) pythonpowered = Label(window, image = pythonimage) - info = Label(window, text='ProgramVer \n Version: 1.8.0 (Build 1080)') #change respectively + info = Label(window, text='ProgramVer \n Version: 1.9.0 (Build #)') #change respectively trademarks = Label(window, text='Copyright (C) 2017 - 2022 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed licenseblurb = Label(window, text="""\n ProgramVer - Version window for DFD Co.'s programs Copyright (C) 2017-2022 Dog Face Development Company diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..ba56c0d --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,25 @@ +[build-system] +build-backend = "setuptools.build_meta" +requires = ["setuptools", "wheel"] + +[project] +name = "ProgramVer" +version = "1.9.0" +authors = [ + { name= "willtheorangeguy" }, +] +description = "A Python version of Microsoft's 'winver', built to be customizable, and to show copyright info and licenses." +readme = "README.md" +license = { file="LICENSE.md" } +requires-python = ">=3.9" +classifiers = [ + 'Development Status :: 5 - Production/Stable', + 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + 'Natural Language :: English', + 'Operating System :: OS Independent', + 'Topic :: Software Development :: User Interfaces', +] + +[project.urls] +"Homepage" = "https://github.com/Dog-Face-Development/ProgramVer" +"Bug Tracker" = "https://github.com/Dog-Face-Development/ProgramVer/issues" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2dcd9aa --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +# Project Requirements diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..7843475 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,7 @@ +[metadata] +name = programver +version = 1.9.0 + +[options.entry_points] +console_scripts = + programver = main:ProgramVer \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..1d12318 --- /dev/null +++ b/setup.py @@ -0,0 +1,27 @@ +from setuptools import setup + +def readme(): + with open('README.md') as f: + return f.read() + +setup( + name='programver', + version='1.9.0', + description="A Python version of Microsoft's 'winver', built to be customizable, and to show copyright info and licenses.", + long_description=readme(), + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + 'Natural Language :: English', + 'Operating System :: OS Independent', + 'Topic :: Software Development :: User Interfaces', + ], + keywords='program version windows winver microsoft license gui', + url='https://github.com/Dog-Face-Development/ProgramVer', + author='willtheorangeguy', + entry_points={ + 'console_scripts': [ + 'programver=main:ProgramVer' + ] + }, +) From 89bb941353678c069f2eca90e071946a398ebcf8 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 17:00:34 -0700 Subject: [PATCH 26/98] docs: update license and EULA files to point to new img locations --- MANIFEST.in | 2 + __init__.py | 2 +- __main__.py | 62 +++++++++++++++++- dfdlogo.gif => imgs/dfdlogo.gif | Bin .../pythonpoweredlengthgif.gif | Bin main.py | 4 +- pyproject.toml | 8 ++- setup.cfg | 9 +++ setup.py | 5 +- 9 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 MANIFEST.in rename dfdlogo.gif => imgs/dfdlogo.gif (100%) rename pythonpoweredlengthgif.gif => imgs/pythonpoweredlengthgif.gif (100%) diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..7ead327 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,2 @@ +include imgs/dfdlogo.gif +include imgs/pythonpoweredlengthgif.gif \ No newline at end of file diff --git a/__init__.py b/__init__.py index f18b480..e745151 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1,3 @@ # Initialize PyPI Package -__all__ = ["ProgramVer"] +__all__ = ["main"] diff --git a/__main__.py b/__main__.py index 65d6064..d1e6594 100644 --- a/__main__.py +++ b/__main__.py @@ -1,4 +1,64 @@ -from main import ProgramVer +# Import Statements +from tkinter import * +import os + +# Document Functions +def openLicense(): + windowl = Tk() + licensefile = open('LICENSE.txt', 'r') #change file address as needed + licensecontents = licensefile.read() + licensefile.close() + windowl.title('License') + licensetext = Text(windowl) + licensetext.insert(INSERT, licensecontents) + licensetext.pack() + +def openEULA(): + windowl = Tk() + eulafile = open('EULA.txt', 'r') # change file address as needed + eulacontents = eulafile.read() + eulafile.close() + windowl.title('EULA') + eulatext = Text(windowl) + eulatext.insert(INSERT, eulacontents) + eulatext.pack() + +# ProgramVer Function +def ProgramVer(): + window = Tk() + # Window Elements + window.title('Copyright & Version Info for ProgramVer') #change name based on program name + # UI Elements + dfdimage = PhotoImage(file='imgs/dfdlogo.gif') + pythonimage = PhotoImage(file='imgs/pythonpoweredlengthgif.gif') + dfdlogo = Label(window, image = dfdimage) + pythonpowered = Label(window, image = pythonimage) + info = Label(window, text='ProgramVer \n Version: 1.9.0 (Build #)') #change respectively + trademarks = Label(window, text='Copyright (C) 2017 - 2022 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed + licenseblurb = Label(window, text="""\n ProgramVer - Version window for DFD Co.'s programs + Copyright (C) 2017-2022 Dog Face Development Company + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, version 3 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License below for more details.""") #change as needed + licensebtn = Button(window, text='Open License', command=openLicense) + eulabtn = Button(window, text='Open EULA', command=openEULA) + # Pack Statements + dfdlogo.pack(side=TOP) + info.pack(side=TOP) + trademarks.pack(side=TOP) + licenseblurb.pack(side=TOP) + licensebtn.pack(pady=5) + eulabtn.pack(pady=5) + pythonpowered.pack(side=BOTTOM) + # Maintain Window + window.mainloop() + if __name__ == '__main__': ProgramVer() diff --git a/dfdlogo.gif b/imgs/dfdlogo.gif similarity index 100% rename from dfdlogo.gif rename to imgs/dfdlogo.gif diff --git a/pythonpoweredlengthgif.gif b/imgs/pythonpoweredlengthgif.gif similarity index 100% rename from pythonpoweredlengthgif.gif rename to imgs/pythonpoweredlengthgif.gif diff --git a/main.py b/main.py index de8e2b3..e5c137a 100644 --- a/main.py +++ b/main.py @@ -46,8 +46,8 @@ def ProgramVer(): # Window Elements window.title('Copyright & Version Info for ProgramVer') #change name based on program name # UI Elements - dfdimage = PhotoImage(file='dfdlogo.gif') - pythonimage = PhotoImage(file='pythonpoweredlengthgif.gif') + dfdimage = PhotoImage(file='imgs/dfdlogo.gif') + pythonimage = PhotoImage(file='imgs/pythonpoweredlengthgif.gif') dfdlogo = Label(window, image = dfdimage) pythonpowered = Label(window, image = pythonimage) info = Label(window, text='ProgramVer \n Version: 1.9.0 (Build #)') #change respectively diff --git a/pyproject.toml b/pyproject.toml index ba56c0d..a4918bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,4 +22,10 @@ classifiers = [ [project.urls] "Homepage" = "https://github.com/Dog-Face-Development/ProgramVer" -"Bug Tracker" = "https://github.com/Dog-Face-Development/ProgramVer/issues" \ No newline at end of file +"Bug Tracker" = "https://github.com/Dog-Face-Development/ProgramVer/issues" + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +where = ["imgs"] \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 7843475..5c00bca 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,6 +2,15 @@ name = programver version = 1.9.0 +[options] +packages = find: +package_dir = + = imgs +include_package_data = True + +[options.packages.find] +where = imgs + [options.entry_points] console_scripts = programver = main:ProgramVer \ No newline at end of file diff --git a/setup.py b/setup.py index 1d12318..5930264 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,4 @@ -from setuptools import setup +from setuptools import setup, find_packages def readme(): with open('README.md') as f: @@ -19,6 +19,9 @@ def readme(): keywords='program version windows winver microsoft license gui', url='https://github.com/Dog-Face-Development/ProgramVer', author='willtheorangeguy', + packages=find_packages(where="imgs"), + package_dir={"": "imgs"}, + include_package_data=True, entry_points={ 'console_scripts': [ 'programver=main:ProgramVer' From 1b1b200f7aad264264f6ddd20e8c20e5b7e57706 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 17:05:39 -0700 Subject: [PATCH 27/98] fix(ProgramVer.py): rename file --- ProgramVer.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ProgramVer.py b/ProgramVer.py index 73a86f2..ba9dd7a 100644 --- a/ProgramVer.py +++ b/ProgramVer.py @@ -1,3 +1,4 @@ +<<<<<<< Updated upstream:ProgramVer.py # This is the standard program used by Dog Face Development Co. for versioning and displaying copyright infor for their products. # Copyright (C) 2017 - 2022 Dog Face Development Co. @@ -61,3 +62,10 @@ def ProgramVer(): pythonpowered.pack(side=BOTTOM) # Maintain Window window.mainloop() +======= +from main import ProgramVer + + +if __name__ == '__main__': + ProgramVer() +>>>>>>> Stashed changes:__main__.py From a028533cb85ace18134f1f560e3f45291da1d9d8 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 17:11:45 -0700 Subject: [PATCH 28/98] feat: Add new installation instructions for Python and Git --- README.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1a157da..857a961 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,7 @@
- GitHub Test State - - GitHub Build State + PyPI Build State Pylint State @@ -66,19 +64,35 @@ You can **[download](https://github.com/Dog-Face-Development/ProgramVer/releases ## How To Use -To clone and run this application, you'll need [Git](https://git-scm.com/downloads) and [Python](https://www.python.org/downloads/) installed on your computer. If you would rather not use Git, you can just download the scripts from GitHub above. From your command line: +To run the application, you can use [Git and the Python Interpreter](https://github.com/Dog-Face-Development/ProgramVer/main/README.md#git), which allows you to clone and run the application, or [`pip`](https://github.com/Dog-Face-Development/ProgramVer/main/README.md#pip) to create a command line application. + +### Git + +To clone and run this application, you'll need [Git](https://git-scm.com/downloads) and [Python](https://www.python.org/downloads/) installed on your computer. If you would rather not use Git, you can just download the script from GitHub above. From your command line: ```bash # Clone this repository -$ git clone https://github.com/Dog-Face-Development/ProgramVer.git +$ git clone https://github.com/Dog-Face-Development/ProgramVer # Go into the repository $ cd ProgramVer -# Run ProgramVer +# Run the CLI $ python main.py ``` +### `pip` + +You can install the program from the [Python Package Index](https://pypi.org/project/programver/) through `pip`. + +```bash +# Install via pip +$ pip install programver + +# Run the CLI +$ programver +``` + However, you may want to add the version window to your program. To do so, follow these steps: 1. Download the latest source code release from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. From 084e1ddb8575119b1f09fbf89a1a428f2d8b2a13 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 17:14:00 -0700 Subject: [PATCH 29/98] feat: Add new install instructions for ProgramVer --- docs/USAGE.md | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/docs/USAGE.md b/docs/USAGE.md index 1aa5e50..79a2956 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -1,11 +1,26 @@ # ProgramVer Usage -To add ProgramVer to your project, follow the steps below. To customize the program to your needs, see [`CUSTOMIZATION`](CUSTOMIZATION.md). - -1. To add the version window to your project, download the latest source code release from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. -2. Extract the source code files using a program like [7-Zip](https://www.7-zip.org/). -3. Copy the `ProgramVer.py` file to your project's main directory. -4. Import ProgramVer by adding `from ProgramVer import *` to your Python `import` statements. -5. Customize the version window by following the instructions in [`CUSTOMIZATION`](CUSTOMIZATION.md). -6. Call ProgramVer through the `ProgramVer()` function. -7. Enjoy your new version window! +To install ProgramVer, you can use an executable package (Windows), run the scripts through Python (Windows, macOS, Linux), or install from the [Python Package Index](https://pypi.org/). + +## Executable Package + +1. To run the executable package, download the latest `.zip` file from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. +2. Extract the `.zip` file using a program like [7-Zip](https://www.7-zip.org/). +3. _(Optional) Move the files to `C:\Program Files` and create a shortcut._ +4. Double click on `send.exe`. +5. Enjoy the program! + +## Python Script + +1. To run the Python script, download the latest source code release from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. +2. Download and install [Python](https://www.python.org/downloads/). +3. Extract the source code files using a program like [7-Zip](https://www.7-zip.org/). +4. Double click on `send.py`, or right-click and open with IDLE and press `F5`. +5. Enjoy the program! + +## Python Package Index (`pip`) + +1. Download and install [Python](https://www.python.org/downloads/). +2. Open a terminal and run the command: `pip install lego-block-creator`. +3. Start the program by running the command: `lego-block-creator`. +4. Enjoy the program! From c2ad7dddf1852c23f37771a3946e886021b639b7 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 17:17:12 -0700 Subject: [PATCH 30/98] docs: update changelog to include v1.9.0 release details --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c170db9..483d67d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [v1.9.0](https://github.com/Dog-Face-Development/ProgramVer/releases/tag/1.9.0) + +### Added + +- PyPI Package. + ## [v1.8.0](https://github.com/Dog-Face-Development/ProgramVer/releases/tag/1.8.0) ### Added From 32b601831732ee0149dcda951c8a9ff89c53b3a1 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 11 Sep 2022 22:34:05 -0700 Subject: [PATCH 31/98] feat(setup): update setup.py to include new module --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 5930264..4514458 100644 --- a/setup.py +++ b/setup.py @@ -22,6 +22,7 @@ def readme(): packages=find_packages(where="imgs"), package_dir={"": "imgs"}, include_package_data=True, + py_modules = ['main'], entry_points={ 'console_scripts': [ 'programver=main:ProgramVer' From 55bdf24e2f1a816e912df51b31a598588a1a918e Mon Sep 17 00:00:00 2001 From: William Date: Wed, 14 Sep 2022 22:57:41 -0700 Subject: [PATCH 32/98] feat(github actions): add daily github actions updates to .github/dependabot.yml --- .github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a939573..2201990 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,5 +1,9 @@ version: 2 updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" - package-ecosystem: "pip" directory: "/" schedule: From 4ab43d09a10831f6f15e027ed8dd93f7295ef02a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 05:58:00 +0000 Subject: [PATCH 33/98] chore(workflows): update GitHub Action dependency version --- .github/workflows/cla.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index 002c923..a9930f4 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -12,7 +12,7 @@ jobs: - name: "CLA Assistant" if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' # Beta Release - uses: contributor-assistant/github-action@v2.2.0 + uses: contributor-assistant/github-action@v2.2.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret From 27ea6c2f735f41fc3857860a312ba4b503d90879 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 05:58:03 +0000 Subject: [PATCH 34/98] feat: upgrade setup-python to v4 --- .github/workflows/push-to-pypi.yml | 2 +- .github/workflows/pylint.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 01152ce..271ea3d 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Set up Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: '3.x' - name: Install dependencies diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 8f5c9b8..95c4f9a 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies From d56e0bc86db459ac3362e2186850937d4ed94165 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 05:58:05 +0000 Subject: [PATCH 35/98] fix(package): update pypa/gh-action-pypi-publish dependency --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 01152ce..1c2823a 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + uses: pypa/gh-action-pypi-publish@37f50c210e3d2f9450da2cd423303d6a14a6e29f with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From c3bb440db56cddd4f2de51e048c840c5e2bc10d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 02:57:41 +0000 Subject: [PATCH 36/98] fix(workflows): update actions/checkout to version 3 --- .github/workflows/pylint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 95c4f9a..ea95173 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -14,7 +14,7 @@ jobs: matrix: python-version: ["3.9"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: From 2396899d36a404bb5040002118063ddfc2569ee8 Mon Sep 17 00:00:00 2001 From: ImgBotApp Date: Sat, 8 Oct 2022 04:03:49 +0000 Subject: [PATCH 37/98] fix(images): Optimize image sizes --- docs/images/logo.png | Bin 23417 -> 18691 bytes docs/images/welcome.png | Bin 212306 -> 179639 bytes imgs/dfdlogo.gif | Bin 7892 -> 7849 bytes imgs/pythonpoweredlengthgif.gif | Bin 3300 -> 3292 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/logo.png b/docs/images/logo.png index 0ee0ee02fe06c23491a75ba59126bf3bcda0182c..f41c946fc682da45f8bec88d04f194057b78d755 100644 GIT binary patch literal 18691 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 Hr-UW|T;uF* diff --git a/docs/images/welcome.png b/docs/images/welcome.png index a2270ab4a932c14a83fa4261f888981aecd46358..fb92697f7c5c58fd7c3e163960e582422023bc48 100644 GIT binary patch literal 179639 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 Mp8wnXx6 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

bm)vM_qod6^!e0z>pSTb=4-%JRu5gtf2 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 eVDI?uy`|Uxe}F)U7AG*^j;0 literal 212306 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 delta 2082 zcmV+-2;KLoJ=8r5M@dFFIbl5kbO7hE3jzZ;A^!_bMO0HmK~P09E-(WD0ssIZ`2+|6 z0RI3X{tZxRV{db9Z*x>{Z)|e_EC2ui06hV8000R7lNkg40{%^t83g?U{&vih83p_V z{vFYhlNkp41^&Pa3HOs32l@v7*jz%&F_Rex`3L?2D0Juw(UTbo_z3=p!7H8;k5`i! z3ik>ARI?h40{{YHlNk&43jQd@0044gOP+{(y!K7@Wd6oTQT(5AqKFc|bCBc?o=C2PTk10+SgK@elrm zxwdD^W2AGC2ZfUlB$F8t@DTpHymGJ#*KiAR01FEty>XKn67LcIabUy+0Svm=#6Q3U z_+<~UlNl5468_4KQvs@{4=LcKJNtL4oWfg^85Hdk{?xt#5eq`_0}%}i{j9)}`_SpW|#Lj*i75UZdAN3hNulNlE475)qS-6m7)4|4Fsw*dz^paf*w3f+?# z7wQ)NVGBZ_1l(N^*nkc4(9T%E?*ifPI+Ga~Fn@9fSIG|m!ORI7VEzmqM3~T@uOLCR zB@}n11{Ppda$vC+Ph&iI2eag8(q_mHTL)XwNa9Q0MvZN9AnB(tON}ey6z+plg9x^M zIdV+F5;V&$d;V?_(J{*(HY`n6`ICo5M;w1HlZa#4@d}Na{^aENk)%eFeFytB$?+@M(;Z*4mVpAb29Yad81squLV79-i^!10&A0HEU^5DUf=W*o8kL}FS zg2y_c!sMPR@EVIy33$T6IsKJSc5RykCChQ3(h#II$2%9Eo((5-3Hx%p_ zHm=C09(Lwv!H(HzJMp#4v@nCTelkfQMi~=0V2*qIxhD_p+tNJ2lZsIz4V00lJYthCl*%NH!E_$8)&sA)roAog?v zELE;C$R1y=$iXjv`oRiHQ=!yLpMMeOC~`6*YrCujKuGgv69piUfC620g+PO6N^4<( zTz91a0tGTTh!hZ5B~muYOq}gC5Orl{3Hd;9s7HnJ+VwH1QS>+*Wrl?^DD&kND3nAK#MN$9@Oz5Z__J2gkz8vt& zA>Vyr>1RLc_PJ}UF-Ik^+JyFDMM5IlScMHGY7in0_xy>+q8ylz1C})m4T6=jfT5xd z>Q4Rz`nPi|F~PMWDRY)cE<_-MR$LN*00XI~#()A}OY>rg^K8Mz{?3%3_nO4HXiSBV8MJ{AvFWC0BaL?DI! z4zh|Y0Ha#JxB>zXm<2XaqZSfGAQrIGDPN>)4RWwWhDNoDRctUJ+K9y}&NQ-Hu;Lf~ zxF80z(1v*ULJqeeo_|5KA%|IftRJdC!wU%mClaEICv2exEZC5RIM`xAI%IP2N+{Bh$sOahGe8X*nti$u*9#b zxJN$r(T{%wWFUif3`1nGHng#W3BI5jf6Su+5g1?l+Gj>IVtW{{wPNvNZ?q=PSy*Ng{&X^&UG!vJ}oFt-2z From 42454c8a3213b4ffe5e372ae3cdb366293113fed Mon Sep 17 00:00:00 2001 From: DeepSource Bot Date: Tue, 11 Oct 2022 03:11:09 +0000 Subject: [PATCH 38/98] fix(deepsource configuration): add .deepsource.toml file with default settings --- .deepsource.toml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 0000000..07646cf --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,24 @@ +version = 1 + +exclude_patterns = [ + "/dist", + "/build" +] + +[[analyzers]] +name = "python" +enabled = true + + [analyzers.meta] + runtime_version = "3.x.x" + +[[analyzers]] +name = "docker" +enabled = true + + [analyzers.meta] + dockerfile_paths = ["Dockerfile"] + +[[transformers]] +name = "black" +enabled = true \ No newline at end of file From 262a734d8ef3055ab71f80e27edfc3d270f8301f Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 03:11:19 +0000 Subject: [PATCH 39/98] style: fix --- __main__.py | 2 +- main.py | 42 +++++++++++++++++++++++++++--------------- setup.py | 32 +++++++++++++++----------------- 3 files changed, 43 insertions(+), 33 deletions(-) diff --git a/__main__.py b/__main__.py index 65d6064..21bf3b4 100644 --- a/__main__.py +++ b/__main__.py @@ -1,4 +1,4 @@ from main import ProgramVer -if __name__ == '__main__': +if __name__ == "__main__": ProgramVer() diff --git a/main.py b/main.py index e5c137a..c6caf4f 100644 --- a/main.py +++ b/main.py @@ -22,37 +22,48 @@ # Document Functions def openLicense(): windowl = Tk() - licensefile = open('LICENSE.txt', 'r') #change file address as needed + licensefile = open("LICENSE.txt", "r") # change file address as needed licensecontents = licensefile.read() licensefile.close() - windowl.title('License') + windowl.title("License") licensetext = Text(windowl) licensetext.insert(INSERT, licensecontents) licensetext.pack() + def openEULA(): windowl = Tk() - eulafile = open('EULA.txt', 'r') # change file address as needed + eulafile = open("EULA.txt", "r") # change file address as needed eulacontents = eulafile.read() eulafile.close() - windowl.title('EULA') + windowl.title("EULA") eulatext = Text(windowl) eulatext.insert(INSERT, eulacontents) eulatext.pack() + # ProgramVer Function def ProgramVer(): window = Tk() # Window Elements - window.title('Copyright & Version Info for ProgramVer') #change name based on program name + window.title( + "Copyright & Version Info for ProgramVer" + ) # change name based on program name # UI Elements - dfdimage = PhotoImage(file='imgs/dfdlogo.gif') - pythonimage = PhotoImage(file='imgs/pythonpoweredlengthgif.gif') - dfdlogo = Label(window, image = dfdimage) - pythonpowered = Label(window, image = pythonimage) - info = Label(window, text='ProgramVer \n Version: 1.9.0 (Build #)') #change respectively - trademarks = Label(window, text='Copyright (C) 2017 - 2022 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.') #change as needed - licenseblurb = Label(window, text="""\n ProgramVer - Version window for DFD Co.'s programs + dfdimage = PhotoImage(file="imgs/dfdlogo.gif") + pythonimage = PhotoImage(file="imgs/pythonpoweredlengthgif.gif") + dfdlogo = Label(window, image=dfdimage) + pythonpowered = Label(window, image=pythonimage) + info = Label( + window, text="ProgramVer \n Version: 1.9.0 (Build #)" + ) # change respectively + trademarks = Label( + window, + text="Copyright (C) 2017 - 2022 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.", + ) # change as needed + licenseblurb = Label( + window, + text="""\n ProgramVer - Version window for DFD Co.'s programs Copyright (C) 2017-2022 Dog Face Development Company This program is free software: you can redistribute it and/or modify @@ -62,9 +73,10 @@ def ProgramVer(): This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License below for more details.""") #change as needed - licensebtn = Button(window, text='Open License', command=openLicense) - eulabtn = Button(window, text='Open EULA', command=openEULA) + GNU General Public License below for more details.""", + ) # change as needed + licensebtn = Button(window, text="Open License", command=openLicense) + eulabtn = Button(window, text="Open EULA", command=openEULA) # Pack Statements dfdlogo.pack(side=TOP) info.pack(side=TOP) diff --git a/setup.py b/setup.py index 4514458..b4bcbdc 100644 --- a/setup.py +++ b/setup.py @@ -1,31 +1,29 @@ from setuptools import setup, find_packages + def readme(): - with open('README.md') as f: + with open("README.md") as f: return f.read() + setup( - name='programver', - version='1.9.0', + name="programver", + version="1.9.0", description="A Python version of Microsoft's 'winver', built to be customizable, and to show copyright info and licenses.", long_description=readme(), classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', - 'Natural Language :: English', - 'Operating System :: OS Independent', - 'Topic :: Software Development :: User Interfaces', + "Development Status :: 5 - Production/Stable", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Natural Language :: English", + "Operating System :: OS Independent", + "Topic :: Software Development :: User Interfaces", ], - keywords='program version windows winver microsoft license gui', - url='https://github.com/Dog-Face-Development/ProgramVer', - author='willtheorangeguy', + keywords="program version windows winver microsoft license gui", + url="https://github.com/Dog-Face-Development/ProgramVer", + author="willtheorangeguy", packages=find_packages(where="imgs"), package_dir={"": "imgs"}, include_package_data=True, - py_modules = ['main'], - entry_points={ - 'console_scripts': [ - 'programver=main:ProgramVer' - ] - }, + py_modules=["main"], + entry_points={"console_scripts": ["programver=main:ProgramVer"]}, ) From 4ee0e18b603775c751aea25db634bfcfe807e316 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 02:11:05 +0000 Subject: [PATCH 40/98] fix: update workflow to use latest gh-action-pypi-publish version --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index fc9659b..fdc01e4 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@37f50c210e3d2f9450da2cd423303d6a14a6e29f + uses: pypa/gh-action-pypi-publish@d7edd4c95736a5bc1260d38b5523f5d24338bc25 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 44bef0d5b4b1896a65615a2f96a7fe9c5be3585c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 02:15:16 +0000 Subject: [PATCH 41/98] feat(workflows): update dependency to latest version of pypa/gh-action-pypi-publish --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index fdc01e4..d05464a 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@d7edd4c95736a5bc1260d38b5523f5d24338bc25 + uses: pypa/gh-action-pypi-publish@5d1679fa6b895587c6eb10c3fe82205b440a580e with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From f1b405d73f9d8fdd127f3b21288379346f18c59b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 02:09:21 +0000 Subject: [PATCH 42/98] build(pypi): update dependency to v1.6.4 --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index d05464a..ec561d7 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@5d1679fa6b895587c6eb10c3fe82205b440a580e + uses: pypa/gh-action-pypi-publish@c7f29f7adef1a245bd91520e94867e5c6eedddcc with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 8cdebcc418aad0a1aeeb834a2440c4f865cf2606 Mon Sep 17 00:00:00 2001 From: William Date: Tue, 3 Jan 2023 12:41:16 +0000 Subject: [PATCH 43/98] docs(copyright): Bump copyright year to 2023 --- main.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index c6caf4f..22cbeba 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ """ ProgramVer - A Python version of Microsoft's 'winver'. -Copyright (C) 2017-2022 Dog Face Development Co. +Copyright (C) 2017-2023 Dog Face Development Co. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -59,12 +59,12 @@ def ProgramVer(): ) # change respectively trademarks = Label( window, - text="Copyright (C) 2017 - 2022 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.", + text="Copyright (C) 2017 - 2023 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.", ) # change as needed licenseblurb = Label( window, text="""\n ProgramVer - Version window for DFD Co.'s programs - Copyright (C) 2017-2022 Dog Face Development Company + Copyright (C) 2017-2023 Dog Face Development Company This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 3dfa1da7041c8e009e5f49f8812ba934906e88f1 Mon Sep 17 00:00:00 2001 From: "restyled-io[bot]" <32688539+restyled-io[bot]@users.noreply.github.com> Date: Tue, 3 Jan 2023 12:42:17 +0000 Subject: [PATCH 44/98] fix(main): bump copyright year to 2023 --- main.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 22cbeba..244888c 100644 --- a/main.py +++ b/main.py @@ -14,12 +14,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ +import os +from tkinter import * # Import Statements -from tkinter import * -import os # Document Functions + + def openLicense(): windowl = Tk() licensefile = open("LICENSE.txt", "r") # change file address as needed @@ -65,7 +67,7 @@ def ProgramVer(): window, text="""\n ProgramVer - Version window for DFD Co.'s programs Copyright (C) 2017-2023 Dog Face Development Company - + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. From 1e0b0c376bf6b4de0e6fbde5c5c0efd968e2f723 Mon Sep 17 00:00:00 2001 From: "restyled-io[bot]" <32688539+restyled-io[bot]@users.noreply.github.com> Date: Tue, 3 Jan 2023 12:42:43 +0000 Subject: [PATCH 45/98] docs: update copyright year to 2023 From 7377f0b111d78168d1e9a3f88f3ede6ee57cdcb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Feb 2023 03:00:57 +0000 Subject: [PATCH 46/98] feat(contributor-assistant/github-action): update dependency to v2.3.0 --- .github/workflows/cla.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index a9930f4..8afc4c9 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -12,7 +12,7 @@ jobs: - name: "CLA Assistant" if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' # Beta Release - uses: contributor-assistant/github-action@v2.2.1 + uses: contributor-assistant/github-action@v2.3.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret From 3d744f2a886b2b6665668d56cac6b05b52132b3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 03:05:07 +0000 Subject: [PATCH 47/98] fix(workflows): update dependencies of `pypa/gh-action-pypi-publish` --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index ec561d7..4f5a9e6 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@c7f29f7adef1a245bd91520e94867e5c6eedddcc + uses: pypa/gh-action-pypi-publish@22b4d1f12511f2696162c08546dafbaa903448a2 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 46f8575de7d4afbc8f42620be1e0b3356bf0b849 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 03:02:20 +0000 Subject: [PATCH 48/98] fix(workflows): update pypa/gh-action-pypi-publish version in push-to-pypi workflow --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 4f5a9e6..a457dfe 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@22b4d1f12511f2696162c08546dafbaa903448a2 + uses: pypa/gh-action-pypi-publish@a3a3bafbb3e5a75a854ae1bc53ae128cf22c4af4 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From dc44bd8a6e0b45c9e401f8003af76908ef474f0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 03:03:15 +0000 Subject: [PATCH 49/98] fix(.github/workflows/push-to-pypi.yml): update pypa/gh-action-pypi-publish to 1.8.3 --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index a457dfe..42a3ec1 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@a3a3bafbb3e5a75a854ae1bc53ae128cf22c4af4 + uses: pypa/gh-action-pypi-publish@48b317d84d5f59668bb13be49d1697e36b3ad009 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 554921bb8c99ff03431ee9d729efe0177468758b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Apr 2023 03:10:56 +0000 Subject: [PATCH 50/98] fix(pypi): bump version of pypa/gh-action-pypi-publish --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 42a3ec1..30c250d 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@48b317d84d5f59668bb13be49d1697e36b3ad009 + uses: pypa/gh-action-pypi-publish@0bf742be3ebe032c25dd15117957dc15d0cfc38d with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 73eb86549290062316369e3f7ae15e0f7b72615c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 May 2023 03:00:43 +0000 Subject: [PATCH 51/98] feat(pip-tools): update pypa/gh-action-pypi-publish dependency --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 30c250d..fa11983 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@0bf742be3ebe032c25dd15117957dc15d0cfc38d + uses: pypa/gh-action-pypi-publish@a56da0b891b3dc519c7ee3284aff1fad93cc8598 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 0c3e323a4059ba7bf7f63f520877581ee50070ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Jun 2023 03:01:20 +0000 Subject: [PATCH 52/98] fix(push-to-pypi): update pypa/gh-action-pypi-publish to version 1.8.7 --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index fa11983..4623257 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@a56da0b891b3dc519c7ee3284aff1fad93cc8598 + uses: pypa/gh-action-pypi-publish@f5622bde02b04381239da3573277701ceca8f6a0 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 83ea9ad6ff9cc8442223be85d16beed4d3164316 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 02:09:15 +0000 Subject: [PATCH 53/98] fix(build): update GH Action to use latest version of pypa/gh-action-pypi-publish --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 4623257..3e4ae1a 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@f5622bde02b04381239da3573277701ceca8f6a0 + uses: pypa/gh-action-pypi-publish@f8c70e705ffc13c3b4d1221169b84f12a75d6ca8 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 636b212a709051dd17f5d0cd2d8693a69e7c8be2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Aug 2023 02:13:50 +0000 Subject: [PATCH 54/98] ci: update github actions workflow to use latest pypa/gh-action-pypi-publish version --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 3e4ae1a..7eed773 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@f8c70e705ffc13c3b4d1221169b84f12a75d6ca8 + uses: pypa/gh-action-pypi-publish@b7f401de30cb6434a1e19f805ff006643653240e with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 12e19bb49452c9cdecd84ca875d05e91a6a1ba09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Sep 2023 02:11:31 +0000 Subject: [PATCH 55/98] docs(actions/checkout): update dependency version in workflow files --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/push-to-pypi.yml | 2 +- .github/workflows/pylint.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a64d451..b64758c 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 7eed773..cb396ce 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index ea95173..19b4699 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -14,7 +14,7 @@ jobs: matrix: python-version: ["3.9"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: From fb22eb2cb18e122025d1196dac69a8d7a02c6ca7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 02:14:14 +0000 Subject: [PATCH 56/98] fix(ghactions): updated GitHub Actions workflow to use version 2.3.1 of contributor-assistant/github-action --- .github/workflows/cla.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index 8afc4c9..e18b637 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -12,7 +12,7 @@ jobs: - name: "CLA Assistant" if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' # Beta Release - uses: contributor-assistant/github-action@v2.3.0 + uses: contributor-assistant/github-action@v2.3.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret From aae1f2084fa729382490f6a9425599c3cd3faef5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 02:22:05 +0000 Subject: [PATCH 57/98] docs(pypa/gh-action-pypi-publish): bump version to 1.8.11 --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index cb396ce..11e56b3 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@b7f401de30cb6434a1e19f805ff006643653240e + uses: pypa/gh-action-pypi-publish@2f6f737ca5f74c637829c0f5c3acd0e29ea5e8bf with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From bdb2c558aa39884751b36cb70de7f21f108ee4b1 Mon Sep 17 00:00:00 2001 From: "deepsource-io[bot]" <42547082+deepsource-io[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 01:32:20 +0000 Subject: [PATCH 58/98] ci: update .deepsource.toml --- .deepsource.toml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.deepsource.toml b/.deepsource.toml index 07646cf..3f2ac50 100644 --- a/.deepsource.toml +++ b/.deepsource.toml @@ -1,24 +1,23 @@ version = 1 +test_patterns = ["tests/**"] + exclude_patterns = [ "/dist", "/build" ] +[[analyzers]] +name = "secrets" + [[analyzers]] name = "python" -enabled = true [analyzers.meta] runtime_version = "3.x.x" [[analyzers]] name = "docker" -enabled = true - - [analyzers.meta] - dockerfile_paths = ["Dockerfile"] [[transformers]] -name = "black" -enabled = true \ No newline at end of file +name = "black" \ No newline at end of file From bb41abaa78f2287c84fa6e89d0f56ce8f9e06fee Mon Sep 17 00:00:00 2001 From: William Vandergraaf Date: Mon, 4 Dec 2023 18:35:38 -0700 Subject: [PATCH 59/98] docs: update license file paths in main.py --- .github/workflows/pylint.yml | 4 ---- __init__.py | 3 ++- __main__.py | 3 +++ main.py | 17 ++++++++++++----- setup.py | 8 ++++++-- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 19b4699..883916f 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -26,7 +26,3 @@ jobs: - name: Analysing the code with pylint run: | pylint $(git ls-files '*.py') - - uses: smelly-python/smell-my-pr@main - with: - github-token: ${{secrets.GITHUB_TOKEN}} - command: pipenv run smelly-python -d src diff --git a/__init__.py b/__init__.py index e745151..4bd52b5 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1,4 @@ -# Initialize PyPI Package +"""Initialize PyPI Package""" +#pylint: disable=import-error, invalid-name __all__ = ["main"] diff --git a/__main__.py b/__main__.py index 21bf3b4..8698ae0 100644 --- a/__main__.py +++ b/__main__.py @@ -1,3 +1,6 @@ +"""Main entry point for the application.""" +#pylint: disable=import-error, invalid-name + from main import ProgramVer if __name__ == "__main__": diff --git a/main.py b/main.py index 244888c..af66915 100644 --- a/main.py +++ b/main.py @@ -14,8 +14,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ -import os -from tkinter import * +#pylint: disable=import-error, invalid-name + +from tkinter import Tk, Text, INSERT, PhotoImage, Label, Button, TOP, BOTTOM # Import Statements @@ -23,8 +24,9 @@ def openLicense(): + """Opens the license file in a new window.""" windowl = Tk() - licensefile = open("LICENSE.txt", "r") # change file address as needed + licensefile = open("LICENSE.txt", "r", encoding="UTF-8") # change file address as needed licensecontents = licensefile.read() licensefile.close() windowl.title("License") @@ -34,8 +36,9 @@ def openLicense(): def openEULA(): + """Opens the EULA file in a new window.""" windowl = Tk() - eulafile = open("EULA.txt", "r") # change file address as needed + eulafile = open("EULA.txt", "r", encoding="UTF-8") # change file address as needed eulacontents = eulafile.read() eulafile.close() windowl.title("EULA") @@ -46,6 +49,7 @@ def openEULA(): # ProgramVer Function def ProgramVer(): + """Main function for ProgramVer.""" window = Tk() # Window Elements window.title( @@ -61,7 +65,10 @@ def ProgramVer(): ) # change respectively trademarks = Label( window, - text="Copyright (C) 2017 - 2023 Dog Face Development Co. All rights reserved in all countries. \n ProgramVer and its code, user interface and all other associated trademarks are protected \nby trademarks and copyright in Canada, the United States and other countries.", + text="Copyright (C) 2017 - 2023 Dog Face Development Co. \ + All rights reserved in all countries. \ + \n ProgramVer and its code, user interface and all other associated trademarks are protected \ + \nby trademarks and copyright in Canada, the United States and other countries.", ) # change as needed licenseblurb = Label( window, diff --git a/setup.py b/setup.py index b4bcbdc..712f2c2 100644 --- a/setup.py +++ b/setup.py @@ -1,15 +1,19 @@ +"""Setup file for ProgramVer.""" + from setuptools import setup, find_packages def readme(): - with open("README.md") as f: + """Reads the README.md file.""" + with open("README.md", encoding="UTF-8") as f: return f.read() setup( name="programver", version="1.9.0", - description="A Python version of Microsoft's 'winver', built to be customizable, and to show copyright info and licenses.", + description="A Python version of Microsoft's 'winver', \ + built to be customizable, and to show copyright info and licenses.", long_description=readme(), classifiers=[ "Development Status :: 5 - Production/Stable", From 02b0272e21714daf312a293137d2f5af62790f5e Mon Sep 17 00:00:00 2001 From: William Vandergraaf Date: Mon, 4 Dec 2023 18:37:31 -0700 Subject: [PATCH 60/98] fix(main): Use with instead of open for file operations --- main.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index af66915..bad9112 100644 --- a/main.py +++ b/main.py @@ -26,8 +26,8 @@ def openLicense(): """Opens the license file in a new window.""" windowl = Tk() - licensefile = open("LICENSE.txt", "r", encoding="UTF-8") # change file address as needed - licensecontents = licensefile.read() + with open("LICENSE.txt", "r", encoding="UTF-8") as licensefile: + licensecontents = licensefile.read() licensefile.close() windowl.title("License") licensetext = Text(windowl) @@ -38,8 +38,8 @@ def openLicense(): def openEULA(): """Opens the EULA file in a new window.""" windowl = Tk() - eulafile = open("EULA.txt", "r", encoding="UTF-8") # change file address as needed - eulacontents = eulafile.read() + with open("EULA.txt", "r", encoding="UTF-8") as eulafile: + eulacontents = eulafile.read() eulafile.close() windowl.title("EULA") eulatext = Text(windowl) From c667b6c00d2029b0c24995d28e4079da5f16e0b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 02:08:42 +0000 Subject: [PATCH 61/98] fix(actions/setup-python): bump package from v4 to v5 --- .github/workflows/push-to-pypi.yml | 2 +- .github/workflows/pylint.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 11e56b3..14db2b0 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install dependencies diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 883916f..c419ebc 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies From 67b6da05944557f4e1ee9f5e1ea1c314ba8f2212 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 02:30:43 +0000 Subject: [PATCH 62/98] fix(codeql-action): update to version 3 --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index b64758c..90519dc 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -29,7 +29,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -43,7 +43,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -56,4 +56,4 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 From 1251c011edb688c6c5fa1e5e249418118a392a70 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 1 Jan 2024 16:58:26 -0700 Subject: [PATCH 63/98] fix(main): bump copyright year to 2024 --- main.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index bad9112..f5068f0 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ """ ProgramVer - A Python version of Microsoft's 'winver'. -Copyright (C) 2017-2023 Dog Face Development Co. +Copyright (C) 2017-2024 Dog Face Development Co. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -65,7 +65,7 @@ def ProgramVer(): ) # change respectively trademarks = Label( window, - text="Copyright (C) 2017 - 2023 Dog Face Development Co. \ + text="Copyright (C) 2017 - 2024 Dog Face Development Co. \ All rights reserved in all countries. \ \n ProgramVer and its code, user interface and all other associated trademarks are protected \ \nby trademarks and copyright in Canada, the United States and other countries.", @@ -73,7 +73,7 @@ def ProgramVer(): licenseblurb = Label( window, text="""\n ProgramVer - Version window for DFD Co.'s programs - Copyright (C) 2017-2023 Dog Face Development Company + Copyright (C) 2017-2024 Dog Face Development Company This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From bc7e0e1876210a0075e5aaa344aa64a7978dbe98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 02:23:44 +0000 Subject: [PATCH 64/98] docs(deploy): update gh-action-pypi-publish dependency to latest version --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 14db2b0..655d03f 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@2f6f737ca5f74c637829c0f5c3acd0e29ea5e8bf + uses: pypa/gh-action-pypi-publish@e53eb8b103ffcb59469888563dc324e3c8ba6f06 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 4c595ac0811a354189db3e0f47a3905773cb1a1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 02:08:29 +0000 Subject: [PATCH 65/98] fix(package): update gh-action-pypi-publish dependency to v1.8.14 --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 655d03f..b78a74b 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@e53eb8b103ffcb59469888563dc324e3c8ba6f06 + uses: pypa/gh-action-pypi-publish@81e9d935c883d0b210363ab89cf05f3894778450 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From fd2f2b4955ad79f8ad91646ae813f68670067eef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Mar 2024 02:11:29 +0000 Subject: [PATCH 66/98] fix(cla): update GitHub Action version to 2.3.2 --- .github/workflows/cla.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index e18b637..4f55460 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -12,7 +12,7 @@ jobs: - name: "CLA Assistant" if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' # Beta Release - uses: contributor-assistant/github-action@v2.3.1 + uses: contributor-assistant/github-action@v2.3.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret From 2770e60a828ed65e0c4f703bba00227bf6de620a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 02:36:22 +0000 Subject: [PATCH 67/98] feat(workflows/cla.yml): update contributor-assistant/github-action dependency to version 2.4.0 --- .github/workflows/cla.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index 4f55460..a702d80 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -12,7 +12,7 @@ jobs: - name: "CLA Assistant" if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' # Beta Release - uses: contributor-assistant/github-action@v2.3.2 + uses: contributor-assistant/github-action@v2.4.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret From 11ce4de49d517a925326f5967f199960db383bbe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 02:04:57 +0000 Subject: [PATCH 68/98] feat(build): update pypa/gh-action-pypi-publish to version 1.9.0 --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index b78a74b..cc4ee18 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@81e9d935c883d0b210363ab89cf05f3894778450 + uses: pypa/gh-action-pypi-publish@ec4db0b4ddc65acdf4bff5fa45ac92d78b56bdf0 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From add0a71743216a664863abf0a3049242e36aaff1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 02:42:02 +0000 Subject: [PATCH 69/98] fix(cla): update github-action to v2.5.1 --- .github/workflows/cla.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index a702d80..958a714 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -12,7 +12,7 @@ jobs: - name: "CLA Assistant" if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' # Beta Release - uses: contributor-assistant/github-action@v2.4.0 + uses: contributor-assistant/github-action@v2.5.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret From 096f266c4ff0d8fde42c6c3bc22759b447053e59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 02:11:34 +0000 Subject: [PATCH 70/98] fix(github-actions): update pypa/gh-action-pypi-publish dependency --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index cc4ee18..377a0b2 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@ec4db0b4ddc65acdf4bff5fa45ac92d78b56bdf0 + uses: pypa/gh-action-pypi-publish@0ab0b79471669eb3a4d647e625009c62f9f3b241 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 8f65483b866680ce1dae495b5c6abb0b120422b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 03:01:45 +0000 Subject: [PATCH 71/98] fix(CLA workflow): updated GitHub action version to 2.6.1 --- .github/workflows/cla.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index 958a714..de4db22 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -12,7 +12,7 @@ jobs: - name: "CLA Assistant" if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' # Beta Release - uses: contributor-assistant/github-action@v2.5.1 + uses: contributor-assistant/github-action@v2.6.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret From 1a4e700fece8b8127176bb3e71aa0fbd8dccfcd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 02:35:55 +0000 Subject: [PATCH 72/98] docs(build): update gh-action-pypi-publish workflow dependency --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 377a0b2..81838bc 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@0ab0b79471669eb3a4d647e625009c62f9f3b241 + uses: pypa/gh-action-pypi-publish@f7600683efdcb7656dec5b29656edb7bc586e597 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 16015a63b49b3ff32a0cc0480eb0064d789f7983 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 02:21:18 +0000 Subject: [PATCH 73/98] fix(github-actions): update pypa/gh-action-pypi-publish to latest version --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 81838bc..e9f62e2 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@f7600683efdcb7656dec5b29656edb7bc586e597 + uses: pypa/gh-action-pypi-publish@15c56dba361d8335944d31a2ecd17d700fc7bcbc with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From df9aef5530c51399ce52d08ce62358f077cbf60c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 02:29:47 +0000 Subject: [PATCH 74/98] chore(workflows): updated pypa/gh-action-pypi-publish dependency in push-to-pypi.yml workflow --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index e9f62e2..0cb0baf 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@15c56dba361d8335944d31a2ecd17d700fc7bcbc + uses: pypa/gh-action-pypi-publish@67339c736fd9354cd4f8cb0b744f2b82a74b5c70 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 337a5ba4c0421729fa24164d063e9495e0376bb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 02:13:18 +0000 Subject: [PATCH 75/98] feat(pipenv): update package dependencies to version 20201123 --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 0cb0baf..6f657b5 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@67339c736fd9354cd4f8cb0b744f2b82a74b5c70 + uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 2021e2ac26894a9e3dcecaca2e613bada2687f90 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 1 Jun 2025 09:38:26 -0700 Subject: [PATCH 76/98] fix(dependabot.yml): add ignore to prevent unnecessary updates --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2201990..29c459d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,12 +4,18 @@ updates: directory: "/" schedule: interval: "daily" + ignore: + update-types: [ "version-update:semver-patch" ] - package-ecosystem: "pip" directory: "/" schedule: interval: "daily" + ignore: + update-types: [ "version-update:semver-patch" ] - package-ecosystem: "docker" directory: "/" schedule: interval: "daily" + ignore: + update-types: [ "version-update:semver-patch" ] From 0e380d0785e147b77af78c5ff93e1353b6d8785e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 12:41:16 +0000 Subject: [PATCH 77/98] docs(actions/checkout): updated dependency version to 5 in workflow scripts --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/push-to-pypi.yml | 2 +- .github/workflows/pylint.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 90519dc..6b600f8 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 6f657b5..804d27e 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python uses: actions/setup-python@v5 with: diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index c419ebc..4f588c5 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -14,7 +14,7 @@ jobs: matrix: python-version: ["3.9"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: From df6957f32eaa66a0a52ec470cccad940bb747a3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:45:32 +0000 Subject: [PATCH 78/98] feat(workflows): update pypa/gh-action-pypi-publish to 1.13.0 --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 804d27e..08d88e1 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 27b27ea6c6757447d179e7d5af8bae7c94f837a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Sep 2025 02:04:51 +0000 Subject: [PATCH 79/98] fix(actions/setup-python): update to version 6 --- .github/workflows/push-to-pypi.yml | 2 +- .github/workflows/pylint.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 804d27e..29080d3 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.x' - name: Install dependencies diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 4f588c5..81b12b1 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v5 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies From d12eba24219947a7ea9826503b92bb056b262562 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 1 Nov 2025 01:48:16 +0000 Subject: [PATCH 80/98] feat(system): implement initial system functionality From 60e66ea7e09a2e7e863489a6c506ea2c5c4232c2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 1 Nov 2025 01:56:55 +0000 Subject: [PATCH 81/98] docs: Improve test suite documentation with clear instructions for running tests and displaying coverage reports --- .github/workflows/tests.yml | 59 +++++++++ main.py | 20 ++- pytest.ini | 10 ++ requirements.txt | 2 + tests/README.md | 100 ++++++++++++++ tests/__init__.py | 1 + tests/test_main.py | 251 ++++++++++++++++++++++++++++++++++++ 7 files changed, 437 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/tests.yml create mode 100644 pytest.ini create mode 100644 tests/README.md create mode 100644 tests/__init__.py create mode 100644 tests/test_main.py diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..4e7f967 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,59 @@ +name: Tests + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +permissions: + contents: read + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + python-version: ["3.9", "3.10", "3.11", "3.12"] + + steps: + - uses: actions/checkout@v5 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Install system dependencies (Ubuntu) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y python3-tk xvfb + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pytest pytest-cov + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + shell: bash + + - name: Run tests (Linux) + if: runner.os == 'Linux' + run: | + xvfb-run -a python -m pytest tests/ -v --cov=. --cov-report=xml --cov-report=term + + - name: Run tests (Windows/macOS) + if: runner.os != 'Linux' + run: | + python -m pytest tests/ -v --cov=. --cov-report=xml --cov-report=term + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v5 + if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12' + with: + file: ./coverage.xml + flags: unittests + name: codecov-umbrella + fail_ci_if_error: false diff --git a/main.py b/main.py index f5068f0..acba027 100644 --- a/main.py +++ b/main.py @@ -16,19 +16,27 @@ """ #pylint: disable=import-error, invalid-name +import os from tkinter import Tk, Text, INSERT, PhotoImage, Label, Button, TOP, BOTTOM # Import Statements +# Helper Functions + +def get_resource_path(filename): + """Get the absolute path to a resource file.""" + base_dir = os.path.dirname(os.path.abspath(__file__)) + return os.path.join(base_dir, filename) + # Document Functions def openLicense(): """Opens the license file in a new window.""" windowl = Tk() - with open("LICENSE.txt", "r", encoding="UTF-8") as licensefile: + license_path = get_resource_path("LICENSE.txt") + with open(license_path, "r", encoding="UTF-8") as licensefile: licensecontents = licensefile.read() - licensefile.close() windowl.title("License") licensetext = Text(windowl) licensetext.insert(INSERT, licensecontents) @@ -38,9 +46,9 @@ def openLicense(): def openEULA(): """Opens the EULA file in a new window.""" windowl = Tk() - with open("EULA.txt", "r", encoding="UTF-8") as eulafile: + eula_path = get_resource_path("EULA.txt") + with open(eula_path, "r", encoding="UTF-8") as eulafile: eulacontents = eulafile.read() - eulafile.close() windowl.title("EULA") eulatext = Text(windowl) eulatext.insert(INSERT, eulacontents) @@ -56,8 +64,8 @@ def ProgramVer(): "Copyright & Version Info for ProgramVer" ) # change name based on program name # UI Elements - dfdimage = PhotoImage(file="imgs/dfdlogo.gif") - pythonimage = PhotoImage(file="imgs/pythonpoweredlengthgif.gif") + dfdimage = PhotoImage(file=get_resource_path("imgs/dfdlogo.gif")) + pythonimage = PhotoImage(file=get_resource_path("imgs/pythonpoweredlengthgif.gif")) dfdlogo = Label(window, image=dfdimage) pythonpowered = Label(window, image=pythonimage) info = Label( diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..5525cab --- /dev/null +++ b/pytest.ini @@ -0,0 +1,10 @@ +[tool:pytest] +testpaths = tests +python_files = test_*.py +python_classes = Test* +python_functions = test_* +addopts = + -v + --tb=short + --strict-markers + --disable-warnings diff --git a/requirements.txt b/requirements.txt index 2dcd9aa..f8fe4ef 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,3 @@ # Project Requirements +pytest>=7.4.0 +pytest-cov>=4.1.0 diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..4b17237 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,100 @@ +# ProgramVer Test Suite + +This directory contains the comprehensive test suite for ProgramVer. + +## Running Tests + +### Prerequisites + +Install the required testing dependencies: + +```bash +pip install -r requirements.txt +``` + +On Linux systems, you'll also need to install tkinter and xvfb for headless GUI testing: + +```bash +sudo apt-get install python3-tk xvfb +``` + +### Running All Tests + +To run all tests: + +```bash +# On Linux (headless environment) +xvfb-run -a python -m pytest tests/ -v + +# On Windows/macOS (with display) +python -m pytest tests/ -v +``` + +### Running Tests with Coverage + +To run tests with coverage report: + +```bash +# On Linux +xvfb-run -a python -m pytest tests/ --cov=. --cov-report=term-missing --cov-report=html + +# On Windows/macOS +python -m pytest tests/ --cov=. --cov-report=term-missing --cov-report=html +``` + +The HTML coverage report will be generated in the `htmlcov` directory. + +### Running Specific Tests + +To run a specific test file: + +```bash +xvfb-run -a python -m pytest tests/test_main.py -v +``` + +To run a specific test class: + +```bash +xvfb-run -a python -m pytest tests/test_main.py::TestOpenLicense -v +``` + +To run a specific test method: + +```bash +xvfb-run -a python -m pytest tests/test_main.py::TestOpenLicense::test_openLicense_creates_window -v +``` + +## Test Structure + +The test suite is organized as follows: + +- `test_main.py` - Tests for the main ProgramVer module + - `TestOpenLicense` - Tests for the openLicense function + - `TestOpenEULA` - Tests for the openEULA function + - `TestProgramVer` - Tests for the ProgramVer main function + - `TestModuleIntegration` - Integration tests for the module + +## GitHub Actions Integration + +The test suite is automatically run on GitHub Actions for every push and pull request. The workflow: + +- Runs on Ubuntu, Windows, and macOS +- Tests against Python 3.9, 3.10, 3.11, and 3.12 +- Generates coverage reports +- Uploads coverage to Codecov (for master branch) + +See `.github/workflows/tests.yml` for the complete configuration. + +## Writing New Tests + +When adding new features to ProgramVer, please add corresponding tests following these guidelines: + +1. Create test classes that inherit from `unittest.TestCase` +2. Use descriptive test method names that start with `test_` +3. Use mocking for GUI components to avoid requiring a display +4. Add docstrings to explain what each test verifies +5. Ensure tests are independent and can run in any order + +## Coverage Goals + +We aim to maintain at least 90% code coverage for the main module. Currently, we have 100% coverage for `main.py`. diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..053fb24 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +"""Test package for ProgramVer.""" diff --git a/tests/test_main.py b/tests/test_main.py new file mode 100644 index 0000000..20611cb --- /dev/null +++ b/tests/test_main.py @@ -0,0 +1,251 @@ +""" +Tests for ProgramVer main module. +Copyright (C) 2017-2024 Dog Face Development Co. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. +""" +#pylint: disable=import-error, invalid-name, unused-argument, wrong-import-position, import-outside-toplevel + +import unittest +from unittest.mock import Mock, patch, mock_open +import os +import sys + +# Add parent directory to path for imports +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from main import openLicense, openEULA, ProgramVer, get_resource_path + + +class TestGetResourcePath(unittest.TestCase): + """Test cases for get_resource_path helper function.""" + + def test_get_resource_path_returns_absolute_path(self): + """Test that get_resource_path returns an absolute path.""" + result = get_resource_path("LICENSE.txt") + self.assertTrue(os.path.isabs(result)) + + def test_get_resource_path_includes_filename(self): + """Test that get_resource_path includes the filename.""" + result = get_resource_path("LICENSE.txt") + self.assertTrue(result.endswith("LICENSE.txt")) + + def test_get_resource_path_handles_subdirectories(self): + """Test that get_resource_path handles subdirectories correctly.""" + result = get_resource_path("imgs/dfdlogo.gif") + self.assertTrue("imgs" in result) + self.assertTrue(result.endswith("dfdlogo.gif")) + + +class TestOpenLicense(unittest.TestCase): + """Test cases for openLicense function.""" + + @patch('main.Text') + @patch('main.Tk') + @patch('builtins.open', new_callable=mock_open, read_data='GNU GENERAL PUBLIC LICENSE') + def test_openLicense_creates_window(self, mock_file, mock_tk, mock_text): + """Test that openLicense creates a window and reads LICENSE.txt.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_text_widget = Mock() + mock_text.return_value = mock_text_widget + + openLicense() + + # Verify window was created + mock_tk.assert_called_once() + # Verify file was opened with absolute path + mock_file.assert_called_once() + call_args = mock_file.call_args[0] + self.assertTrue(call_args[0].endswith("LICENSE.txt")) + # Verify window title was set + mock_window.title.assert_called_once_with("License") + + @patch('main.Tk') + @patch('builtins.open', new_callable=mock_open, read_data='Test License Content') + @patch('main.Text') + def test_openLicense_displays_content(self, mock_text, mock_file, mock_tk): + """Test that openLicense displays license content.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_text_widget = Mock() + mock_text.return_value = mock_text_widget + + openLicense() + + # Verify text widget was created with window + mock_text.assert_called_once_with(mock_window) + # Verify content was inserted + mock_text_widget.insert.assert_called_once() + # Verify widget was packed + mock_text_widget.pack.assert_called_once() + + +class TestOpenEULA(unittest.TestCase): + """Test cases for openEULA function.""" + + @patch('main.Text') + @patch('main.Tk') + @patch('builtins.open', new_callable=mock_open, read_data='END USER LICENSE AGREEMENT') + def test_openEULA_creates_window(self, mock_file, mock_tk, mock_text): + """Test that openEULA creates a window and reads EULA.txt.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_text_widget = Mock() + mock_text.return_value = mock_text_widget + + openEULA() + + # Verify window was created + mock_tk.assert_called_once() + # Verify file was opened with absolute path + mock_file.assert_called_once() + call_args = mock_file.call_args[0] + self.assertTrue(call_args[0].endswith("EULA.txt")) + # Verify window title was set + mock_window.title.assert_called_once_with("EULA") + + @patch('main.Tk') + @patch('builtins.open', new_callable=mock_open, read_data='Test EULA Content') + @patch('main.Text') + def test_openEULA_displays_content(self, mock_text, mock_file, mock_tk): + """Test that openEULA displays EULA content.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_text_widget = Mock() + mock_text.return_value = mock_text_widget + + openEULA() + + # Verify text widget was created with window + mock_text.assert_called_once_with(mock_window) + # Verify content was inserted + mock_text_widget.insert.assert_called_once() + # Verify widget was packed + mock_text_widget.pack.assert_called_once() + + +class TestProgramVer(unittest.TestCase): + """Test cases for ProgramVer function.""" + + @patch('main.Tk') + @patch('main.PhotoImage') + @patch('main.Label') + @patch('main.Button') + def test_programver_creates_window(self, mock_button, mock_label, mock_photoimage, mock_tk): + """Test that ProgramVer creates main window with all components.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_img = Mock() + mock_photoimage.return_value = mock_img + + # Mock mainloop to prevent blocking + mock_window.mainloop = Mock() + + ProgramVer() + + # Verify window was created + mock_tk.assert_called_once() + # Verify window title was set + mock_window.title.assert_called_once() + assert "ProgramVer" in str(mock_window.title.call_args) + + @patch('main.Tk') + @patch('main.PhotoImage') + @patch('main.Label') + @patch('main.Button') + def test_programver_loads_images(self, mock_button, mock_label, mock_photoimage, mock_tk): + """Test that ProgramVer loads required images.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_window.mainloop = Mock() + + ProgramVer() + + # Verify PhotoImage was called to load images + assert mock_photoimage.call_count == 2 + # Check that both images are loaded with absolute paths + calls = mock_photoimage.call_args_list + image_files = [call[1]['file'] for call in calls] + assert any("dfdlogo.gif" in img for img in image_files) + assert any("pythonpoweredlengthgif.gif" in img for img in image_files) + + @patch('main.Tk') + @patch('main.PhotoImage') + @patch('main.Label') + @patch('main.Button') + def test_programver_creates_labels(self, mock_button, mock_label, mock_photoimage, mock_tk): + """Test that ProgramVer creates appropriate labels.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_window.mainloop = Mock() + + ProgramVer() + + # Verify Label was called multiple times + assert mock_label.call_count >= 5 + # Verify labels were created with window + + @patch('main.Tk') + @patch('main.PhotoImage') + @patch('main.Label') + @patch('main.Button') + def test_programver_creates_buttons(self, mock_button, mock_label, mock_photoimage, mock_tk): + """Test that ProgramVer creates license and EULA buttons.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_window.mainloop = Mock() + + ProgramVer() + + # Verify Button was called for both buttons + assert mock_button.call_count == 2 + # Verify buttons have correct text and commands + calls = mock_button.call_args_list + button_texts = [call[1]['text'] for call in calls] + assert "Open License" in button_texts + assert "Open EULA" in button_texts + + @patch('main.Tk') + @patch('main.PhotoImage') + @patch('main.Label') + @patch('main.Button') + def test_programver_button_commands(self, mock_button, mock_label, mock_photoimage, mock_tk): + """Test that buttons are linked to correct command functions.""" + mock_window = Mock() + mock_tk.return_value = mock_window + mock_window.mainloop = Mock() + + ProgramVer() + + calls = mock_button.call_args_list + commands = [call[1].get('command') for call in calls] + # Verify that openLicense and openEULA are set as commands + assert openLicense in commands + assert openEULA in commands + + +class TestModuleIntegration(unittest.TestCase): + """Integration tests for the module.""" + + def test_module_imports(self): + """Test that the main module can be imported successfully.""" + import main + assert hasattr(main, 'ProgramVer') + assert hasattr(main, 'openLicense') + assert hasattr(main, 'openEULA') + assert hasattr(main, 'get_resource_path') + + def test_functions_are_callable(self): + """Test that all exported functions are callable.""" + import main + assert callable(main.ProgramVer) + assert callable(main.openLicense) + assert callable(main.openEULA) + assert callable(main.get_resource_path) + + +if __name__ == '__main__': + unittest.main() From 61c4eb6143e38dd927cb89113799bb8cae3961e4 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Sat, 1 Nov 2025 01:57:08 +0000 Subject: [PATCH 82/98] style: format code with Black This commit fixes the style issues introduced in 05dfbfe according to the output from Black. Details: https://github.com/Dog-Face-Development/ProgramVer/pull/100 --- main.py | 5 +- tests/test_main.py | 111 ++++++++++++++++++++++++++------------------- 2 files changed, 68 insertions(+), 48 deletions(-) diff --git a/main.py b/main.py index acba027..bd65a60 100644 --- a/main.py +++ b/main.py @@ -14,7 +14,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ -#pylint: disable=import-error, invalid-name + +# pylint: disable=import-error, invalid-name import os from tkinter import Tk, Text, INSERT, PhotoImage, Label, Button, TOP, BOTTOM @@ -23,11 +24,13 @@ # Helper Functions + def get_resource_path(filename): """Get the absolute path to a resource file.""" base_dir = os.path.dirname(os.path.abspath(__file__)) return os.path.join(base_dir, filename) + # Document Functions diff --git a/tests/test_main.py b/tests/test_main.py index 20611cb..51db2ac 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -6,7 +6,8 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. """ -#pylint: disable=import-error, invalid-name, unused-argument, wrong-import-position, import-outside-toplevel + +# pylint: disable=import-error, invalid-name, unused-argument, wrong-import-position, import-outside-toplevel import unittest from unittest.mock import Mock, patch, mock_open @@ -14,7 +15,7 @@ import sys # Add parent directory to path for imports -sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) from main import openLicense, openEULA, ProgramVer, get_resource_path @@ -42,9 +43,11 @@ def test_get_resource_path_handles_subdirectories(self): class TestOpenLicense(unittest.TestCase): """Test cases for openLicense function.""" - @patch('main.Text') - @patch('main.Tk') - @patch('builtins.open', new_callable=mock_open, read_data='GNU GENERAL PUBLIC LICENSE') + @patch("main.Text") + @patch("main.Tk") + @patch( + "builtins.open", new_callable=mock_open, read_data="GNU GENERAL PUBLIC LICENSE" + ) def test_openLicense_creates_window(self, mock_file, mock_tk, mock_text): """Test that openLicense creates a window and reads LICENSE.txt.""" mock_window = Mock() @@ -63,9 +66,9 @@ def test_openLicense_creates_window(self, mock_file, mock_tk, mock_text): # Verify window title was set mock_window.title.assert_called_once_with("License") - @patch('main.Tk') - @patch('builtins.open', new_callable=mock_open, read_data='Test License Content') - @patch('main.Text') + @patch("main.Tk") + @patch("builtins.open", new_callable=mock_open, read_data="Test License Content") + @patch("main.Text") def test_openLicense_displays_content(self, mock_text, mock_file, mock_tk): """Test that openLicense displays license content.""" mock_window = Mock() @@ -86,9 +89,11 @@ def test_openLicense_displays_content(self, mock_text, mock_file, mock_tk): class TestOpenEULA(unittest.TestCase): """Test cases for openEULA function.""" - @patch('main.Text') - @patch('main.Tk') - @patch('builtins.open', new_callable=mock_open, read_data='END USER LICENSE AGREEMENT') + @patch("main.Text") + @patch("main.Tk") + @patch( + "builtins.open", new_callable=mock_open, read_data="END USER LICENSE AGREEMENT" + ) def test_openEULA_creates_window(self, mock_file, mock_tk, mock_text): """Test that openEULA creates a window and reads EULA.txt.""" mock_window = Mock() @@ -107,9 +112,9 @@ def test_openEULA_creates_window(self, mock_file, mock_tk, mock_text): # Verify window title was set mock_window.title.assert_called_once_with("EULA") - @patch('main.Tk') - @patch('builtins.open', new_callable=mock_open, read_data='Test EULA Content') - @patch('main.Text') + @patch("main.Tk") + @patch("builtins.open", new_callable=mock_open, read_data="Test EULA Content") + @patch("main.Text") def test_openEULA_displays_content(self, mock_text, mock_file, mock_tk): """Test that openEULA displays EULA content.""" mock_window = Mock() @@ -130,11 +135,13 @@ def test_openEULA_displays_content(self, mock_text, mock_file, mock_tk): class TestProgramVer(unittest.TestCase): """Test cases for ProgramVer function.""" - @patch('main.Tk') - @patch('main.PhotoImage') - @patch('main.Label') - @patch('main.Button') - def test_programver_creates_window(self, mock_button, mock_label, mock_photoimage, mock_tk): + @patch("main.Tk") + @patch("main.PhotoImage") + @patch("main.Label") + @patch("main.Button") + def test_programver_creates_window( + self, mock_button, mock_label, mock_photoimage, mock_tk + ): """Test that ProgramVer creates main window with all components.""" mock_window = Mock() mock_tk.return_value = mock_window @@ -152,11 +159,13 @@ def test_programver_creates_window(self, mock_button, mock_label, mock_photoimag mock_window.title.assert_called_once() assert "ProgramVer" in str(mock_window.title.call_args) - @patch('main.Tk') - @patch('main.PhotoImage') - @patch('main.Label') - @patch('main.Button') - def test_programver_loads_images(self, mock_button, mock_label, mock_photoimage, mock_tk): + @patch("main.Tk") + @patch("main.PhotoImage") + @patch("main.Label") + @patch("main.Button") + def test_programver_loads_images( + self, mock_button, mock_label, mock_photoimage, mock_tk + ): """Test that ProgramVer loads required images.""" mock_window = Mock() mock_tk.return_value = mock_window @@ -168,15 +177,17 @@ def test_programver_loads_images(self, mock_button, mock_label, mock_photoimage, assert mock_photoimage.call_count == 2 # Check that both images are loaded with absolute paths calls = mock_photoimage.call_args_list - image_files = [call[1]['file'] for call in calls] + image_files = [call[1]["file"] for call in calls] assert any("dfdlogo.gif" in img for img in image_files) assert any("pythonpoweredlengthgif.gif" in img for img in image_files) - @patch('main.Tk') - @patch('main.PhotoImage') - @patch('main.Label') - @patch('main.Button') - def test_programver_creates_labels(self, mock_button, mock_label, mock_photoimage, mock_tk): + @patch("main.Tk") + @patch("main.PhotoImage") + @patch("main.Label") + @patch("main.Button") + def test_programver_creates_labels( + self, mock_button, mock_label, mock_photoimage, mock_tk + ): """Test that ProgramVer creates appropriate labels.""" mock_window = Mock() mock_tk.return_value = mock_window @@ -188,11 +199,13 @@ def test_programver_creates_labels(self, mock_button, mock_label, mock_photoimag assert mock_label.call_count >= 5 # Verify labels were created with window - @patch('main.Tk') - @patch('main.PhotoImage') - @patch('main.Label') - @patch('main.Button') - def test_programver_creates_buttons(self, mock_button, mock_label, mock_photoimage, mock_tk): + @patch("main.Tk") + @patch("main.PhotoImage") + @patch("main.Label") + @patch("main.Button") + def test_programver_creates_buttons( + self, mock_button, mock_label, mock_photoimage, mock_tk + ): """Test that ProgramVer creates license and EULA buttons.""" mock_window = Mock() mock_tk.return_value = mock_window @@ -204,15 +217,17 @@ def test_programver_creates_buttons(self, mock_button, mock_label, mock_photoima assert mock_button.call_count == 2 # Verify buttons have correct text and commands calls = mock_button.call_args_list - button_texts = [call[1]['text'] for call in calls] + button_texts = [call[1]["text"] for call in calls] assert "Open License" in button_texts assert "Open EULA" in button_texts - @patch('main.Tk') - @patch('main.PhotoImage') - @patch('main.Label') - @patch('main.Button') - def test_programver_button_commands(self, mock_button, mock_label, mock_photoimage, mock_tk): + @patch("main.Tk") + @patch("main.PhotoImage") + @patch("main.Label") + @patch("main.Button") + def test_programver_button_commands( + self, mock_button, mock_label, mock_photoimage, mock_tk + ): """Test that buttons are linked to correct command functions.""" mock_window = Mock() mock_tk.return_value = mock_window @@ -221,7 +236,7 @@ def test_programver_button_commands(self, mock_button, mock_label, mock_photoima ProgramVer() calls = mock_button.call_args_list - commands = [call[1].get('command') for call in calls] + commands = [call[1].get("command") for call in calls] # Verify that openLicense and openEULA are set as commands assert openLicense in commands assert openEULA in commands @@ -233,19 +248,21 @@ class TestModuleIntegration(unittest.TestCase): def test_module_imports(self): """Test that the main module can be imported successfully.""" import main - assert hasattr(main, 'ProgramVer') - assert hasattr(main, 'openLicense') - assert hasattr(main, 'openEULA') - assert hasattr(main, 'get_resource_path') + + assert hasattr(main, "ProgramVer") + assert hasattr(main, "openLicense") + assert hasattr(main, "openEULA") + assert hasattr(main, "get_resource_path") def test_functions_are_callable(self): """Test that all exported functions are callable.""" import main + assert callable(main.ProgramVer) assert callable(main.openLicense) assert callable(main.openEULA) assert callable(main.get_resource_path) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() From 01339409e4e19f2b52821f6406b412a7a62c8120 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 1 Nov 2025 01:58:26 +0000 Subject: [PATCH 83/98] docs(testing): update testing documentation and test badge --- README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/README.md b/README.md index 857a961..92e7c87 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ PyPI Build State Pylint State + + Tests State CodeQL State @@ -106,6 +108,36 @@ However, you may want to add the version window to your program. To do so, follo Customization for ProgramVer can be found in the [`CUSTOMIZATION`](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/CUSTOMIZATION.md) doc. More documentation is available in the **[Documentation](https://github.com/Dog-Face-Development/ProgramVer/tree/master/docs)** and on the **[Wiki](https://github.com/Dog-Face-Development/ProgramVer/wiki)**. If more support is required, please open a **[GitHub Discussion](https://github.com/Dog-Face-Development/ProgramVer/discussions)** or join our **[Discord](https://discord.gg/x3G8adwVUe)**. +## Testing + +ProgramVer includes a comprehensive test suite to ensure code quality and reliability. The test suite achieves 100% code coverage for the main module. + +### Running Tests + +To run the test suite locally: + +```bash +# Install test dependencies +pip install -r requirements.txt + +# Run tests (Linux) +xvfb-run -a python -m pytest tests/ -v + +# Run tests (Windows/macOS) +python -m pytest tests/ -v + +# Run tests with coverage +python -m pytest tests/ --cov=main --cov-report=term-missing +``` + +For more information about testing, see the [tests README](tests/README.md). + +### Continuous Integration + +Tests are automatically run on GitHub Actions for every push and pull request across: +- Operating Systems: Ubuntu, Windows, and macOS +- Python Versions: 3.9, 3.10, 3.11, and 3.12 + ## Contributing Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/Dog-Face-Development/ProgramVer/compare). From 52179d66bf06f53be5849504bafb912bcc4df774 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 1 Nov 2025 02:00:38 +0000 Subject: [PATCH 84/98] docs(build): update tests.yml to support Windows compatibility and improve test assertions --- .github/workflows/tests.yml | 11 +++++++++++ tests/test_main.py | 10 ++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4e7f967..f37ac0c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -36,8 +36,19 @@ jobs: run: | python -m pip install --upgrade pip pip install pytest pytest-cov + shell: bash + + - name: Install requirements if present + run: | if [ -f requirements.txt ]; then pip install -r requirements.txt; fi shell: bash + if: runner.os != 'Windows' + + - name: Install requirements if present (Windows) + run: | + if (Test-Path requirements.txt) { pip install -r requirements.txt } + shell: pwsh + if: runner.os == 'Windows' - name: Run tests (Linux) if: runner.os == 'Linux' diff --git a/tests/test_main.py b/tests/test_main.py index 51db2ac..5576bbf 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -7,7 +7,9 @@ the Free Software Foundation, version 3 of the License. """ -# pylint: disable=import-error, invalid-name, unused-argument, wrong-import-position, import-outside-toplevel +# pylint: disable=import-error, invalid-name, wrong-import-position, import-outside-toplevel, unused-argument +# unused-argument is disabled because @patch decorators inject mocked objects as parameters +# even when not all mocks are used in every test import unittest from unittest.mock import Mock, patch, mock_open @@ -157,7 +159,8 @@ def test_programver_creates_window( mock_tk.assert_called_once() # Verify window title was set mock_window.title.assert_called_once() - assert "ProgramVer" in str(mock_window.title.call_args) + title_text = mock_window.title.call_args[0][0] + assert "ProgramVer" in title_text @patch("main.Tk") @patch("main.PhotoImage") @@ -195,9 +198,8 @@ def test_programver_creates_labels( ProgramVer() - # Verify Label was called multiple times + # Verify Label was called multiple times to create all labels assert mock_label.call_count >= 5 - # Verify labels were created with window @patch("main.Tk") @patch("main.PhotoImage") From 566fe7f9d12151690c6f8974391fc702eb34e727 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 02:04:10 +0000 Subject: [PATCH 85/98] docs(actions/checkout): update to version 6 in workflow files --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/push-to-pypi.yml | 2 +- .github/workflows/pylint.yml | 2 +- .github/workflows/tests.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6b600f8..ee6733a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index 304c35d..b602a5a 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 81b12b1..54dfae3 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -14,7 +14,7 @@ jobs: matrix: python-version: ["3.9"] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f37ac0c..b936e48 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,7 +19,7 @@ jobs: python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 From 75e5815111727785794f5afdf887a46f1f64cead Mon Sep 17 00:00:00 2001 From: willtheorangeguy Date: Sun, 23 Nov 2025 11:50:57 -0700 Subject: [PATCH 86/98] feat: add agents files --- .github/agents/api-agent.md | 50 ++++++++++++++++++++++++++++++++++++ .github/agents/docs-agent.md | 50 ++++++++++++++++++++++++++++++++++++ .github/agents/lint-agent.md | 50 ++++++++++++++++++++++++++++++++++++ .github/agents/test-agent.md | 50 ++++++++++++++++++++++++++++++++++++ 4 files changed, 200 insertions(+) create mode 100644 .github/agents/api-agent.md create mode 100644 .github/agents/docs-agent.md create mode 100644 .github/agents/lint-agent.md create mode 100644 .github/agents/test-agent.md diff --git a/.github/agents/api-agent.md b/.github/agents/api-agent.md new file mode 100644 index 0000000..179d168 --- /dev/null +++ b/.github/agents/api-agent.md @@ -0,0 +1,50 @@ +--- +name: api-agent +description: Assists with API design, implementation, and documentation. +--- + +You are an expert API Engineer for this project. + +## Persona +- You specialize in building APIs +- You understand API best practices and system architecture and translate that into robust and scalable API designs +- Your output: API specifications and implementations that developers can integrate easily and reliably + +## Project knowledge +- **Tech Stack:** [your technologies with versions] +- **File Structure:** + - `src/` – [what's here] + - `tests/` – [what's here] + +## Tools you can use +- **Build:** `npm run build` (compiles TypeScript, outputs to dist/) +- **Test:** `npm test` (runs Jest, must pass before commits) +- **Lint:** `npm run lint --fix` (auto-fixes ESLint errors) + +## Standards + +Follow these rules for all code you write: + +**Naming conventions:** +- Functions: camelCase (`getUserData`, `calculateTotal`) +- Classes: PascalCase (`UserService`, `DataController`) +- Constants: UPPER_SNAKE_CASE (`API_KEY`, `MAX_RETRIES`) + +**Code style example:** +```typescript +// ✅ Good - descriptive names, proper error handling +async function fetchUserById(id: string): Promise { + if (!id) throw new Error('User ID required'); + + const response = await api.get(`/users/${id}`); + return response.data; +} + +// ❌ Bad - vague names, no error handling +async function get(x) { + return await api.get('/users/' + x).data; +} +Boundaries +- ✅ **Always:** Write to `src/` and `tests/`, run tests before commits, follow naming conventions +- ⚠️ **Ask first:** Database schema changes, adding dependencies, modifying CI/CD config +- 🚫 **Never:** Commit secrets or API keys, edit `node_modules/` or `vendor/` \ No newline at end of file diff --git a/.github/agents/docs-agent.md b/.github/agents/docs-agent.md new file mode 100644 index 0000000..82c4347 --- /dev/null +++ b/.github/agents/docs-agent.md @@ -0,0 +1,50 @@ +--- +name: docs-agent +description: Generates and maintains comprehensive project documentation. +--- + +You are an expert Technical Writer for this project. + +## Persona +- You specialize in writing documentation +- You understand the codebase and user needs and translate that into clear and accessible documentation +- Your output: API documentation, user guides, and tutorials that developers can understand and use the project effectively + +## Project knowledge +- **Tech Stack:** [your technologies with versions] +- **File Structure:** + - `src/` – [what's here] + - `tests/` – [what's here] + +## Tools you can use +- **Build:** `npm run build` (compiles TypeScript, outputs to dist/) +- **Test:** `npm test` (runs Jest, must pass before commits) +- **Lint:** `npm run lint --fix` (auto-fixes ESLint errors) + +## Standards + +Follow these rules for all code you write: + +**Naming conventions:** +- Functions: camelCase (`getUserData`, `calculateTotal`) +- Classes: PascalCase (`UserService`, `DataController`) +- Constants: UPPER_SNAKE_CASE (`API_KEY`, `MAX_RETRIES`) + +**Code style example:** +```typescript +// ✅ Good - descriptive names, proper error handling +async function fetchUserById(id: string): Promise { + if (!id) throw new Error('User ID required'); + + const response = await api.get(`/users/${id}`); + return response.data; +} + +// ❌ Bad - vague names, no error handling +async function get(x) { + return await api.get('/users/' + x).data; +} +Boundaries +- ✅ **Always:** Write to `src/` and `tests/`, run tests before commits, follow naming conventions +- ⚠️ **Ask first:** Database schema changes, adding dependencies, modifying CI/CD config +- 🚫 **Never:** Commit secrets or API keys, edit `node_modules/` or `vendor/` \ No newline at end of file diff --git a/.github/agents/lint-agent.md b/.github/agents/lint-agent.md new file mode 100644 index 0000000..60fc909 --- /dev/null +++ b/.github/agents/lint-agent.md @@ -0,0 +1,50 @@ +--- +name: lint-agent +description: Enforces code style and quality standards through linting. +--- + +You are an expert Quality Assurance Engineer for this project. + +## Persona +- You specialize in analyzing logs and enforcing code standards +- You understand code style guidelines and common pitfalls and translate that into clean and maintainable code +- Your output: linting configurations and code style suggestions that developers can maintain consistent code quality + +## Project knowledge +- **Tech Stack:** [your technologies with versions] +- **File Structure:** + - `src/` – [what's here] + - `tests/` – [what's here] + +## Tools you can use +- **Build:** `npm run build` (compiles TypeScript, outputs to dist/) +- **Test:** `npm test` (runs Jest, must pass before commits) +- **Lint:** `npm run lint --fix` (auto-fixes ESLint errors) + +## Standards + +Follow these rules for all code you write: + +**Naming conventions:** +- Functions: camelCase (`getUserData`, `calculateTotal`) +- Classes: PascalCase (`UserService`, `DataController`) +- Constants: UPPER_SNAKE_CASE (`API_KEY`, `MAX_RETRIES`) + +**Code style example:** +```typescript +// ✅ Good - descriptive names, proper error handling +async function fetchUserById(id: string): Promise { + if (!id) throw new Error('User ID required'); + + const response = await api.get(`/users/${id}`); + return response.data; +} + +// ❌ Bad - vague names, no error handling +async function get(x) { + return await api.get('/users/' + x).data; +} +Boundaries +- ✅ **Always:** Write to `src/` and `tests/`, run tests before commits, follow naming conventions +- ⚠️ **Ask first:** Database schema changes, adding dependencies, modifying CI/CD config +- 🚫 **Never:** Commit secrets or API keys, edit `node_modules/` or `vendor/` \ No newline at end of file diff --git a/.github/agents/test-agent.md b/.github/agents/test-agent.md new file mode 100644 index 0000000..b9779aa --- /dev/null +++ b/.github/agents/test-agent.md @@ -0,0 +1,50 @@ +--- +name: test-agent +description: Creates and maintains unit, integration, and end-to-end tests. +--- + +You are an expert Test Engineer for this project. + +## Persona +- You specialize in creating tests +- You understand test patterns and potential failure points and translate that into comprehensive and effective test suites +- Your output: unit tests, integration tests, and end-to-end tests that developers can ensure code quality and prevent regressions + +## Project knowledge +- **Tech Stack:** [your technologies with versions] +- **File Structure:** + - `src/` – [what's here] + - `tests/` – [what's here] + +## Tools you can use +- **Build:** `npm run build` (compiles TypeScript, outputs to dist/) +- **Test:** `npm test` (runs Jest, must pass before commits) +- **Lint:** `npm run lint --fix` (auto-fixes ESLint errors) + +## Standards + +Follow these rules for all code you write: + +**Naming conventions:** +- Functions: camelCase (`getUserData`, `calculateTotal`) +- Classes: PascalCase (`UserService`, `DataController`) +- Constants: UPPER_SNAKE_CASE (`API_KEY`, `MAX_RETRIES`) + +**Code style example:** +```typescript +// ✅ Good - descriptive names, proper error handling +async function fetchUserById(id: string): Promise { + if (!id) throw new Error('User ID required'); + + const response = await api.get(`/users/${id}`); + return response.data; +} + +// ❌ Bad - vague names, no error handling +async function get(x) { + return await api.get('/users/' + x).data; +} +Boundaries +- ✅ **Always:** Write to `src/` and `tests/`, run tests before commits, follow naming conventions +- ⚠️ **Ask first:** Database schema changes, adding dependencies, modifying CI/CD config +- 🚫 **Never:** Commit secrets or API keys, edit `node_modules/` or `vendor/` \ No newline at end of file From cb57b96b7a6e56ed0f1ced7b6ed3643180f9c943 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Sun, 23 Nov 2025 18:51:10 +0000 Subject: [PATCH 87/98] style: format code with Black This commit fixes the style issues introduced in c2e7319 according to the output from Black. Details: None --- __init__.py | 3 ++- __main__.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/__init__.py b/__init__.py index 4bd52b5..7abf536 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,5 @@ """Initialize PyPI Package""" -#pylint: disable=import-error, invalid-name + +# pylint: disable=import-error, invalid-name __all__ = ["main"] diff --git a/__main__.py b/__main__.py index 8698ae0..3677f08 100644 --- a/__main__.py +++ b/__main__.py @@ -1,5 +1,6 @@ """Main entry point for the application.""" -#pylint: disable=import-error, invalid-name + +# pylint: disable=import-error, invalid-name from main import ProgramVer From 7d5160030c60cc967fc487b99c7611f653785bba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 17:40:57 +0000 Subject: [PATCH 88/98] docs: update initial plan section From f4cb7e2e8ed0fb8f07d9301c98da0bb8b6d70d1a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 17:45:08 +0000 Subject: [PATCH 89/98] fix(dependabot.yml): fix malformed ignore configuration in dependabot.yml --- .github/dependabot.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 29c459d..8baa101 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,17 +5,17 @@ updates: schedule: interval: "daily" ignore: - update-types: [ "version-update:semver-patch" ] + - update-types: [ "version-update:semver-patch" ] - package-ecosystem: "pip" directory: "/" schedule: interval: "daily" ignore: - update-types: [ "version-update:semver-patch" ] + - update-types: [ "version-update:semver-patch" ] - package-ecosystem: "docker" directory: "/" schedule: interval: "daily" ignore: - update-types: [ "version-update:semver-patch" ] + - update-types: [ "version-update:semver-patch" ] From eb75be94202f27c68e8d73f9186847c7ae491a66 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 17:50:21 +0000 Subject: [PATCH 90/98] fix(dependabot.yml): add required dependency-name to ignore rules in dependabot.yml --- .github/dependabot.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8baa101..55a4a78 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,17 +5,20 @@ updates: schedule: interval: "daily" ignore: - - update-types: [ "version-update:semver-patch" ] + - dependency-name: "*" + update-types: [ "version-update:semver-patch" ] - package-ecosystem: "pip" directory: "/" schedule: interval: "daily" ignore: - - update-types: [ "version-update:semver-patch" ] + - dependency-name: "*" + update-types: [ "version-update:semver-patch" ] - package-ecosystem: "docker" directory: "/" schedule: interval: "daily" ignore: - - update-types: [ "version-update:semver-patch" ] + - dependency-name: "*" + update-types: [ "version-update:semver-patch" ] From b8d558541e24668f4751bb06284b2223dc9432b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 02:42:38 +0000 Subject: [PATCH 91/98] feat: bump codecov/codecov-action to 6 --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b936e48..ca1c8d2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -61,7 +61,7 @@ jobs: python -m pytest tests/ -v --cov=. --cov-report=xml --cov-report=term - name: Upload coverage to Codecov - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@v6 if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12' with: file: ./coverage.xml From 50a1f842e4ac740e710defa21e4f90f0ae9e22ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 02:42:50 +0000 Subject: [PATCH 92/98] docs(pypa/gh-action-pypi-publish): update dependency version in workflow configuration --- .github/workflows/push-to-pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-to-pypi.yml b/.github/workflows/push-to-pypi.yml index b602a5a..62c9b1d 100644 --- a/.github/workflows/push-to-pypi.yml +++ b/.github/workflows/push-to-pypi.yml @@ -25,7 +25,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 02dbb39aca5ef6760893ce3cf1ad093eb83627c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 02:43:00 +0000 Subject: [PATCH 93/98] fix( dependencies ): update pytest-cov requirement --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f8fe4ef..cf58a11 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ # Project Requirements pytest>=7.4.0 -pytest-cov>=4.1.0 +pytest-cov>=7.1.0 From d1a82f27d57dc6983f1db4b3c38f1f1a3111e8e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 13:46:19 +0000 Subject: [PATCH 94/98] docs: update pytest requirement to >=8.4.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index cf58a11..f165c42 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ # Project Requirements -pytest>=7.4.0 +pytest>=8.4.2 pytest-cov>=7.1.0 From 6974e6d4a2b0b5cc1a9de963c6fda3931e2fdcb3 Mon Sep 17 00:00:00 2001 From: willtheorangeguy Date: Mon, 18 May 2026 16:52:49 -0600 Subject: [PATCH 95/98] docs: move org and update license --- .github/FUNDING.yml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 2 - .github/workflows/cla.yml | 33 -- CHANGELOG.md | 6 +- CONTRIBUTING.md | 31 +- EULA.txt | 119 ------ LICENSE.md | 623 +---------------------------- LICENSE.txt | 620 ---------------------------- PLANNING.md | 6 +- README.md | 47 +-- SECURITY.md | 4 +- docs/README.md | 9 +- tests/README.md => docs/TESTING.md | 0 docs/USAGE.md | 4 +- docs/legal/CLA_ENTITY.md | 98 ----- docs/legal/CLA_INDIVIDUAL.md | 102 ----- docs/legal/EULA.md | 119 ------ docs/legal/PRIVACY.md | 99 ----- docs/legal/TERMS.md | 99 ----- imgs/dfdlogo.gif | Bin 7849 -> 0 bytes main.py | 14 +- pyproject.toml | 6 +- setup.py | 4 +- 23 files changed, 56 insertions(+), 1991 deletions(-) delete mode 100644 .github/workflows/cla.yml delete mode 100644 EULA.txt delete mode 100644 LICENSE.txt rename tests/README.md => docs/TESTING.md (100%) delete mode 100644 docs/legal/CLA_ENTITY.md delete mode 100644 docs/legal/CLA_INDIVIDUAL.md delete mode 100644 docs/legal/EULA.md delete mode 100644 docs/legal/PRIVACY.md delete mode 100644 docs/legal/TERMS.md delete mode 100644 imgs/dfdlogo.gif diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2eb3ec8..635a7bc 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,4 +1,4 @@ # These are supported funding model platforms -github: ['willtheorangeguy', 'Dog-Face-Development'] +github: ['willtheorangeguy'] custom: ['https://paypal.me/wvdg44', 'https://psfmember.org/', 'https://www.pyinstaller.org/funding.html#funding-by-individuals'] diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 036bda0..b0cd150 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -23,5 +23,3 @@ If applicable, add screenshots to help explain your problem. **Additional Context** Add any other context about the problem here. - -**Please ensure you have read the [Contributor License Agreements](https://github.com/Dog-Face-Development/ProgramVer/tree/master/docs/legal). By creating your pull request, you agree to the CLA.** diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml deleted file mode 100644 index de4db22..0000000 --- a/.github/workflows/cla.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: "cla" -on: - issue_comment: - types: [created] - pull_request_target: - types: [opened, closed, synchronize] - -jobs: - CLAssistant: - runs-on: ubuntu-latest - steps: - - name: "CLA Assistant" - if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document, and I hereby sign the CLA.') || github.event_name == 'pull_request_target' - # Beta Release - uses: contributor-assistant/github-action@v2.6.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # the below token should have repo scope and must be manually added by you in the repository's secret - PERSONAL_ACCESS_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN }} - with: - path-to-signatures: 'signatures/cla.json' - path-to-document: 'https://github.com/Dog-Face-Development/.github/tree/main/docs/legal' # e.g. a CLA or a DCO document - # branch should not be protected - branch: 'main' - allowlist: willtheorangeguy, bot* - remote-organization-name: Dog-Face-Development - remote-repository-name: cla-signatures - create-file-commit-message: 'Create CLA signatures file' - signed-commit-message: '$contributorName has signed the CLA in #$pullRequestNo' - custom-notsigned-prcomment: 'Thank you for your contribution, please read and sign our CLA. Instructions on how to do so can be found in the `CONTRIBUTING.md` document.' - custom-pr-sign-comment: 'I have read the CLA Document, and I hereby sign the CLA.' - custom-allsigned-prcomment: 'All Contributors have signed the CLA!' - \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 483d67d..1d7016e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,12 @@ # Changelog -## [v1.9.0](https://github.com/Dog-Face-Development/ProgramVer/releases/tag/1.9.0) +## [v1.9.0](https://github.com/willtheorangeguy/ProgramVer/releases/tag/1.9.0) ### Added - PyPI Package. -## [v1.8.0](https://github.com/Dog-Face-Development/ProgramVer/releases/tag/1.8.0) +## [v1.8.0](https://github.com/willtheorangeguy/ProgramVer/releases/tag/1.8.0) ### Added @@ -17,7 +17,7 @@ - Documentation grammar. -## [v1.0.0](https://github.com/Dog-Face-Development/ProgramVer/releases/tag/v1.0.0) +## [v1.0.0](https://github.com/willtheorangeguy/ProgramVer/releases/tag/v1.0.0) ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ab9513f..8b9f716 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,21 +2,12 @@ 🎉 Thanks for taking the time to contribute! 🎉 -The following is a set of guidelines for contributing to Dog Face Development Co.'s ProgramVer project on GitHub. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. +The following is a set of guidelines for contributing to the ProgramVer project on GitHub. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. ## Code of Conduct This project and everyone participating in it is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to our [Discord](https://discord.gg/x3G8adwVUe). -## Signing the CLA - -If you are not an employee of Dog Face Development Co. and want to submit a pull request to our open source project, you must first sign a Contributor License Agreement (CLA). This allows you to retain your ownership of the code submitted while granting Dog Face Development the necessary legal rights to use your contribution. The CLA only needs to be signed once and it covers all our projects. Follow these simple steps to sign: - -- If you are creating a pull request on your own, read the [Individual CLA](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/CLA_INDIVIDUAL.md). If you are creating a pull request as part of your employment, read the [Entity CLA](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/CLA_ENTITY.md). -- Open a [pull request](https://github.com/Dog-Face-Development/ProgramVer/compare). -- The CLA Assistant bot will ask you to sign the pull request by writing the following text: `I have read the CLA Document, and I hereby sign the CLA.` If you agree to the CLA, copy the text. -- The CLA Assistant bot will mark your pull request as CLA approved, and you won't have to sign the CLA again! - ## New Contributor Guide To get an overview of the project, read the [README](README.md). Here are some resources to help you get started with open source contributions: @@ -26,49 +17,43 @@ To get an overview of the project, read the [README](README.md). Here are some r - [GitHub flow](https://docs.github.com/en/get-started/quickstart/github-flow). - [Collaborating with pull requests](https://docs.github.com/en/github/collaborating-with-pull-requests). -Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/Dog-Face-Development/ProgramVer/compare). +Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/willtheorangeguy/ProgramVer/compare). ## How to Contribute ### Did you find a bug? -- **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/Dog-Face-Development/ProgramVer/issues). -- If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. +- **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/willtheorangeguy/ProgramVer/issues). +- If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/willtheorangeguy/ProgramVer/issues/new/choose). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. - Use the issue templates to create the issue. They include step by step guidelines and have lists of things that should be included. ### Did you write a patch that fixes a bug or updates the documentation? -- Open a new [Pull Request](https://github.com/Dog-Face-Development/ProgramVer/compare) on GitHub with the patch. +- Open a new [Pull Request](https://github.com/willtheorangeguy/ProgramVer/compare) on GitHub with the patch. - Ensure the pull request description clearly describes the problem and solution. Be sure to include a **title**, and as much relevant information as possible. Include the relevant issue number if applicable. ### Did you fix whitespace, format code, or make a purely cosmetic patch? - Changes that are cosmetic in nature and do not add anything substantial to the stability, functionality, or testability of ProgramVer are still accepted! Just follow the same instructions as above. -- However, do ensure that any cosmetic changes follow the Dog Face Development Co. Style Guides, found [below](#style). ### Do you intend to add a new feature or change an existing one? -- **Ensure the feature was not already introduced** by searching on GitHub under [Issues](https://github.com/Dog-Face-Development/ProgramVer/issues). Look for those under the [enhancement](https://github.com/Dog-Face-Development/ProgramVer/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) tag. -- If you're unable to find an open issue addressing the new feature, [open a new one](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose)! +- **Ensure the feature was not already introduced** by searching on GitHub under [Issues](https://github.com/willtheorangeguy/ProgramVer/issues). Look for those under the [enhancement](https://github.com/willtheorangeguy/ProgramVer/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) tag. +- If you're unable to find an open issue addressing the new feature, [open a new one](https://github.com/willtheorangeguy/ProgramVer/issues/new/choose)! ### Do you have questions about the source code? - Ask any question about how to use ProgramVer on our [Discord](https://discord.gg/x3G8adwVUe). -- If it does not get answered, open an [issue](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose). +- If it does not get answered, open an [issue](https://github.com/willtheorangeguy/ProgramVer/issues/new/choose). ## Coding Conventions Start reading our code and you'll get the hang of it. -- A CLA must be signed before contributing (see [above](#signing-the-cla)). - We indent using four spaces (NOT tabs). - Every function or piece of code should be heavily commented. - We use [Semantic Versioning](https://semver.org/). -## Style - -While contributing to a Dog Face Development Co. project, make sure your code follow our [Code Style Guide](https://github.com/Dog-Face-Development/DFD-Code-Style-Guide), and any web design elements follow our [Web Style Guide](https://github.com/Dog-Face-Development/DFD-Web-Style-Guide). If you have any changes you wish to make to the styling of our code or web projects, open an issue or pull request on the respective style guide! - ## Attribution This document is adapted from the Contributing documents of [Rails](https://github.com/rails/rails/blob/main/CONTRIBUTING.md), the [GitHub Docs](https://github.com/github/docs/blob/main/CONTRIBUTING.md), [Atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md), and [OpenGovernment](https://github.com/opengovernment/opengovernment/blob/master/CONTRIBUTING.md?plain=1). diff --git a/EULA.txt b/EULA.txt deleted file mode 100644 index 5115ca4..0000000 --- a/EULA.txt +++ /dev/null @@ -1,119 +0,0 @@ -# Dog Face Development Co. End-User License Agreement - -Last updated: September 5, 2022. - -Please read this End-User License Agreement carefully before downloading or using ProgramVer. **This document comes into effect when you contribute to the repository and/or download the software containing this document.** - -## Interpretation and Definitions - -### Interpretation - -The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. - -### Definitions - -For the purposes of this End-User License Agreement: - -- **Agreement** means this End-User License Agreement that forms the entire agreement between You and the Company regarding the use of the Application. -- **Application** means the software program provided by the Company downloaded by You to a Device, named ProgramVer. -- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to Dog Face Development Company, British Columbia, Canada. -- **Content** refers to content such as text, images, or other information that can be posted, uploaded, linked to or otherwise made available by You, regardless of the form of that content. -- **Country** refers to: British Columbia, Canada. -- **Device** means any device that can access the Application such as a computer, a cellphone or a digital tablet. -- **Third-Party Services** means any services or content (including data, information, applications and other products services) provided by a third-party that may be displayed, included or made available by the Application. -- **You** means the individual accessing or using the Application or the company, or other legal entity on behalf of which such individual is accessing or using the Application, as applicable. - -## Acknowledgment - -By downloading or using the Application, You are agreeing to be bound by the terms and conditions of this Agreement. If You do not agree to the terms of this Agreement, do not download or do not use the Application. - -This Agreement is a legal document between You and the Company and it governs your use of the Application made available to You by the Company. - -The Application is licensed, not sold, to You by the Company for use strictly in accordance with the terms of this Agreement. - -## License - -### Scope of License - -The Company grants You a revocable, non-exclusive, non-transferable, limited license to download, install and use the Application strictly in accordance with the terms of this Agreement, and with the `LICENSE` file included with the software download. - -The license that is granted to You by the Company is solely for your personal, non-commercial purposes strictly in accordance with the terms of this Agreement, and with the `LICENSE` file included with the software download. - -## Third-Party Services - -The Application may display, include or make available third-party content (including data, information, applications and other products services) or provide links to third-party websites or services. - -You acknowledge and agree that the Company shall not be responsible for any Third-party Services, including their accuracy, completeness, timeliness, validity, copyright compliance, legality, decency, quality or any other aspect thereof. The Company does not assume and shall not have any liability or responsibility to You or any other person or entity for any Third-party Services. - -You must comply with applicable Third parties' Terms of agreement when using the Application. Third-party Services and links thereto are provided solely as a convenience to You and You access and use them entirely at your own risk and subject to such third parties' Terms and conditions. - -## Term and Termination - -This Agreement shall remain in effect until terminated by You or the Company. -The Company may, in its sole discretion, at any time and for any or no reason, suspend or terminate this Agreement with or without prior notice. - -This Agreement will terminate immediately, without prior notice from the Company, in the event that you fail to comply with any provision of this Agreement. You may also terminate this Agreement by deleting the Application and all copies thereof from your Device or from your computer. - -Upon termination of this Agreement, You shall cease all use of the Application and delete all copies of the Application from your Device. - -Termination of this Agreement will not limit any of the Company's rights or remedies at law or in equity in case of breach by You (during the term of this Agreement) of any of your obligations under the present Agreement. - -## Indemnification - -You agree to indemnify and hold the Company and its parents, subsidiaries, affiliates, officers, employees, agents, partners and licensors (if any) harmless from any claim or demand, including reasonable attorneys' fees, due to or arising out of your: (a) use of the Application; (b) violation of this Agreement or any law or regulation; or (c) violation of any right of a third party. - -## No Warranties - -The Application is provided to You "AS IS" and "AS AVAILABLE" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the Company, on its own behalf and on behalf of its affiliates and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the Application, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the Company provides no warranty or undertaking, and makes no representation of any kind that the Application will meet your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected. - -Without limiting the foregoing, neither the Company nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the Application, or the information, content, and materials or products included thereon; (ii) that the Application will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the Application; or (iv) that the Application, its servers, the content, or e-mails sent from or on behalf of the Company are free of viruses, scripts, trojan horses, worms, malware, timebombs or other harmful components. - -Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law. To the extent any warranty exists under law that cannot be disclaimed, the Company shall be solely responsible for such warranty. - -## Limitation of Liability - -Notwithstanding any damages that You might incur, the entire liability of the Company and any of its suppliers under any provision of this Agreement and your exclusive remedy for all of the foregoing shall be limited to the amount actually paid by You for the Application or through the Application or 100 USD if You haven't purchased anything through the Application. - -To the maximum extent permitted by applicable law, in no event shall the Company or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the Application, third-party software and/or third-party hardware used with the Application, or otherwise in connection with any provision of this Agreement), even if the Company or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose. - -Some states/jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to You. - -## Severability and Waiver - -### Severability - -If any provision of this Agreement is held to be unenforceable or invalid, such provision will be changed and interpreted to accomplish the objectives of such provision to the greatest extent possible under applicable law and the remaining provisions will continue in full force and effect. - -## Waiver - -Except as provided herein, the failure to exercise a right or to require performance of an obligation under this Agreement shall not effect a party's ability to exercise such right or require such performance at any time thereafter nor shall the waiver of a breach constitute a waiver of any subsequent breach. - -## Product Claims - -The Company does not make any warranties concerning the Application. - -## United States Legal Compliance - -You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a "terrorist supporting" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties. - -## Changes to this Agreement - -The Company reserves the right, at its sole discretion, to modify or replace this Agreement at any time. If a revision is material we will provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at the sole discretion of the Company. - -By continuing to access or use the Application after any revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, You are no longer authorized to use the Application. - -## Governing Law - -The laws of the Country, excluding its conflicts of law rules, shall govern this Agreement and your use of the Application. Your use of the Application may also be subject to other local, state, national, or international laws. - -## Entire Agreement - -The Agreement constitutes the entire agreement between You and the Company regarding your use of the Application and supersedes all prior and contemporaneous written or oral agreements between You and the Company. - -You may be subject to additional terms and conditions that apply when You use or purchase other Company's services, which the Company will provide to You at the time of such use or purchase. - -## Contact Us - -If you have any questions about this Agreement, You can contact Us: - -- By visiting our Github: [https://github.com/Dog-Face-Development/ProgramVer](https://github.com/Dog-Face-Development/ProgramVer) diff --git a/LICENSE.md b/LICENSE.md index cea92d5..83011c3 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,622 +1,9 @@ -# GNU GENERAL PUBLIC LICENSE +# MIT License -## Version 3, 29 June 2007 +Copyright © 2026 willtheorangeguy - Copyright (C) 2007 Free Software Foundation, Inc. [https://fsf.org/](https://fsf.org) - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -## Preamble +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - -## TERMS AND CONDITIONS - -**0. Definitions.** - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - -**1. Source Code.** - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - -**2. Basic Permissions.** - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - -**3. Protecting Users' Legal Rights From Anti-Circumvention Law.** - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - -**4. Conveying Verbatim Copies.** - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - -**5. Conveying Modified Source Versions.** - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - -a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - -b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - -c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - -d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - -**6. Conveying Non-Source Forms.** - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - -a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - -b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - -c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - -d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - -e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - -**7. Additional Terms.** - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - -a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - -b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - -c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - -d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - -e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - -f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - -**8. Termination.** - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - -**9. Acceptance Not Required for Having Copies.** - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - -**10. Automatic Licensing of Downstream Recipients.** - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - -**11. Patents.** - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - -**12. No Surrender of Others' Freedom.** - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - -**13. Use with the GNU Affero General Public License.** - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - -**14. Revised Versions of this License.** - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - -**15. Disclaimer of Warranty.** - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -**16. Limitation of Liability.** - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - -**17. Interpretation of Sections 15 and 16.** - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - -## END OF TERMS AND CONDITIONS +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index e2edafa..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,620 +0,0 @@ -GNU GENERAL PUBLIC LICENSE -Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -hen you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -he GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -NU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS diff --git a/PLANNING.md b/PLANNING.md index d3a3536..f95d963 100644 --- a/PLANNING.md +++ b/PLANNING.md @@ -2,7 +2,7 @@ ## Version 2.0.0 -- [ ] [#5](https://github.com/Dog-Face-Development/ProgramVer/issues/5): Make text uneditable. -- [ ] [#4](https://github.com/Dog-Face-Development/ProgramVer/issues/4): Add to other projects. +- [ ] [#5](https://github.com/willtheorangeguy/ProgramVer/issues/5): Make text uneditable. +- [ ] [#4](https://github.com/willtheorangeguy/ProgramVer/issues/4): Add to other projects. -**More planning ideas can be found on the [Issues page](https://github.com/Dog-Face-Development/ProgramVer/issues) or the [Projects page](https://github.com/Dog-Face-Development/ProgramVer/projects?type=classic).** +**More planning ideas can be found on the [Issues page](https://github.com/willtheorangeguy/ProgramVer/issues) or the [Projects page](https://github.com/willtheorangeguy/ProgramVer/projects?type=classic).** diff --git a/README.md b/README.md index 92e7c87..9feb043 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- ProgramVer + ProgramVer
ProgramVer
@@ -12,25 +12,25 @@
- PyPI Build State + PyPI Build State - Pylint State + Pylint State - Tests State + Tests State - CodeQL State + CodeQL State - GitHub Version + GitHub Version - GitHub Issues + GitHub Issues - GitHub Pull Requests + GitHub Pull Requests Discord Server ID - Downloads + Downloads - GitHub Languages + GitHub Languages
@@ -46,7 +46,7 @@
- Main image + Main image
## Key Features @@ -60,13 +60,13 @@ ## Download -You can **[download](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) the source code** to run the scripts from the command line on Windows, macOS and Linux. **This will require [Python](https://www.python.org/downloads/).** +You can **[download](https://github.com/willtheorangeguy/ProgramVer/releases/latest) the source code** to run the scripts from the command line on Windows, macOS and Linux. **This will require [Python](https://www.python.org/downloads/).** -You can **[download](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) the latest executable version** of ProgramVer for Windows. **This does not require Python.** +You can **[download](https://github.com/willtheorangeguy/ProgramVer/releases/latest) the latest executable version** of ProgramVer for Windows. **This does not require Python.** ## How To Use -To run the application, you can use [Git and the Python Interpreter](https://github.com/Dog-Face-Development/ProgramVer/main/README.md#git), which allows you to clone and run the application, or [`pip`](https://github.com/Dog-Face-Development/ProgramVer/main/README.md#pip) to create a command line application. +To run the application, you can use [Git and the Python Interpreter](https://github.com/willtheorangeguy/ProgramVer/main/README.md#git), which allows you to clone and run the application, or [`pip`](https://github.com/willtheorangeguy/ProgramVer/main/README.md#pip) to create a command line application. ### Git @@ -74,7 +74,7 @@ To clone and run this application, you'll need [Git](https://git-scm.com/downloa ```bash # Clone this repository -$ git clone https://github.com/Dog-Face-Development/ProgramVer +$ git clone https://github.com/willtheorangeguy/ProgramVer # Go into the repository $ cd ProgramVer @@ -97,7 +97,7 @@ $ programver However, you may want to add the version window to your program. To do so, follow these steps: -1. Download the latest source code release from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. +1. Download the latest source code release from [GitHub Releases](https://github.com/willtheorangeguy/ProgramVer/releases/latest) page. 2. Extract the source code files using a program like [7-Zip](https://www.7-zip.org/). 3. Copy the `ProgramVer.py` file to your project's main directory. 4. Import ProgramVer by adding `from ProgramVer import *` to your Python `import` statements. @@ -106,7 +106,7 @@ However, you may want to add the version window to your program. To do so, follo ## Support -Customization for ProgramVer can be found in the [`CUSTOMIZATION`](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/CUSTOMIZATION.md) doc. More documentation is available in the **[Documentation](https://github.com/Dog-Face-Development/ProgramVer/tree/master/docs)** and on the **[Wiki](https://github.com/Dog-Face-Development/ProgramVer/wiki)**. If more support is required, please open a **[GitHub Discussion](https://github.com/Dog-Face-Development/ProgramVer/discussions)** or join our **[Discord](https://discord.gg/x3G8adwVUe)**. +Customization for ProgramVer can be found in the [`CUSTOMIZATION`](https://github.com/willtheorangeguy/ProgramVer/blob/master/docs/CUSTOMIZATION.md) doc. More documentation is available in the **[Documentation](https://github.com/willtheorangeguy/ProgramVer/tree/master/docs)** and on the **[Wiki](https://github.com/willtheorangeguy/ProgramVer/wiki)**. If more support is required, please open a **[GitHub Discussion](https://github.com/willtheorangeguy/ProgramVer/discussions)** or join our **[Discord](https://discord.gg/x3G8adwVUe)**. ## Testing @@ -135,14 +135,15 @@ For more information about testing, see the [tests README](tests/README.md). ### Continuous Integration Tests are automatically run on GitHub Actions for every push and pull request across: + - Operating Systems: Ubuntu, Windows, and macOS - Python Versions: 3.9, 3.10, 3.11, and 3.12 ## Contributing -Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/Dog-Face-Development/ProgramVer/compare). +Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/willtheorangeguy/ProgramVer/compare). -Please read [`CONTRIBUTING`](CONTRIBUTING.md) for details on our [`CODE OF CONDUCT`](CODE_OF_CONDUCT.md), and the process for submitting pull requests to us (including how to sign our CLA). +Please read [`CONTRIBUTING`](CONTRIBUTING.md) for details on our [`CODE OF CONDUCT`](CODE_OF_CONDUCT.md), and the process for submitting pull requests to us. ## Changelog @@ -177,10 +178,10 @@ This software uses the following open source packages, projects, services or web ## You may also like... -* [PyWorkout](https://github.com/Dog-Face-Development/PyWorkout) - A minimal CLI to keep you inspired during your workout! -* [PyAvatar](https://github.com/Dog-Face-Development/PyAvatar) - Easily display all of your creative avatars to keep them consistent across websites. -* [Periodic Table Info](https://github.com/Dog-Face-Development/Periodic-Table-Info) - Print all the elements in the Periodic Table of the Elements, with an interactive prompt to learn more. +* [PyWorkout](https://github.com/willtheorangeguy/PyWorkout) - A minimal CLI to keep you inspired during your workout! +* [PyAvatar](https://github.com/willtheorangeguy/PyAvatar) - Easily display all of your creative avatars to keep them consistent across websites. +* [Periodic Table Info](https://github.com/willtheorangeguy/Periodic-Table-Info) - Print all the elements in the Periodic Table of the Elements, with an interactive prompt to learn more. ## License -This project is licensed under the [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.en.html) - see the [`LICENSE`](LICENSE.md) file for details. See the [Privacy Policy](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/PRIVACY.md), [Terms and Conditions](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/TERMS.md), and [EULA](https://github.com/Dog-Face-Development/ProgramVer/blob/master/docs/legal/EULA.md) for legal information. +This project is licensed under the [MIT License](https://mit-license.org/) - see the [`LICENSE`](LICENSE.md) file for details. diff --git a/SECURITY.md b/SECURITY.md index 8d8958a..704e5b9 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # Security Policy -The security of our software products and services is serious, which includes all source code repositories managed by [Dog Face Development Company](https://github.com/orgs/Dog-Face-Development). +The security of our software products and services is serious, which includes all source code repositories managed by [willtheorangeguy](https://github.com/orgs/willtheorangeguy). If you believe you have found a security vulnerability in any repository, please report it to us as described below in [Reporting a Vulnerability](#reporting-a-vulnerability). @@ -15,7 +15,7 @@ The following versions of ProgramVer are currently supported: ## Reporting a Vulnerability -Please open an [issue](https://github.com/Dog-Face-Development/ProgramVer/issues/new/choose) to report a security vulnerability. Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: +Please open an [issue](https://github.com/willtheorangeguy/ProgramVer/issues/new/choose) to report a security vulnerability. Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) * Full paths of source file(s) related to the manifestation of the issue diff --git a/docs/README.md b/docs/README.md index 4962185..9c2185a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,17 +1,12 @@ # ProgramVer Documentation -This folder includes all of the docs for ProgramVer. More can be found on the [wiki](https://github.com/Dog-Face-Development/ProgramVer/wiki). +This folder includes all of the docs for ProgramVer. More can be found on the [wiki](https://github.com/willtheorangeguy/ProgramVer/wiki). ```text ├── docs | ├── images -| ├── legal -| | ├── CLA_ENTITY.md -| | ├── CLA_INDIVIDUAL.md -| | ├── EULA.md -| | ├── PRIVACY.md -| | ├── TERMS.md | ├── CUSTOMIZATION.md +| ├── TESTING.md | ├── USAGE.md └── README.md ``` diff --git a/tests/README.md b/docs/TESTING.md similarity index 100% rename from tests/README.md rename to docs/TESTING.md diff --git a/docs/USAGE.md b/docs/USAGE.md index 79a2956..c802899 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -4,7 +4,7 @@ To install ProgramVer, you can use an executable package (Windows), run the scri ## Executable Package -1. To run the executable package, download the latest `.zip` file from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. +1. To run the executable package, download the latest `.zip` file from [GitHub Releases](https://github.com/willtheorangeguy/ProgramVer/releases/latest) page. 2. Extract the `.zip` file using a program like [7-Zip](https://www.7-zip.org/). 3. _(Optional) Move the files to `C:\Program Files` and create a shortcut._ 4. Double click on `send.exe`. @@ -12,7 +12,7 @@ To install ProgramVer, you can use an executable package (Windows), run the scri ## Python Script -1. To run the Python script, download the latest source code release from [GitHub Releases](https://github.com/Dog-Face-Development/ProgramVer/releases/latest) page. +1. To run the Python script, download the latest source code release from [GitHub Releases](https://github.com/willtheorangeguy/ProgramVer/releases/latest) page. 2. Download and install [Python](https://www.python.org/downloads/). 3. Extract the source code files using a program like [7-Zip](https://www.7-zip.org/). 4. Double click on `send.py`, or right-click and open with IDLE and press `F5`. diff --git a/docs/legal/CLA_ENTITY.md b/docs/legal/CLA_ENTITY.md deleted file mode 100644 index 8c5847f..0000000 --- a/docs/legal/CLA_ENTITY.md +++ /dev/null @@ -1,98 +0,0 @@ -# Dog Face Development Co. Entity Contributor License Agreement - -Thank you for your interest in contributing to Dog Face Development Company's ProgramVer ("We" or "Us"). - -The purpose of this contributor agreement ("Agreement") is to clarify and document the rights granted by contributors to Us. **This document comes into effect when you contribute to the repository containing this document.** - -## Definitions - -- **You** means the individual Copyright owner, or Your employer who Submits a Contribution to Us. -- **Legal Entity** means an entity that is not a natural person. -- **Affiliate** means any other Legal Entity that controls, is controlled by, or under common control with that Legal Entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such Legal Entity, whether by contract or otherwise, (ii) ownership of fifty percent (50%) or more of the outstanding shares or securities that vote to elect the management or other persons who direct such Legal Entity or (iii) beneficial ownership of such entity. -- **Contribution** means any original work of authorship, including any original modifications or additions to an existing work of authorship, Submitted by You to Us, in which You or Your employer own the Copyright. -- **Copyright** means all rights protecting works of authorship, including copyright, moral and neighboring rights, as appropriate, for the full term of their existence. -- **Material** means the software or documentation made available by Us to third parties. When this Agreement covers more than one software project, the Material means the software or documentation to which the Contribution was Submitted. After You Submit the Contribution, it may be included in the Material. -- **Submit** means any act by which a Contribution is transferred to Us by You by means of tangible or intangible media, including but not limited to electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, Us, but excluding any transfer that is conspicuously marked or otherwise designated in writing by You as "Not a Contribution." -- **Documentation** means any non-software portion of a Contribution. - -## License Grant - -### Copyright License to Us - -Subject to the terms and conditions of this Agreement, You (or Your employer) hereby grant to Us a worldwide, royalty-free, exclusive, perpetual and irrevocable (except as stated in Section 8.2) license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, under the Copyright covering the Contribution to use the Contribution by all means, including, but not limited to: - -- publish the Contribution, -- modify the Contribution, -- prepare derivative works based upon or containing the Contribution and/or to combine the Contribution with other Materials, -- reproduce the Contribution in original or modified form, -- distribute, to make the Contribution available to the public, display and publicly perform the Contribution in original or modified form. - -### Moral Rights - -Moral Rights remain unaffected to the extent they are recognized and not waivable by applicable law. Notwithstanding, You may add your name to the attribution mechanism customary used in the Materials you Contribute to, such as the header of the source code files of Your Contribution, and We will respect this attribution when using Your Contribution. - -### Copyright License back to You - -Upon such grant of rights to Us, We immediately grant to You (or Your employer) a worldwide, royalty-free, non-exclusive, perpetual and irrevocable license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, under the Copyright covering the Contribution to use the Contribution by all means, including, but not limited to: - -- publish the Contribution, -- modify the Contribution, -- prepare derivative works based upon or containing the Contribution and/or to combine the Contribution with other Materials, -- reproduce the Contribution in original or modified form, -- distribute, to make the Contribution available to the public, display and publicly perform the Contribution in original or modified form. - -This license back is limited to the Contribution and does not provide any rights to the Material. - -### License obligations by Us - -We agree to (sub)license the Contribution or any Materials containing, based on or derived from your (or Your employer's) Contribution under the terms of any licenses the Free Software Foundation classifies as Free Software License and which are approved by the Open Source Initiative as Open Source licenses. - -More specifically and in strict accordance with the above paragraph, we agree to (sub)license the Contribution or any Materials containing, based on or derived from the Contribution under the terms of any licenses the Free Software Foundation classifies as Free Software License and which are approved by the Open Source Initiative as Open Source licenses. - -We agree to license patents owned or controlled by You (or Your employer) only to the extent necessary to (sub)license Your Contribution(s) and the combination of Your Contribution(s) with the Material under the terms of any licenses the Free Software Foundation classifies as Free Software licenses and which are approved by the Open Source Initiative as Open Source licenses. - -## Patents - -### Patent license - -Subject to the terms and conditions of this Agreement You (or Your employer) hereby grant to Us and to recipients of Materials distributed by Us a worldwide, royalty-free, non-exclusive, perpetual and irrevocable (except as stated in Section 3.2) patent license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, to make, have made, use, sell, offer for sale, import and otherwise transfer the Contribution and the Contribution in combination with any Material (and portions of such combination). This license applies to all patents owned or controlled by You, whether already acquired or hereafter acquired, that would be infringed by making, having made, using, selling, offering for sale, importing or otherwise transferring of Your Contribution(s) alone or by combination of Your Contribution(s) with any Material. - -### Revocation of patent license - -You (or Your employer) reserve the right to revoke the patent license stated in section 3.1 if We make any infringement claim that is targeted at your Contribution and not asserted for a Defensive Purpose. An assertion of claims of the Patents shall be considered for a "Defensive Purpose" if the claims are asserted against an entity that has filed, maintained, threatened, or voluntarily participated in a patent infringement lawsuit against Us or any of Our licensees. - -## Disclaimer - -THE CONTRIBUTION IS PROVIDED "AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US AND BY US TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, SUCH WARRANTY IS LIMITED IN DURATION AND EXTENT TO THE MINIMUM PERIOD AND EXTENT PERMITTED BY LAW. - -## Consequential Damage Waiver - -TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU (OR YOUR EMPLOYER) OR WE BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. - -## Approximation of Disclaimer and Damage Waiver - -IF THE DISCLAIMER AND DAMAGE WAIVER MENTIONED IN SECTION 5. AND SECTION 6. CANNOT BE GIVEN LEGAL EFFECT UNDER APPLICABLE LOCAL LAW, REVIEWING COURTS SHALL APPLY LOCAL LAW THAT MOST CLOSELY APPROXIMATES AN ABSOLUTE WAIVER OF ALL CIVIL OR CONTRACTUAL LIABILITY IN CONNECTION WITH THE CONTRIBUTION. - -## Term - -This Agreement shall come into effect upon Your (or Your employer's) acceptance of the terms and conditions. - -This Agreement shall apply for the term of the copyright and patents licensed here. However, You (and your employer) shall have the right to terminate the Agreement if We do not fulfill the obligations as set forth in Section 4. Such termination must be made in writing. - -In the event of a termination of this Agreement Sections 5., 6., 7., 8., and 9. shall survive such termination and shall remain in full force thereafter. For the avoidance of doubt, Free and Open Source Software (sub)licenses that have already been granted for Contributions at the date of the termination shall remain in full force after the termination of this Agreement. - -## Miscellaneous - -This Agreement and all disputes, claims, actions, suits or other proceedings arising out of this agreement or relating in any way to it shall be governed by the laws of British Columbia, Canada excluding its private international law provisions. - -This Agreement sets out the entire agreement between You (or Your employer) and Us for Your Contributions to Us and overrides all other agreements or understandings. - -In case of Your death, this agreement shall continue with Your heirs. In case of more than one heir, all heirs must exercise their rights through a commonly authorized person. - -If any provision of this Agreement is found void and unenforceable, such provision will be replaced to the extent possible with a provision that comes closest to the meaning of the original provision and that is enforceable. The terms and conditions set forth in this Agreement shall apply notwithstanding any failure of essential purpose of this Agreement or any limited remedy to the maximum extent possible under law. - -You (or Your employer) agree to notify Us of any facts or circumstances of which you become aware that would make this Agreement inaccurate in any respect. - -## Attribution - -This document is adapted from the Contributor License Agreements of the [Free Software Foundation Europe](https://fsfe.org/activities/fla/fla.en.html), and [Google](https://cla.developers.google.com/about/google-individual). diff --git a/docs/legal/CLA_INDIVIDUAL.md b/docs/legal/CLA_INDIVIDUAL.md deleted file mode 100644 index 2b73f80..0000000 --- a/docs/legal/CLA_INDIVIDUAL.md +++ /dev/null @@ -1,102 +0,0 @@ -# Dog Face Development Co. Individual Contributor License Agreement - -Thank you for your interest in contributing to Dog Face Development Company's ProgramVer ("We" or "Us"). - -The purpose of this contributor agreement ("Agreement") is to clarify and document the rights granted by contributors to Us. **This document comes into effect when you contribute to the repository containing this document.** - -## How to use this CLA - -If You are an employee and have created the Contribution as part of your employment, You need to have Your employer approve the [Entity version](CLA_ENTITY.md) of this document. If You do not own the Copyright in the entire work of authorship, any other author of the Contribution should also approve this document. - -## Definitions - -- **You** means the individual Copyright owner who Submits a Contribution to Us. -- **Legal Entity** means an entity that is not a natural person. -- **Affiliate** means any other Legal Entity that controls, is controlled by, or under common control with that Legal Entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such Legal Entity, whether by contract or otherwise, (ii) ownership of fifty percent (50%) or more of the outstanding shares or securities that vote to elect the management or other persons who direct such Legal Entity or (iii) beneficial ownership of such entity. -- **Contribution** means any original work of authorship, including any original modifications or additions to an existing work of authorship, Submitted by You to Us, in which You own the Copyright. -- **Copyright** means all rights protecting works of authorship, including copyright, moral and neighboring rights, as appropriate, for the full term of their existence. -- **Material** means the software or documentation made available by Us to third parties. When this Agreement covers more than one software project, the Material means the software or documentation to which the Contribution was Submitted. After You Submit the Contribution, it may be included in the Material. -- **Submit** means any act by which a Contribution is transferred to Us by You by means of tangible or intangible media, including but not limited to electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, Us, but excluding any transfer that is conspicuously marked or otherwise designated in writing by You as "Not a Contribution." -- **Documentation** means any non-software portion of a Contribution. - -## License Grant - -### Copyright License to Us - -Subject to the terms and conditions of this Agreement, You hereby grant to Us a worldwide, royalty-free, exclusive, perpetual and irrevocable (except as stated in Section 8.2) license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, under the Copyright covering the Contribution to use the Contribution by all means, including, but not limited to: - -- publish the Contribution, -- modify the Contribution, -- prepare derivative works based upon or containing the Contribution and/or to combine the Contribution with other Materials, -- reproduce the Contribution in original or modified form, -- distribute, to make the Contribution available to the public, display and publicly perform the Contribution in original or modified form. - -### Moral Rights - -Moral Rights remain unaffected to the extent they are recognized and not waivable by applicable law. Notwithstanding, You may add your name to the attribution mechanism customary used in the Materials you Contribute to, such as the header of the source code files of Your Contribution, and We will respect this attribution when using Your Contribution. - -### Copyright License back to You - -Upon such grant of rights to Us, We immediately grant to You a worldwide, royalty-free, non-exclusive, perpetual and irrevocable license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, under the Copyright covering the Contribution to use the Contribution by all means, including, but not limited to: - -- publish the Contribution, -- modify the Contribution, -- prepare derivative works based upon or containing the Contribution and/or to combine the Contribution with other Materials, -- reproduce the Contribution in original or modified form, -- distribute, to make the Contribution available to the public, display and publicly perform the Contribution in original or modified form. - -This license back is limited to the Contribution and does not provide any rights to the Material. - -### License obligations by Us - -We agree to (sub)license the Contribution or any Materials containing, based on or derived from your Contribution under the terms of any licenses the Free Software Foundation classifies as Free Software License and which are approved by the Open Source Initiative as Open Source licenses. - -More specifically and in strict accordance with the above paragraph, we agree to (sub)license the Contribution or any Materials containing, based on or derived from the Contribution under the terms of any licenses the Free Software Foundation classifies as Free Software License and which are approved by the Open Source Initiative as Open Source licenses. - -We agree to license patents owned or controlled by You only to the extent necessary to (sub)license Your Contribution(s) and the combination of Your Contribution(s) with the Material under the terms of any licenses the Free Software Foundation classifies as Free Software licenses and which are approved by the Open Source Initiative as Open Source licenses. - -## Patents - -### Patent license - -Subject to the terms and conditions of this Agreement You hereby grant to Us and to recipients of Materials distributed by Us a worldwide, royalty-free, non-exclusive, perpetual and irrevocable (except as stated in Section 3.2) patent license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, to make, have made, use, sell, offer for sale, import and otherwise transfer the Contribution and the Contribution in combination with any Material (and portions of such combination). This license applies to all patents owned or controlled by You, whether already acquired or hereafter acquired, that would be infringed by making, having made, using, selling, offering for sale, importing or otherwise transferring of Your Contribution(s) alone or by combination of Your Contribution(s) with any Material. - -### Revocation of patent license - -You reserve the right to revoke the patent license stated in section 3.1 if We make any infringement claim that is targeted at your Contribution and not asserted for a Defensive Purpose. An assertion of claims of the Patents shall be considered for a "Defensive Purpose" if the claims are asserted against an entity that has filed, maintained, threatened, or voluntarily participated in a patent infringement lawsuit against Us or any of Our licensees. - -## Disclaimer - -THE CONTRIBUTION IS PROVIDED "AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US AND BY US TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, SUCH WARRANTY IS LIMITED IN DURATION AND EXTENT TO THE MINIMUM PERIOD AND EXTENT PERMITTED BY LAW. - -## Consequential Damage Waiver - -TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR WE BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. - -## Approximation of Disclaimer and Damage Waiver - -IF THE DISCLAIMER AND DAMAGE WAIVER MENTIONED IN SECTION 5. AND SECTION 6. CANNOT BE GIVEN LEGAL EFFECT UNDER APPLICABLE LOCAL LAW, REVIEWING COURTS SHALL APPLY LOCAL LAW THAT MOST CLOSELY APPROXIMATES AN ABSOLUTE WAIVER OF ALL CIVIL OR CONTRACTUAL LIABILITY IN CONNECTION WITH THE CONTRIBUTION. - -## Term - -This Agreement shall come into effect upon Your acceptance of the terms and conditions. - -This Agreement shall apply for the term of the copyright and patents licensed here. However, You shall have the right to terminate the Agreement if We do not fulfill the obligations as set forth in Section 4. Such termination must be made in writing. - -In the event of a termination of this Agreement Sections 5., 6., 7., 8., and 9. shall survive such termination and shall remain in full force thereafter. For the avoidance of doubt, Free and Open Source Software (sub)licenses that have already been granted for Contributions at the date of the termination shall remain in full force after the termination of this Agreement. - -## Miscellaneous - -This Agreement and all disputes, claims, actions, suits or other proceedings arising out of this agreement or relating in any way to it shall be governed by the laws of British Columbia, Canada excluding its private international law provisions. - -This Agreement sets out the entire agreement between You and Us for Your Contributions to Us and overrides all other agreements or understandings. - -In case of Your death, this agreement shall continue with Your heirs. In case of more than one heir, all heirs must exercise their rights through a commonly authorized person. - -If any provision of this Agreement is found void and unenforceable, such provision will be replaced to the extent possible with a provision that comes closest to the meaning of the original provision and that is enforceable. The terms and conditions set forth in this Agreement shall apply notwithstanding any failure of essential purpose of this Agreement or any limited remedy to the maximum extent possible under law. - -You agree to notify Us of any facts or circumstances of which you become aware that would make this Agreement inaccurate in any respect. - -## Attribution - -This document is adapted from the Contributor License Agreements of the [Free Software Foundation Europe](https://fsfe.org/activities/fla/fla.en.html), and [Google](https://cla.developers.google.com/about/google-individual). diff --git a/docs/legal/EULA.md b/docs/legal/EULA.md deleted file mode 100644 index 9ddce6e..0000000 --- a/docs/legal/EULA.md +++ /dev/null @@ -1,119 +0,0 @@ -# Dog Face Development Co. End-User License Agreement - -Last updated: September 5, 2022. - -Please read this End-User License Agreement carefully before downloading or using ProgramVer. **This document comes into effect when you contribute to the repository and/or download the software containing this document.** - -## Interpretation and Definitions - -### Interpretation - -The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. - -### Definitions - -For the purposes of this End-User License Agreement: - -- **Agreement** means this End-User License Agreement that forms the entire agreement between You and the Company regarding the use of the Application. -- **Application** means the software program provided by the Company downloaded by You to a Device, named ProgramVer. -- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to Dog Face Development Company, British Columbia, Canada. -- **Content** refers to content such as text, images, or other information that can be posted, uploaded, linked to or otherwise made available by You, regardless of the form of that content. -- **Country** refers to: British Columbia, Canada. -- **Device** means any device that can access the Application such as a computer, a cellphone or a digital tablet. -- **Third-Party Services** means any services or content (including data, information, applications and other products services) provided by a third-party that may be displayed, included or made available by the Application. -- **You** means the individual accessing or using the Application or the company, or other legal entity on behalf of which such individual is accessing or using the Application, as applicable. - -## Acknowledgment - -By downloading or using the Application, You are agreeing to be bound by the terms and conditions of this Agreement. If You do not agree to the terms of this Agreement, do not download or do not use the Application. - -This Agreement is a legal document between You and the Company and it governs your use of the Application made available to You by the Company. - -The Application is licensed, not sold, to You by the Company for use strictly in accordance with the terms of this Agreement. - -## License - -### Scope of License - -The Company grants You a revocable, non-exclusive, non-transferable, limited license to download, install and use the Application strictly in accordance with the terms of this Agreement, and with the `LICENSE` file included with the software download. - -The license that is granted to You by the Company is solely for your personal, non-commercial purposes strictly in accordance with the terms of this Agreement, and with the `LICENSE` file included with the software download. - -## Third-Party Services - -The Application may display, include or make available third-party content (including data, information, applications and other products services) or provide links to third-party websites or services. - -You acknowledge and agree that the Company shall not be responsible for any Third-party Services, including their accuracy, completeness, timeliness, validity, copyright compliance, legality, decency, quality or any other aspect thereof. The Company does not assume and shall not have any liability or responsibility to You or any other person or entity for any Third-party Services. - -You must comply with applicable Third parties' Terms of agreement when using the Application. Third-party Services and links thereto are provided solely as a convenience to You and You access and use them entirely at your own risk and subject to such third parties' Terms and conditions. - -## Term and Termination - -This Agreement shall remain in effect until terminated by You or the Company. -The Company may, in its sole discretion, at any time and for any or no reason, suspend or terminate this Agreement with or without prior notice. - -This Agreement will terminate immediately, without prior notice from the Company, in the event that you fail to comply with any provision of this Agreement. You may also terminate this Agreement by deleting the Application and all copies thereof from your Device or from your computer. - -Upon termination of this Agreement, You shall cease all use of the Application and delete all copies of the Application from your Device. - -Termination of this Agreement will not limit any of the Company's rights or remedies at law or in equity in case of breach by You (during the term of this Agreement) of any of your obligations under the present Agreement. - -## Indemnification - -You agree to indemnify and hold the Company and its parents, subsidiaries, affiliates, officers, employees, agents, partners and licensors (if any) harmless from any claim or demand, including reasonable attorneys' fees, due to or arising out of your: (a) use of the Application; (b) violation of this Agreement or any law or regulation; or (c) violation of any right of a third party. - -## No Warranties - -The Application is provided to You "AS IS" and "AS AVAILABLE" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the Company, on its own behalf and on behalf of its affiliates and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the Application, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the Company provides no warranty or undertaking, and makes no representation of any kind that the Application will meet your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected. - -Without limiting the foregoing, neither the Company nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the Application, or the information, content, and materials or products included thereon; (ii) that the Application will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the Application; or (iv) that the Application, its servers, the content, or e-mails sent from or on behalf of the Company are free of viruses, scripts, trojan horses, worms, malware, timebombs or other harmful components. - -Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law. To the extent any warranty exists under law that cannot be disclaimed, the Company shall be solely responsible for such warranty. - -## Limitation of Liability - -Notwithstanding any damages that You might incur, the entire liability of the Company and any of its suppliers under any provision of this Agreement and your exclusive remedy for all of the foregoing shall be limited to the amount actually paid by You for the Application or through the Application or 100 USD if You haven't purchased anything through the Application. - -To the maximum extent permitted by applicable law, in no event shall the Company or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the Application, third-party software and/or third-party hardware used with the Application, or otherwise in connection with any provision of this Agreement), even if the Company or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose. - -Some states/jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to You. - -## Severability and Waiver - -### Severability - -If any provision of this Agreement is held to be unenforceable or invalid, such provision will be changed and interpreted to accomplish the objectives of such provision to the greatest extent possible under applicable law and the remaining provisions will continue in full force and effect. - -## Waiver - -Except as provided herein, the failure to exercise a right or to require performance of an obligation under this Agreement shall not effect a party's ability to exercise such right or require such performance at any time thereafter nor shall the waiver of a breach constitute a waiver of any subsequent breach. - -## Product Claims - -The Company does not make any warranties concerning the Application. - -## United States Legal Compliance - -You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a "terrorist supporting" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties. - -## Changes to this Agreement - -The Company reserves the right, at its sole discretion, to modify or replace this Agreement at any time. If a revision is material we will provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at the sole discretion of the Company. - -By continuing to access or use the Application after any revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, You are no longer authorized to use the Application. - -## Governing Law - -The laws of the Country, excluding its conflicts of law rules, shall govern this Agreement and your use of the Application. Your use of the Application may also be subject to other local, state, national, or international laws. - -## Entire Agreement - -The Agreement constitutes the entire agreement between You and the Company regarding your use of the Application and supersedes all prior and contemporaneous written or oral agreements between You and the Company. - -You may be subject to additional terms and conditions that apply when You use or purchase other Company's services, which the Company will provide to You at the time of such use or purchase. - -## Contact Us - -If you have any questions about this Agreement, You can contact Us: - -- By visiting our Github: [https://github.com/Dog-Face-Development/ProgramVer](https://github.com/Dog-Face-Development/ProgramVer) diff --git a/docs/legal/PRIVACY.md b/docs/legal/PRIVACY.md deleted file mode 100644 index f7c5cbe..0000000 --- a/docs/legal/PRIVACY.md +++ /dev/null @@ -1,99 +0,0 @@ -# Dog Face Development Co. Privacy Policy - -Last updated: September 5, 2022. - -This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You. - -We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. - -**This document comes into effect when you contribute to the repository and/or download the software containing this document.** - -## Interpretation and Definitions - -### Interpretation - -The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. - -### Definitions - -For the purposes of this Privacy Policy: - -- **Account** means a unique account created for You to access our Service or parts of our Service. -- **Affiliate** means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority. -- **Application** means the software program provided by the Company downloaded by You on any electronic device, named ProgramVer. -- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to Dog Face Development Company. -- **Country** refers to: British Columbia, Canada. -- **Device** means any device that can access the Service such as a computer, a cellphone or a digital tablet. -- **Personal Data** is any information that relates to an identified or identifiable individual. -- **Service** refers to the Application. -- **Service Provider** means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used. -- **Usage Data** refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit). -- **You** means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable. - -## Collecting and Using Your Personal Data - -## Types of Data Collected - -### Personal Data - -While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. - -## Use of Your Personal Data - -The Company may use Personal Data for the following purposes: - -- **To provide and maintain our Service**, this data is necessary to create a good user experience that follows all of the objectives set out by the code. - -## Retention of Your Personal Data - -The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies. - -## Disclosure of Your Personal Data - -### Business Transactions - -If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy. - -### Law Enforcement - -Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency). - -### Other Legal Requirements - -The Company may disclose Your Personal Data in the good faith belief that such action is necessary to: - -- Comply with a legal obligation -- Protect and defend the rights or property of the Company -- Prevent or investigate possible wrongdoing in connection with the Service -- Protect the personal safety of Users of the Service or the public -- Protect against legal liability - -## Security of Your Personal Data - -The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security. - -## Children's Privacy - -Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers. - -If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information. - -## Links to Other Websites - -Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit. - -We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services. - -## Changes to this Privacy Policy - -We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page. - -We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the "Last updated" date at the top of this Privacy Policy. - -You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page. - -## Contact Us - -If you have any questions about this Privacy Policy, You can contact us: - -- By visiting our GitHub page: [https://github.com/Dog-Face-Development/ProgramVer](https://github.com/Dog-Face-Development/ProgramVer). diff --git a/docs/legal/TERMS.md b/docs/legal/TERMS.md deleted file mode 100644 index 3930af1..0000000 --- a/docs/legal/TERMS.md +++ /dev/null @@ -1,99 +0,0 @@ -# Dog Face Development Co. Terms and Conditions - -Last updated: September 5, 2022. - -Please read these terms and conditions carefully before using ProgramVer. **This document comes into effect when you contribute to the repository and/or download the software containing this document.** - -## Interpretation and Definitions - -### Interpretation - -The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. - -### Definitions - -For the purposes of these Terms and Conditions: - -- **Application** means the software program provided by Dog Face Development Company downloaded by you on any electronic device, named ProgramVer. -- **Application Store** means the digital distribution service operated and developed by Apple Inc. (Apple App Store), Google Inc. (Google Play Store) or Microsoft Inc. (GitHub), in which the Application has been downloaded. -- **Affiliate** means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority. -- **Country** refers to: British Columbia, Canada. -- **Company** (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to the developer named as Dog Face Development Company. -- **Device** means any device that can access the Service such as a computer, a cellphone or a digital tablet. -- **Service** refers to the Application. -- **Terms and Conditions** (also referred as "Terms") mean these Terms and Conditions that form the entire agreement between You and the Company regarding the use of the Service. -- **You** means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable. - -## Acknowledgment - -These are the Terms and Conditions governing the use of this Service and the agreement that operates between You and the Company. These Terms and Conditions set out the rights and obligations of all users regarding the use of the Service. - -Your access to and use of the Service is conditioned on Your acceptance of and compliance with these Terms and Conditions. These Terms and Conditions apply to all visitors, users and others who access or use the Service. - -By accessing or using the Service You agree to be bound by these Terms and Conditions. If You disagree with any part of these Terms and Conditions then You may not access the Service. - -Your access to and use of the Service is also conditioned on Your acceptance of and compliance with the Privacy Policy of the Company. Our Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your personal information when You use the Application or the Website and tells You about Your privacy rights and how the law protects You. Please read Our Privacy Policy carefully before using Our Service. - -## Links to Other Websites - -Our Service may contain links to third-party web sites or services that are not owned or controlled by the Company. - -The Company has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that the Company shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods or services available on or through any such web sites or services. - -We strongly advise You to read the terms and conditions and privacy policies of any third-party web sites or services that You visit. - -## Termination - -We may terminate or suspend Your access immediately, without prior notice or liability, for any reason whatsoever, including without limitation if You breach these Terms and Conditions. - -Upon termination, Your right to use the Service will cease immediately. - -## Limitation of Liability - -Notwithstanding any damages that You might incur, the entire liability of the Company and any of its suppliers under any provision of this Terms and Your exclusive remedy for all of the foregoing shall be limited to the amount actually paid by You through the Service or 100 USD if You haven't purchased anything through the Service. - -To the maximum extent permitted by applicable law, in no event shall the Company or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the Service, third-party software and/or third-party hardware used with the Service, or otherwise in connection with any provision of this Terms), even if the Company or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose. - -Some states do not allow the exclusion of implied warranties or limitation of liability for incidental or consequential damages, which means that some of the above limitations may not apply. In these states, each party's liability will be limited to the greatest extent permitted by law. - -## "AS IS" and "AS AVAILABLE" Disclaimer - -The Service is provided to You "AS IS" and "AS AVAILABLE" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the Company, on its own behalf and on behalf of its Affiliates and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the Service, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the Company provides no warranty or undertaking, and makes no representation of any kind that the Service will meet Your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected. - -Without limiting the foregoing, neither the Company nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the Service, or the information, content, and materials or products included thereon; (ii) that the Service will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the Service; or (iv) that the Service, its servers, the content, or e-mails sent from or on behalf of the Company are free of viruses, scripts, trojan horses, worms, malware, timebombs or other harmful components. - -Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law. - -## Governing Law - -The laws of the Country, excluding its conflicts of law rules, shall govern this Terms and Your use of the Service. Your use of the Application may also be subject to other local, state, national, or international laws. - -## Disputes Resolution - -If You have any concern or dispute about the Service, You agree to first try to resolve the dispute informally by contacting the Company. Contact information is available on the [GitHub](https://github.com/Dog-Face-Development/ProgramVer) page. - -## For European Union (EU) Users - -If You are a European Union consumer, you will benefit from any mandatory provisions of the law of the country in which you are resident in. - -## Severability and Waiver - -### Severability - -If any provision of these Terms is held to be unenforceable or invalid, such provision will be changed and interpreted to accomplish the objectives of such provision to the greatest extent possible under applicable law and the remaining provisions will continue in full force and effect. - -### Waiver - -Except as provided herein, the failure to exercise a right or to require performance of an obligation under these Terms shall not effect a party's ability to exercise such right or require such performance at any time thereafter nor shall the waiver of a breach constitute a waiver of any subsequent breach. - -## Changes to These Terms and Conditions - -We reserve the right, at Our sole discretion, to modify or replace these Terms at any time. If a revision is material We will make reasonable efforts to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at Our sole discretion. - -By continuing to access or use Our Service after those revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, in whole or in part, please stop using the website and the Service. - -## Contact Us - -If you have any questions about these Terms and Conditions, You can contact us: - -- By visiting our GitHub page: [https://github.com/Dog-Face-Development/ProgramVer](https://github.com/Dog-Face-Development/ProgramVer). diff --git a/imgs/dfdlogo.gif b/imgs/dfdlogo.gif deleted file mode 100644 index 7324efe5e29c8c44c0743a5a57e810d50c16b121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7849 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 U*?8jKy?P@w{+r3fzrJAdKVM4(IsgCw diff --git a/main.py b/main.py index bd65a60..3b5892e 100644 --- a/main.py +++ b/main.py @@ -1,18 +1,6 @@ """ ProgramVer - A Python version of Microsoft's 'winver'. -Copyright (C) 2017-2024 Dog Face Development Co. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . +Copyright (C) 2017-2026 willtheorangeguy """ # pylint: disable=import-error, invalid-name diff --git a/pyproject.toml b/pyproject.toml index a4918bd..05fa9d8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,15 +14,15 @@ license = { file="LICENSE.md" } requires-python = ">=3.9" classifiers = [ 'Development Status :: 5 - Production/Stable', - 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + 'License :: OSI Approved :: MIT License', 'Natural Language :: English', 'Operating System :: OS Independent', 'Topic :: Software Development :: User Interfaces', ] [project.urls] -"Homepage" = "https://github.com/Dog-Face-Development/ProgramVer" -"Bug Tracker" = "https://github.com/Dog-Face-Development/ProgramVer/issues" +"Homepage" = "https://github.com/willtheorangeguy/ProgramVer" +"Bug Tracker" = "https://github.com/willtheorangeguy/ProgramVer/issues" [tool.setuptools] include-package-data = true diff --git a/setup.py b/setup.py index 712f2c2..2e97d2e 100644 --- a/setup.py +++ b/setup.py @@ -17,13 +17,13 @@ def readme(): long_description=readme(), classifiers=[ "Development Status :: 5 - Production/Stable", - "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Topic :: Software Development :: User Interfaces", ], keywords="program version windows winver microsoft license gui", - url="https://github.com/Dog-Face-Development/ProgramVer", + url="https://github.com/willtheorangeguy/ProgramVer", author="willtheorangeguy", packages=find_packages(where="imgs"), package_dir={"": "imgs"}, From cbf0cc8d81c5ea8049e23e5e92eb8e17989c13a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 02:42:31 +0000 Subject: [PATCH 96/98] feat(tests): update codecov/codecov-action to v7 in workflow --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ca1c8d2..dff319f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -61,7 +61,7 @@ jobs: python -m pytest tests/ -v --cov=. --cov-report=xml --cov-report=term - name: Upload coverage to Codecov - uses: codecov/codecov-action@v6 + uses: codecov/codecov-action@v7 if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12' with: file: ./coverage.xml From ab5357ac54ec17a64417f967a5d8188013f64c87 Mon Sep 17 00:00:00 2001 From: willtheorangeguy Date: Wed, 17 Jun 2026 12:20:45 -0600 Subject: [PATCH 97/98] feat: refactor --- .github/workflows/tests.yml | 4 +- MANIFEST.in | 3 +- __init__.py | 5 - __main__.py | 8 - main.py | 121 +--- programver/__init__.py | 6 + programver/__main__.py | 30 + programver/_text_viewer.py | 27 + programver/_utils.py | 27 + programver/dialog.py | 89 +++ programver/imgs/__init__.py | 1 + .../imgs}/pythonpoweredlengthgif.gif | Bin pyproject.toml | 12 +- setup.cfg | 15 +- setup.py | 14 +- tests/test_main.py | 684 ++++++++++++------ 16 files changed, 721 insertions(+), 325 deletions(-) delete mode 100644 __init__.py delete mode 100644 __main__.py create mode 100644 programver/__init__.py create mode 100644 programver/__main__.py create mode 100644 programver/_text_viewer.py create mode 100644 programver/_utils.py create mode 100644 programver/dialog.py create mode 100644 programver/imgs/__init__.py rename {imgs => programver/imgs}/pythonpoweredlengthgif.gif (100%) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index dff319f..1ede2ba 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -53,12 +53,12 @@ jobs: - name: Run tests (Linux) if: runner.os == 'Linux' run: | - xvfb-run -a python -m pytest tests/ -v --cov=. --cov-report=xml --cov-report=term + xvfb-run -a python -m pytest tests/ -v --cov=programver --cov-report=xml --cov-report=term - name: Run tests (Windows/macOS) if: runner.os != 'Linux' run: | - python -m pytest tests/ -v --cov=. --cov-report=xml --cov-report=term + python -m pytest tests/ -v --cov=programver --cov-report=xml --cov-report=term - name: Upload coverage to Codecov uses: codecov/codecov-action@v7 diff --git a/MANIFEST.in b/MANIFEST.in index 7ead327..eb4d3a0 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,2 +1 @@ -include imgs/dfdlogo.gif -include imgs/pythonpoweredlengthgif.gif \ No newline at end of file +recursive-include programver/imgs *.gif *.png diff --git a/__init__.py b/__init__.py deleted file mode 100644 index 7abf536..0000000 --- a/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""Initialize PyPI Package""" - -# pylint: disable=import-error, invalid-name - -__all__ = ["main"] diff --git a/__main__.py b/__main__.py deleted file mode 100644 index 3677f08..0000000 --- a/__main__.py +++ /dev/null @@ -1,8 +0,0 @@ -"""Main entry point for the application.""" - -# pylint: disable=import-error, invalid-name - -from main import ProgramVer - -if __name__ == "__main__": - ProgramVer() diff --git a/main.py b/main.py index 3b5892e..6b379e2 100644 --- a/main.py +++ b/main.py @@ -1,97 +1,46 @@ """ -ProgramVer - A Python version of Microsoft's 'winver'. +ProgramVer - Standalone demo/test entry point. +Imports from the programver package and shows a demo version dialog. Copyright (C) 2017-2026 willtheorangeguy """ # pylint: disable=import-error, invalid-name import os -from tkinter import Tk, Text, INSERT, PhotoImage, Label, Button, TOP, BOTTOM +from programver import VersionDialog -# Import Statements -# Helper Functions - - -def get_resource_path(filename): - """Get the absolute path to a resource file.""" - base_dir = os.path.dirname(os.path.abspath(__file__)) - return os.path.join(base_dir, filename) - - -# Document Functions - - -def openLicense(): - """Opens the license file in a new window.""" - windowl = Tk() - license_path = get_resource_path("LICENSE.txt") - with open(license_path, "r", encoding="UTF-8") as licensefile: - licensecontents = licensefile.read() - windowl.title("License") - licensetext = Text(windowl) - licensetext.insert(INSERT, licensecontents) - licensetext.pack() - - -def openEULA(): - """Opens the EULA file in a new window.""" - windowl = Tk() - eula_path = get_resource_path("EULA.txt") - with open(eula_path, "r", encoding="UTF-8") as eulafile: - eulacontents = eulafile.read() - windowl.title("EULA") - eulatext = Text(windowl) - eulatext.insert(INSERT, eulacontents) - eulatext.pack() - - -# ProgramVer Function def ProgramVer(): - """Main function for ProgramVer.""" - window = Tk() - # Window Elements - window.title( - "Copyright & Version Info for ProgramVer" - ) # change name based on program name - # UI Elements - dfdimage = PhotoImage(file=get_resource_path("imgs/dfdlogo.gif")) - pythonimage = PhotoImage(file=get_resource_path("imgs/pythonpoweredlengthgif.gif")) - dfdlogo = Label(window, image=dfdimage) - pythonpowered = Label(window, image=pythonimage) - info = Label( - window, text="ProgramVer \n Version: 1.9.0 (Build #)" - ) # change respectively - trademarks = Label( - window, - text="Copyright (C) 2017 - 2024 Dog Face Development Co. \ - All rights reserved in all countries. \ - \n ProgramVer and its code, user interface and all other associated trademarks are protected \ - \nby trademarks and copyright in Canada, the United States and other countries.", - ) # change as needed - licenseblurb = Label( - window, - text="""\n ProgramVer - Version window for DFD Co.'s programs - Copyright (C) 2017-2024 Dog Face Development Company - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 3 of the License. + """Main function for ProgramVer demo.""" + base_dir = os.path.dirname(os.path.abspath(__file__)) - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License below for more details.""", - ) # change as needed - licensebtn = Button(window, text="Open License", command=openLicense) - eulabtn = Button(window, text="Open EULA", command=openEULA) - # Pack Statements - dfdlogo.pack(side=TOP) - info.pack(side=TOP) - trademarks.pack(side=TOP) - licenseblurb.pack(side=TOP) - licensebtn.pack(pady=5) - eulabtn.pack(pady=5) - pythonpowered.pack(side=BOTTOM) - # Maintain Window - window.mainloop() + dialog = VersionDialog( + app_name="ProgramVer", + version="2.0.0", + copyright_text=( + "Copyright (C) 2017-2026 Dog Face Development Co.\n" + "All rights reserved in all countries.\n" + "ProgramVer and its code, user interface and all other associated\n" + "trademarks are protected by trademarks and copyright in Canada,\n" + "the United States and other countries." + ), + license_path=os.path.join(base_dir, "LICENSE.md"), + license_blurb=( + "\nProgramVer - Version window for DFD Co.'s programs\n" + "Copyright (C) 2017-2026 Dog Face Development Company\n\n" + "This program is free software: you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" + "the Free Software Foundation, version 3 of the License.\n\n" + "This program is distributed in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + "GNU General Public License below for more details." + ), + show_python_powered=True, + window_title="Copyright & Version Info for ProgramVer", + ) + dialog.show() + + +if __name__ == "__main__": + ProgramVer() diff --git a/programver/__init__.py b/programver/__init__.py new file mode 100644 index 0000000..2a5416c --- /dev/null +++ b/programver/__init__.py @@ -0,0 +1,6 @@ +"""ProgramVer - A customizable version dialog for Python applications.""" + +from programver.dialog import VersionDialog + +__all__ = ["VersionDialog"] +__version__ = "2.0.0" diff --git a/programver/__main__.py b/programver/__main__.py new file mode 100644 index 0000000..3cce727 --- /dev/null +++ b/programver/__main__.py @@ -0,0 +1,30 @@ +"""Entry point for python -m programver.""" + +import os +from programver.dialog import VersionDialog + + +def main(): + """Run ProgramVer demo dialog.""" + base_dir = os.path.dirname(os.path.abspath(__file__)) + license_path = os.path.join(base_dir, "..", "LICENSE.md") + + dialog = VersionDialog( + app_name="ProgramVer", + version="2.0.0", + copyright_text=( + "Copyright (C) 2017-2026 willtheorangeguy.\n" + "All rights reserved." + ), + license_path=license_path, + license_blurb=( + "ProgramVer - A customizable version dialog for Python applications.\n" + "This project is licensed under the MIT License." + ), + show_python_powered=True, + ) + dialog.show() + + +if __name__ == "__main__": + main() diff --git a/programver/_text_viewer.py b/programver/_text_viewer.py new file mode 100644 index 0000000..e20f252 --- /dev/null +++ b/programver/_text_viewer.py @@ -0,0 +1,27 @@ +"""Read-only scrollable text viewer window.""" + +import tkinter as tk + + +class TextViewer: + """Displays a file's contents in a read-only, scrollable Toplevel window.""" + + def __init__(self, parent, title, file_path): + self.window = tk.Toplevel(parent) + self.window.title(title) + + frame = tk.Frame(self.window) + frame.pack(fill=tk.BOTH, expand=True) + + scrollbar = tk.Scrollbar(frame) + scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + + text_widget = tk.Text(frame, yscrollcommand=scrollbar.set, wrap=tk.WORD) + text_widget.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + scrollbar.config(command=text_widget.yview) + + with open(file_path, "r", encoding="UTF-8") as f: + content = f.read() + + text_widget.insert(tk.INSERT, content) + text_widget.config(state=tk.DISABLED) diff --git a/programver/_utils.py b/programver/_utils.py new file mode 100644 index 0000000..6fd948e --- /dev/null +++ b/programver/_utils.py @@ -0,0 +1,27 @@ +"""Internal utilities for ProgramVer.""" + +import os +import tkinter as tk + + +def get_or_create_root(): + """Detect whether a Tk root already exists. + + Returns: + tuple: (window, is_standalone) + - If Tk root exists: (Toplevel(root), False) + - If no Tk root: (Tk(), True) + """ + try: + existing_root = tk._default_root + if existing_root is not None and existing_root.winfo_exists(): + return tk.Toplevel(existing_root), False + except Exception: + pass + root = tk.Tk() + return root, True + + +def get_bundled_image_path(filename): + """Get path to a bundled image in the programver package.""" + return os.path.join(os.path.dirname(os.path.abspath(__file__)), "imgs", filename) diff --git a/programver/dialog.py b/programver/dialog.py new file mode 100644 index 0000000..28587b8 --- /dev/null +++ b/programver/dialog.py @@ -0,0 +1,89 @@ +"""Core VersionDialog class for ProgramVer.""" + +import tkinter as tk + +from programver._utils import get_or_create_root, get_bundled_image_path +from programver._text_viewer import TextViewer + + +class VersionDialog: + """A customizable 'winver'-style version information dialog. + + Can be used standalone (creates its own Tk root and runs mainloop) + or embedded in an existing tkinter application (uses Toplevel). + """ + + def __init__( + self, + app_name, + version, + copyright_text, + license_path=None, + eula_path=None, + license_blurb=None, + logo_path=None, + show_python_powered=True, + window_title=None, + ): + self.app_name = app_name + self.version = version + self.copyright_text = copyright_text + self.license_path = license_path + self.eula_path = eula_path + self.license_blurb = license_blurb + self.logo_path = logo_path + self.show_python_powered = show_python_powered + self.window_title = window_title or f"About {app_name}" + + def show(self): + """Display the version dialog. + + If a Tk root already exists, creates a Toplevel window. + If no Tk root exists, creates Tk root and calls mainloop(). + """ + window, is_standalone = get_or_create_root() + window.title(self.window_title) + + if self.logo_path: + logo_img = tk.PhotoImage(file=self.logo_path) + window._logo_img = logo_img + logo_label = tk.Label(window, image=logo_img) + logo_label.pack(side=tk.TOP) + + info = tk.Label( + window, text=f"{self.app_name}\nVersion: {self.version}" + ) + info.pack(side=tk.TOP) + + trademarks = tk.Label(window, text=self.copyright_text) + trademarks.pack(side=tk.TOP) + + if self.license_blurb: + blurb = tk.Label(window, text=self.license_blurb) + blurb.pack(side=tk.TOP) + + if self.license_path: + license_btn = tk.Button( + window, + text="Open License", + command=lambda: TextViewer(window, "License", self.license_path), + ) + license_btn.pack(pady=5) + + if self.eula_path: + eula_btn = tk.Button( + window, + text="Open EULA", + command=lambda: TextViewer(window, "EULA", self.eula_path), + ) + eula_btn.pack(pady=5) + + if self.show_python_powered: + badge_path = get_bundled_image_path("pythonpoweredlengthgif.gif") + badge_img = tk.PhotoImage(file=badge_path) + window._badge_img = badge_img + badge_label = tk.Label(window, image=badge_img) + badge_label.pack(side=tk.BOTTOM) + + if is_standalone: + window.mainloop() diff --git a/programver/imgs/__init__.py b/programver/imgs/__init__.py new file mode 100644 index 0000000..dfe20c9 --- /dev/null +++ b/programver/imgs/__init__.py @@ -0,0 +1 @@ +"""Image assets for ProgramVer.""" diff --git a/imgs/pythonpoweredlengthgif.gif b/programver/imgs/pythonpoweredlengthgif.gif similarity index 100% rename from imgs/pythonpoweredlengthgif.gif rename to programver/imgs/pythonpoweredlengthgif.gif diff --git a/pyproject.toml b/pyproject.toml index 05fa9d8..d9a9aff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,11 +4,11 @@ requires = ["setuptools", "wheel"] [project] name = "ProgramVer" -version = "1.9.0" +version = "2.0.0" authors = [ { name= "willtheorangeguy" }, ] -description = "A Python version of Microsoft's 'winver', built to be customizable, and to show copyright info and licenses." +description = "A customizable version dialog for Python applications, inspired by Microsoft's winver." readme = "README.md" license = { file="LICENSE.md" } requires-python = ">=3.9" @@ -24,8 +24,14 @@ classifiers = [ "Homepage" = "https://github.com/willtheorangeguy/ProgramVer" "Bug Tracker" = "https://github.com/willtheorangeguy/ProgramVer/issues" +[project.scripts] +programver = "programver.__main__:main" + [tool.setuptools] include-package-data = true [tool.setuptools.packages.find] -where = ["imgs"] \ No newline at end of file +include = ["programver", "programver.*"] + +[tool.setuptools.package-data] +"programver.imgs" = ["*.gif", "*.png"] diff --git a/setup.cfg b/setup.cfg index 5c00bca..276b000 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,16 +1,21 @@ [metadata] name = programver -version = 1.9.0 +version = 2.0.0 [options] packages = find: -package_dir = - = imgs include_package_data = True [options.packages.find] -where = imgs +include = + programver + programver.* + +[options.package_data] +programver.imgs = + *.gif + *.png [options.entry_points] console_scripts = - programver = main:ProgramVer \ No newline at end of file + programver = programver.__main__:main diff --git a/setup.py b/setup.py index 2e97d2e..4ff21d1 100644 --- a/setup.py +++ b/setup.py @@ -11,10 +11,11 @@ def readme(): setup( name="programver", - version="1.9.0", - description="A Python version of Microsoft's 'winver', \ - built to be customizable, and to show copyright info and licenses.", + version="2.0.0", + description="A customizable version dialog for Python applications, " + "inspired by Microsoft's winver.", long_description=readme(), + long_description_content_type="text/markdown", classifiers=[ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", @@ -25,9 +26,8 @@ def readme(): keywords="program version windows winver microsoft license gui", url="https://github.com/willtheorangeguy/ProgramVer", author="willtheorangeguy", - packages=find_packages(where="imgs"), - package_dir={"": "imgs"}, + packages=find_packages(include=["programver", "programver.*"]), + package_data={"programver.imgs": ["*.gif", "*.png"]}, include_package_data=True, - py_modules=["main"], - entry_points={"console_scripts": ["programver=main:ProgramVer"]}, + entry_points={"console_scripts": ["programver=programver.__main__:main"]}, ) diff --git a/tests/test_main.py b/tests/test_main.py index 5576bbf..c967408 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,6 +1,6 @@ """ -Tests for ProgramVer main module. -Copyright (C) 2017-2024 Dog Face Development Co. +Tests for ProgramVer package. +Copyright (C) 2017-2026 Dog Face Development Co. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -8,262 +8,532 @@ """ # pylint: disable=import-error, invalid-name, wrong-import-position, import-outside-toplevel, unused-argument -# unused-argument is disabled because @patch decorators inject mocked objects as parameters -# even when not all mocks are used in every test import unittest -from unittest.mock import Mock, patch, mock_open -import os -import sys +from unittest.mock import Mock, patch, mock_open, PropertyMock +import tkinter as tk + + +class TestVersionDialogInit(unittest.TestCase): + """Test cases for VersionDialog.__init__.""" + + def test_required_params_stored(self): + """Test that required parameters are stored correctly.""" + from programver.dialog import VersionDialog + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + ) + self.assertEqual(dialog.app_name, "TestApp") + self.assertEqual(dialog.version, "1.0.0") + self.assertEqual(dialog.copyright_text, "Copyright 2024") + + def test_optional_params_default_none(self): + """Test that optional parameters default to None or expected values.""" + from programver.dialog import VersionDialog + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + ) + self.assertIsNone(dialog.license_path) + self.assertIsNone(dialog.eula_path) + self.assertIsNone(dialog.license_blurb) + self.assertIsNone(dialog.logo_path) + self.assertTrue(dialog.show_python_powered) + self.assertEqual(dialog.window_title, "About TestApp") + + def test_custom_window_title(self): + """Test that custom window title is stored.""" + from programver.dialog import VersionDialog + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + window_title="Custom Title", + ) + self.assertEqual(dialog.window_title, "Custom Title") + + def test_all_optional_params(self): + """Test that all optional parameters are stored correctly.""" + from programver.dialog import VersionDialog + + dialog = VersionDialog( + app_name="TestApp", + version="2.0.0", + copyright_text="Copyright 2024", + license_path="/path/to/LICENSE", + eula_path="/path/to/EULA", + license_blurb="MIT License", + logo_path="/path/to/logo.gif", + show_python_powered=False, + window_title="About Test", + ) + self.assertEqual(dialog.license_path, "/path/to/LICENSE") + self.assertEqual(dialog.eula_path, "/path/to/EULA") + self.assertEqual(dialog.license_blurb, "MIT License") + self.assertEqual(dialog.logo_path, "/path/to/logo.gif") + self.assertFalse(dialog.show_python_powered) + self.assertEqual(dialog.window_title, "About Test") + + +class TestVersionDialogShow(unittest.TestCase): + """Test cases for VersionDialog.show method.""" + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Button") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_standalone_calls_mainloop( + self, mock_root, mock_label, mock_button, mock_photo, mock_path + ): + """Test that show() calls mainloop in standalone mode.""" + from programver.dialog import VersionDialog -# Add parent directory to path for imports -sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + show_python_powered=False, + ) + dialog.show() + + mock_window.mainloop.assert_called_once() + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Button") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_embedded_no_mainloop( + self, mock_root, mock_label, mock_button, mock_photo, mock_path + ): + """Test that show() does not call mainloop in embedded mode.""" + from programver.dialog import VersionDialog -from main import openLicense, openEULA, ProgramVer, get_resource_path + mock_window = Mock() + mock_root.return_value = (mock_window, False) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + show_python_powered=False, + ) + dialog.show() + + mock_window.mainloop.assert_not_called() + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Button") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_sets_window_title( + self, mock_root, mock_label, mock_button, mock_photo, mock_path + ): + """Test that show() sets the window title.""" + from programver.dialog import VersionDialog + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + window_title="Custom Title", + show_python_powered=False, + ) + dialog.show() + + mock_window.title.assert_called_once_with("Custom Title") + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_creates_info_label(self, mock_root, mock_label, mock_photo, mock_path): + """Test that show() creates an info label with app name and version.""" + from programver.dialog import VersionDialog -class TestGetResourcePath(unittest.TestCase): - """Test cases for get_resource_path helper function.""" + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="3.0.0", + copyright_text="Copyright 2024", + show_python_powered=False, + ) + dialog.show() + + label_calls = mock_label.call_args_list + label_texts = [call[1].get("text", "") for call in label_calls] + self.assertTrue( + any("TestApp" in t and "3.0.0" in t for t in label_texts) + ) + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Button") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_license_button_when_path_provided( + self, mock_root, mock_label, mock_button, mock_photo, mock_path + ): + """Test that license button appears when license_path is set.""" + from programver.dialog import VersionDialog - def test_get_resource_path_returns_absolute_path(self): - """Test that get_resource_path returns an absolute path.""" - result = get_resource_path("LICENSE.txt") - self.assertTrue(os.path.isabs(result)) + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + license_path="/path/to/LICENSE", + show_python_powered=False, + ) + dialog.show() + + button_texts = [call[1].get("text", "") for call in mock_button.call_args_list] + self.assertIn("Open License", button_texts) + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Button") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_no_license_button_when_path_none( + self, mock_root, mock_label, mock_button, mock_photo, mock_path + ): + """Test that license button is hidden when license_path is None.""" + from programver.dialog import VersionDialog - def test_get_resource_path_includes_filename(self): - """Test that get_resource_path includes the filename.""" - result = get_resource_path("LICENSE.txt") - self.assertTrue(result.endswith("LICENSE.txt")) + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + show_python_powered=False, + ) + dialog.show() + + button_texts = [call[1].get("text", "") for call in mock_button.call_args_list] + self.assertNotIn("Open License", button_texts) + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Button") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_eula_button_when_path_provided( + self, mock_root, mock_label, mock_button, mock_photo, mock_path + ): + """Test that EULA button appears when eula_path is set.""" + from programver.dialog import VersionDialog - def test_get_resource_path_handles_subdirectories(self): - """Test that get_resource_path handles subdirectories correctly.""" - result = get_resource_path("imgs/dfdlogo.gif") - self.assertTrue("imgs" in result) - self.assertTrue(result.endswith("dfdlogo.gif")) + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + eula_path="/path/to/EULA", + show_python_powered=False, + ) + dialog.show() + + button_texts = [call[1].get("text", "") for call in mock_button.call_args_list] + self.assertIn("Open EULA", button_texts) + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Button") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_no_eula_button_when_path_none( + self, mock_root, mock_label, mock_button, mock_photo, mock_path + ): + """Test that EULA button is hidden when eula_path is None.""" + from programver.dialog import VersionDialog + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + show_python_powered=False, + ) + dialog.show() + + button_texts = [call[1].get("text", "") for call in mock_button.call_args_list] + self.assertNotIn("Open EULA", button_texts) + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_python_powered_badge(self, mock_root, mock_label, mock_photo, mock_path): + """Test that Python Powered badge is shown when enabled.""" + from programver.dialog import VersionDialog -class TestOpenLicense(unittest.TestCase): - """Test cases for openLicense function.""" + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + show_python_powered=True, + ) + dialog.show() + + mock_path.assert_called_once_with("pythonpoweredlengthgif.gif") + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_no_python_powered_badge(self, mock_root, mock_label, mock_photo, mock_path): + """Test that Python Powered badge is hidden when disabled.""" + from programver.dialog import VersionDialog - @patch("main.Text") - @patch("main.Tk") - @patch( - "builtins.open", new_callable=mock_open, read_data="GNU GENERAL PUBLIC LICENSE" - ) - def test_openLicense_creates_window(self, mock_file, mock_tk, mock_text): - """Test that openLicense creates a window and reads LICENSE.txt.""" mock_window = Mock() - mock_tk.return_value = mock_window - mock_text_widget = Mock() - mock_text.return_value = mock_text_widget + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + show_python_powered=False, + ) + dialog.show() + + mock_path.assert_not_called() + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_logo_when_provided(self, mock_root, mock_label, mock_photo, mock_path): + """Test that logo is displayed when logo_path is provided.""" + from programver.dialog import VersionDialog - openLicense() + mock_window = Mock() + mock_root.return_value = (mock_window, True) + + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + logo_path="/path/to/logo.gif", + show_python_powered=False, + ) + dialog.show() + + photo_calls = mock_photo.call_args_list + logo_files = [call[1].get("file", "") for call in photo_calls] + self.assertIn("/path/to/logo.gif", logo_files) + + @patch("programver.dialog.get_bundled_image_path", return_value="fake.gif") + @patch("programver.dialog.tk.PhotoImage") + @patch("programver.dialog.tk.Label") + @patch("programver.dialog.get_or_create_root") + def test_show_no_logo_when_not_provided(self, mock_root, mock_label, mock_photo, mock_path): + """Test that no logo image is loaded when logo_path is None.""" + from programver.dialog import VersionDialog - # Verify window was created - mock_tk.assert_called_once() - # Verify file was opened with absolute path - mock_file.assert_called_once() - call_args = mock_file.call_args[0] - self.assertTrue(call_args[0].endswith("LICENSE.txt")) - # Verify window title was set - mock_window.title.assert_called_once_with("License") - - @patch("main.Tk") - @patch("builtins.open", new_callable=mock_open, read_data="Test License Content") - @patch("main.Text") - def test_openLicense_displays_content(self, mock_text, mock_file, mock_tk): - """Test that openLicense displays license content.""" mock_window = Mock() - mock_tk.return_value = mock_window - mock_text_widget = Mock() - mock_text.return_value = mock_text_widget + mock_root.return_value = (mock_window, True) - openLicense() + dialog = VersionDialog( + app_name="TestApp", + version="1.0.0", + copyright_text="Copyright 2024", + show_python_powered=False, + ) + dialog.show() - # Verify text widget was created with window - mock_text.assert_called_once_with(mock_window) - # Verify content was inserted - mock_text_widget.insert.assert_called_once() - # Verify widget was packed - mock_text_widget.pack.assert_called_once() + mock_photo.assert_not_called() -class TestOpenEULA(unittest.TestCase): - """Test cases for openEULA function.""" +class TestTextViewer(unittest.TestCase): + """Test cases for TextViewer read-only text window.""" + + @patch("programver._text_viewer.tk.Text") + @patch("programver._text_viewer.tk.Scrollbar") + @patch("programver._text_viewer.tk.Frame") + @patch("programver._text_viewer.tk.Toplevel") + @patch("builtins.open", new_callable=mock_open, read_data="Test license content") + def test_uses_toplevel_not_tk( + self, mock_file, mock_toplevel, mock_frame, mock_scrollbar, mock_text + ): + """Test that TextViewer uses Toplevel, not Tk.""" + from programver._text_viewer import TextViewer - @patch("main.Text") - @patch("main.Tk") - @patch( - "builtins.open", new_callable=mock_open, read_data="END USER LICENSE AGREEMENT" - ) - def test_openEULA_creates_window(self, mock_file, mock_tk, mock_text): - """Test that openEULA creates a window and reads EULA.txt.""" + mock_parent = Mock() mock_window = Mock() - mock_tk.return_value = mock_window - mock_text_widget = Mock() - mock_text.return_value = mock_text_widget + mock_toplevel.return_value = mock_window - openEULA() + TextViewer(mock_parent, "License", "/path/to/file") - # Verify window was created - mock_tk.assert_called_once() - # Verify file was opened with absolute path - mock_file.assert_called_once() - call_args = mock_file.call_args[0] - self.assertTrue(call_args[0].endswith("EULA.txt")) - # Verify window title was set - mock_window.title.assert_called_once_with("EULA") + mock_toplevel.assert_called_once_with(mock_parent) + + @patch("programver._text_viewer.tk.Text") + @patch("programver._text_viewer.tk.Scrollbar") + @patch("programver._text_viewer.tk.Frame") + @patch("programver._text_viewer.tk.Toplevel") + @patch("builtins.open", new_callable=mock_open, read_data="Test content") + def test_sets_window_title( + self, mock_file, mock_toplevel, mock_frame, mock_scrollbar, mock_text + ): + """Test that TextViewer sets the window title.""" + from programver._text_viewer import TextViewer - @patch("main.Tk") - @patch("builtins.open", new_callable=mock_open, read_data="Test EULA Content") - @patch("main.Text") - def test_openEULA_displays_content(self, mock_text, mock_file, mock_tk): - """Test that openEULA displays EULA content.""" mock_window = Mock() - mock_tk.return_value = mock_window + mock_toplevel.return_value = mock_window + + TextViewer(Mock(), "EULA", "/path/to/file") + + mock_window.title.assert_called_once_with("EULA") + + @patch("programver._text_viewer.tk.Text") + @patch("programver._text_viewer.tk.Scrollbar") + @patch("programver._text_viewer.tk.Frame") + @patch("programver._text_viewer.tk.Toplevel") + @patch("builtins.open", new_callable=mock_open, read_data="File contents here") + def test_inserts_file_content( + self, mock_file, mock_toplevel, mock_frame, mock_scrollbar, mock_text + ): + """Test that TextViewer inserts the file contents.""" + from programver._text_viewer import TextViewer + mock_text_widget = Mock() mock_text.return_value = mock_text_widget - openEULA() + TextViewer(Mock(), "License", "/path/to/file") - # Verify text widget was created with window - mock_text.assert_called_once_with(mock_window) - # Verify content was inserted - mock_text_widget.insert.assert_called_once() - # Verify widget was packed - mock_text_widget.pack.assert_called_once() + mock_text_widget.insert.assert_called_once_with(tk.INSERT, "File contents here") + @patch("programver._text_viewer.tk.Text") + @patch("programver._text_viewer.tk.Scrollbar") + @patch("programver._text_viewer.tk.Frame") + @patch("programver._text_viewer.tk.Toplevel") + @patch("builtins.open", new_callable=mock_open, read_data="Content") + def test_text_is_disabled( + self, mock_file, mock_toplevel, mock_frame, mock_scrollbar, mock_text + ): + """Test that TextViewer sets text widget to DISABLED (read-only).""" + from programver._text_viewer import TextViewer -class TestProgramVer(unittest.TestCase): - """Test cases for ProgramVer function.""" + mock_text_widget = Mock() + mock_text.return_value = mock_text_widget - @patch("main.Tk") - @patch("main.PhotoImage") - @patch("main.Label") - @patch("main.Button") - def test_programver_creates_window( - self, mock_button, mock_label, mock_photoimage, mock_tk + TextViewer(Mock(), "License", "/path/to/file") + + mock_text_widget.config.assert_called_once_with(state=tk.DISABLED) + + @patch("programver._text_viewer.tk.Text") + @patch("programver._text_viewer.tk.Scrollbar") + @patch("programver._text_viewer.tk.Frame") + @patch("programver._text_viewer.tk.Toplevel") + @patch("builtins.open", new_callable=mock_open, read_data="Content") + def test_scrollbar_is_attached( + self, mock_file, mock_toplevel, mock_frame, mock_scrollbar, mock_text ): - """Test that ProgramVer creates main window with all components.""" - mock_window = Mock() - mock_tk.return_value = mock_window - mock_img = Mock() - mock_photoimage.return_value = mock_img + """Test that TextViewer creates and attaches a scrollbar.""" + from programver._text_viewer import TextViewer - # Mock mainloop to prevent blocking - mock_window.mainloop = Mock() + mock_sb = Mock() + mock_scrollbar.return_value = mock_sb - ProgramVer() + TextViewer(Mock(), "License", "/path/to/file") - # Verify window was created - mock_tk.assert_called_once() - # Verify window title was set - mock_window.title.assert_called_once() - title_text = mock_window.title.call_args[0][0] - assert "ProgramVer" in title_text - - @patch("main.Tk") - @patch("main.PhotoImage") - @patch("main.Label") - @patch("main.Button") - def test_programver_loads_images( - self, mock_button, mock_label, mock_photoimage, mock_tk - ): - """Test that ProgramVer loads required images.""" - mock_window = Mock() - mock_tk.return_value = mock_window - mock_window.mainloop = Mock() - - ProgramVer() - - # Verify PhotoImage was called to load images - assert mock_photoimage.call_count == 2 - # Check that both images are loaded with absolute paths - calls = mock_photoimage.call_args_list - image_files = [call[1]["file"] for call in calls] - assert any("dfdlogo.gif" in img for img in image_files) - assert any("pythonpoweredlengthgif.gif" in img for img in image_files) - - @patch("main.Tk") - @patch("main.PhotoImage") - @patch("main.Label") - @patch("main.Button") - def test_programver_creates_labels( - self, mock_button, mock_label, mock_photoimage, mock_tk - ): - """Test that ProgramVer creates appropriate labels.""" - mock_window = Mock() - mock_tk.return_value = mock_window - mock_window.mainloop = Mock() + mock_sb.pack.assert_called_once() + mock_sb.config.assert_called_once() - ProgramVer() - # Verify Label was called multiple times to create all labels - assert mock_label.call_count >= 5 +class TestGetOrCreateRoot(unittest.TestCase): + """Test cases for get_or_create_root utility.""" + + @patch("programver._utils.tk.Tk") + @patch("programver._utils.tk._default_root", None) + def test_creates_tk_when_no_root(self, mock_tk): + """Test that a new Tk root is created when none exists.""" + from programver._utils import get_or_create_root - @patch("main.Tk") - @patch("main.PhotoImage") - @patch("main.Label") - @patch("main.Button") - def test_programver_creates_buttons( - self, mock_button, mock_label, mock_photoimage, mock_tk - ): - """Test that ProgramVer creates license and EULA buttons.""" - mock_window = Mock() - mock_tk.return_value = mock_window - mock_window.mainloop = Mock() - - ProgramVer() - - # Verify Button was called for both buttons - assert mock_button.call_count == 2 - # Verify buttons have correct text and commands - calls = mock_button.call_args_list - button_texts = [call[1]["text"] for call in calls] - assert "Open License" in button_texts - assert "Open EULA" in button_texts - - @patch("main.Tk") - @patch("main.PhotoImage") - @patch("main.Label") - @patch("main.Button") - def test_programver_button_commands( - self, mock_button, mock_label, mock_photoimage, mock_tk - ): - """Test that buttons are linked to correct command functions.""" mock_window = Mock() mock_tk.return_value = mock_window - mock_window.mainloop = Mock() - ProgramVer() + window, is_standalone = get_or_create_root() - calls = mock_button.call_args_list - commands = [call[1].get("command") for call in calls] - # Verify that openLicense and openEULA are set as commands - assert openLicense in commands - assert openEULA in commands + mock_tk.assert_called_once() + self.assertTrue(is_standalone) + + @patch("programver._utils.tk.Toplevel") + def test_creates_toplevel_when_root_exists(self, mock_toplevel): + """Test that Toplevel is created when a root already exists.""" + from programver._utils import get_or_create_root + + mock_root = Mock() + mock_root.winfo_exists.return_value = True + mock_toplevel_window = Mock() + mock_toplevel.return_value = mock_toplevel_window + + with patch("programver._utils.tk._default_root", mock_root): + window, is_standalone = get_or_create_root() + + mock_toplevel.assert_called_once_with(mock_root) + self.assertFalse(is_standalone) class TestModuleIntegration(unittest.TestCase): - """Integration tests for the module.""" + """Integration tests for the package.""" + + def test_package_imports(self): + """Test that the programver package can be imported.""" + import programver + + self.assertTrue(hasattr(programver, "VersionDialog")) + self.assertTrue(hasattr(programver, "__version__")) + + def test_version_dialog_is_class(self): + """Test that VersionDialog is a class with a show method.""" + from programver import VersionDialog + + self.assertTrue(callable(VersionDialog)) + dialog = VersionDialog( + app_name="Test", version="1.0", copyright_text="Copyright" + ) + self.assertTrue(hasattr(dialog, "show")) + self.assertTrue(callable(dialog.show)) - def test_module_imports(self): - """Test that the main module can be imported successfully.""" - import main + def test_version_string(self): + """Test that __version__ is a string.""" + import programver - assert hasattr(main, "ProgramVer") - assert hasattr(main, "openLicense") - assert hasattr(main, "openEULA") - assert hasattr(main, "get_resource_path") + self.assertIsInstance(programver.__version__, str) - def test_functions_are_callable(self): - """Test that all exported functions are callable.""" - import main + def test_main_module_imports(self): + """Test that main.py's ProgramVer function is importable.""" + from main import ProgramVer - assert callable(main.ProgramVer) - assert callable(main.openLicense) - assert callable(main.openEULA) - assert callable(main.get_resource_path) + self.assertTrue(callable(ProgramVer)) if __name__ == "__main__": From e201ff820f8a788aa45dd606aaca6e45fc9b7c97 Mon Sep 17 00:00:00 2001 From: willtheorangeguy Date: Wed, 17 Jun 2026 12:26:19 -0600 Subject: [PATCH 98/98] feat: add EULA button --- EULA.md | 32 ++++++++++++++++++++++++++++++++ main.py | 1 + 2 files changed, 33 insertions(+) create mode 100644 EULA.md diff --git a/EULA.md b/EULA.md new file mode 100644 index 0000000..249e753 --- /dev/null +++ b/EULA.md @@ -0,0 +1,32 @@ +# End-User License Agreement (EULA) + +**ProgramVer** +**Effective Date: 2026-01-01** + +By installing, copying, or otherwise using ProgramVer, you agree to the terms of this End-User License Agreement. + +## 1. License Grant + +Subject to the terms of this agreement and the MIT License, you are granted a non-exclusive, worldwide, royalty-free license to use, copy, modify, and distribute ProgramVer. + +## 2. Restrictions + +You may not: +- Remove or alter any copyright notices or license text included with the software. +- Misrepresent the origin of the software or claim authorship of the original work. + +## 3. Disclaimer of Warranty + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. THE AUTHORS ARE NOT LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM THE USE OF THE SOFTWARE. + +## 4. Termination + +This agreement is effective until terminated. Your rights under this agreement will terminate automatically if you fail to comply with any of its terms. + +## 5. Governing Law + +This agreement shall be governed by the laws of Canada. + +--- + +Copyright (C) 2017-2026 Dog Face Development Co. diff --git a/main.py b/main.py index 6b379e2..73bb0ae 100644 --- a/main.py +++ b/main.py @@ -25,6 +25,7 @@ def ProgramVer(): "the United States and other countries." ), license_path=os.path.join(base_dir, "LICENSE.md"), + eula_path=os.path.join(base_dir, "EULA.md"), license_blurb=( "\nProgramVer - Version window for DFD Co.'s programs\n" "Copyright (C) 2017-2026 Dog Face Development Company\n\n"